Voglio usare un arduino per pilotare a half bridge ad alta frequenza. Per questo ho bisogno di configurare due pin in modo che diano due segnali alla stessa frequenza ma in opposizione di fase con un tempo morto tra una transizione e l'altra. Impostando i registri in questo modo (Phase-Correct PWM):
riesco a farlo. Tuttavia vorrei aver modo di regolare la frequenza in modo preciso (adesso posso solo saltare in blocchi cambiando il prescaler). Qualcuno saprebbe suggerirmi come fare?
Potresti usare il timer 1 che è a 16 bit ed ha quindi una maggior risoluzione rispetto al timer 2 che è a 8 bit.
La frequenza dei 2 pin la vari agendo sul registro OCRxA e OCRxB che regolano il compare match per il timer.
Devi ricalcolare poi tutti i valori e la modalità per il timer a 16 bit, e cambiare i pin perché il timer 1 esce sui pin 9 e 10.
Ciao,
grazie del suggerimento. Solo che il mio problema è vorrei cambiare la frequenza dei due IO in un range continuo da 100 a 300Khz. Con i due registri posso solo cambiare il duty. Cambiando il prescaler posso cambiare la frequenza a multipli di due. Io vorrei poter alterare sia i duty che la frequenza in modo continuo. Mi stavo chiedendo se era possibile usare un timer per triggerare un altro in modo da poter gestire i due PWM in modo indipendente
Putroppo la cosa si fa complessa: ad ogni cambio di prescaler ti dovresti ricalcolare il valore di OCRxA/B per adeguarlo al range di frequenza che vuoi usare.
Per attivare il secondo segnale sfalsato rispetto al primo con un altro timer la risposta è sì: dovresti semplicemente, all'interno della ISR di gestione dell'interrupt del primo timer, attivare il secondo timer impostato per triggherare il pin dopo un certo periodo e poi, all'interno della ISR di questo timer, disattivare l'interrupt.
Questo link per apprendere la tecnica è buon inizio, ma fai attenzione poiché lo schema e lo sketch sono stati progettati per il funzionamento a 125AC 60Hz:
Avevo anch'io individuato l'interrupt per gestire il zero-crossing, solo non volevo inchiodare la CPU per gestire il ritardo dell'impulso di accensione.
Oltre al classico "copia/incolla" spero di capirci qualcosa con questo nuove librerie.