Il grande Bolle sta minando il lavoro svolto fin'ora: devo difenderlo !!!



Vediamo di ragionare un po'...
Il sistema attuale può essere paragonato, con buona approssimazione, a un sistema dual-Core così funzionante:
- il Core 1 (il nostro Timer1) si occupa di generare l'onda con tecnica PWM, dividendo ogni semionda in 160 spicchi e in ogni spicchio può settare un valore con una definizione di 700 punti.
Questo vul dire avere una risoluzione di circa 0,3 Vac.
Anche il campionamento a 160 punti è particolarmente preciso.
In tali condizioni l'onda sintetizzata è pulita, non distorta, precisa.
Abbiamo visto che risulta abbastanza semplice variare ampiezza e frequenza dell'onda generata, senza minimamente intaccare il funzionamento del Core 1.
Con 160 spicchi, il Core 1 ogni 62,5 microS imposta un nuovo valore di PWM e lo fa con una precisione elevata, dettata dal Quarzo.
- Il Core 2, invece, il nostro loop (o main) è libero di fare ciò che vuole, quando vuole e con i tempi che vuole.
Unico compromesso a cui deve sottostare è che ogni 62,5 microsecondi deve fare una pausa di qualche microsecondo per permettere alla ISR di eseguire il suo codice.
I due Core possono facilmente comunicare con delle variabili globali.
Il sistema permette di avere un Core che lavora con tempi fissi, precisi, conosciuti su cui possiamo fare ogni tipo di calcolo (per esempio Elettro ha suggerito di utilizzarlo come base dei tempi per un frequenzimetro per leggere l'onda Enel) e un Core che non ha vincoli, può fare ciò che gli pare.
A me sembra di riuscire a sfruttare tutti gli aspetti positivi di una programmazione basata sulla conoscenza dei tempi di ogni operazione e, contemporaneamente, di una in cui non ci si preoccupa dei tempi.
Se ho capito bene in che direzione vuoi procedere (vedi post precedente) tu vuoi abbandonare questo approccio per orientarti verso un approccio che ragiona più o meno così:
Anziché campionare a 62,5 microS fissi, campiono al massimo che riesce a fare il micro (diciamo 10 microS) ma se per caso il micro è impegnato a completare un'operazione non è un problema, appena finito imposto il nuovo valore, anche se dovesse essere dopo 200 microS !
Se è così continuo a pensare che sono meglio i 62,5 "fissi" che i 10 "non so" !!!
I vantaggi del primo sistema sono evidenti:
- Onda perfetta e senza distorsioni;
- Conoscenza dei tempi: dead-time, campionamento, etc;
- Ottima frequenza di campionamento: 16 KHz;
- Ottima risoluzione in uscita: 700 valori (in realtà 1.000, ma 300 li lasciamo per correzione V-Out);
- Software pseudo-dual-Core;
- Ciclo loop svincolato dalla generazione del PWM;
- ...
I vantaggi del secondo sistema sono:
- possibilità di campionare con tempi minori di 62,5 microS;
- nessuna pausa imposta ogni tot microS (per ora...);
- ... Non mi viene in mente altro...
Di contro la seconda soluzione non sa nulla dei tempi, non ci garantisce nulla ! Il DeadTime (da noi archiviato) tornerebbe a essere un problema !!!
Perché mai dobbiamo migrare al tuo approccio ???