Ciao a tutti,
in questi giorni sto' studiando nel dettaglio il problema relativo agli ESC PWM , premetto che avendo da sempre impiegato a ragion veduta solo ESC I2c per ovvie ragioni di risoluzione e di ottimizazione del cablaggio grazie all'utilizzo di una sola coppia di cavi per far transitare fino a 12 canali ora mi trovo a litigare quotidianamente per cercare di far funzionare ESC PWM di diverse marche e con diverse caratteristiche di setup taratura ecc ecc.
Premesso tutto questo veniamo a noi :
Nel forum la maggior parte degli utenti impiega micro arduino che tipicamente usano PWM a 8 bit per comunicare con gli ESC da qui la prima osservazione , per far funzionare questi ESC e' fondamentale alzare gli Hz di pilotaggio 400 e rotti e non piu' di 400 . Mi sono chiesto il perche' di tutto cio' e ho trovato una spiegazione , almeno penso . Piu si alza la frequenza di clock piu' il dutycicle corrisponde a grandi linee a 3 millisecondi quindi impieghi tutti e 254 punti di risoluzioni sul timer in una finestra piu' stretta , se vai oltre e ti porti a 700 hz per esempio non hai piu' lo spazio per arrivare a pilotare fino a 2 millisecondi. arrivi al massimo a 1.6 - 1.7 Avendo il codice del regolatore si potrebbe modificare il range in ingresso per guadagnare in risoluzione.
Ovviamente tutto questo cambia se usi un pwm che lavora a 16 bit anziche' a 8 Bit . Il micro piu' diffuso che ha questa caratteristica e' l'arduino mega che a quanto pare non ha problemi di gestione dei pwm a 16 bit anzi si puo' usare anche la configurazione FAST PWM.
Altra possibilità e' usare un PWM anzichè totalmente hardware gestito dagli interrupt timer ... cosi' si potrebbe sfruttare il timer1 di arduino che ha una risoluzione di 16 Bit.
Questa soluzione è impiegata ampiamente sulla multiwii per gestire i due canali aggiuntivi nella configurazione hexa e per gestire il servo di coda ...
L'unica cosa che non mi piace molto di questo approccio e' dover impiegare tempo macchina per fare una cosa che un pwm hardware risolve da solo senza appesantire il processore.
Io conosco queste librerie :
- Servo
- Analogwrite
- TimerPWM
- ServoTimer2
- TimerOne
Qualche altro consiglio ... mi sembra pero' che al massimo si arrivi a 120 punti di risoluzione nel range 1000 - 2000 micro secondi con 460 hz di periodo . Purtroppo usando un micro a 20 Mhz anziche' a 16 io vado a 700 hz e non riesco ad usare l'analogwrite .. qualche consiglio su come abbassare il periodo usando i prescaler ..? Per ora non sono ancora riuscito a venirne a capo .. anzi diciamo che su timer0 e timer2 potrei andare a 240 (16) che per me sono 300 e rotti hz meglio che i 150 a cui mi sono dovuto fermare ora .. andare a toccare il prescaler di timer0 pero' vuol dire cambiare la base dei tempi di arduino .. delle funzioni micros , delay ecc ecc .. un gran casino insomma ...
Un saluto a tutti e spero che qualcuno che ci ha gia' sbattuto il naso mi possa dare qualche buona dritta.
Un saluto
Roberto
in questi giorni sto' studiando nel dettaglio il problema relativo agli ESC PWM , premetto che avendo da sempre impiegato a ragion veduta solo ESC I2c per ovvie ragioni di risoluzione e di ottimizazione del cablaggio grazie all'utilizzo di una sola coppia di cavi per far transitare fino a 12 canali ora mi trovo a litigare quotidianamente per cercare di far funzionare ESC PWM di diverse marche e con diverse caratteristiche di setup taratura ecc ecc.
Premesso tutto questo veniamo a noi :
Nel forum la maggior parte degli utenti impiega micro arduino che tipicamente usano PWM a 8 bit per comunicare con gli ESC da qui la prima osservazione , per far funzionare questi ESC e' fondamentale alzare gli Hz di pilotaggio 400 e rotti e non piu' di 400 . Mi sono chiesto il perche' di tutto cio' e ho trovato una spiegazione , almeno penso . Piu si alza la frequenza di clock piu' il dutycicle corrisponde a grandi linee a 3 millisecondi quindi impieghi tutti e 254 punti di risoluzioni sul timer in una finestra piu' stretta , se vai oltre e ti porti a 700 hz per esempio non hai piu' lo spazio per arrivare a pilotare fino a 2 millisecondi. arrivi al massimo a 1.6 - 1.7 Avendo il codice del regolatore si potrebbe modificare il range in ingresso per guadagnare in risoluzione.
Ovviamente tutto questo cambia se usi un pwm che lavora a 16 bit anziche' a 8 Bit . Il micro piu' diffuso che ha questa caratteristica e' l'arduino mega che a quanto pare non ha problemi di gestione dei pwm a 16 bit anzi si puo' usare anche la configurazione FAST PWM.
Altra possibilità e' usare un PWM anzichè totalmente hardware gestito dagli interrupt timer ... cosi' si potrebbe sfruttare il timer1 di arduino che ha una risoluzione di 16 Bit.
Questa soluzione è impiegata ampiamente sulla multiwii per gestire i due canali aggiuntivi nella configurazione hexa e per gestire il servo di coda ...
L'unica cosa che non mi piace molto di questo approccio e' dover impiegare tempo macchina per fare una cosa che un pwm hardware risolve da solo senza appesantire il processore.
Io conosco queste librerie :
- Servo
- Analogwrite
- TimerPWM
- ServoTimer2
- TimerOne
Qualche altro consiglio ... mi sembra pero' che al massimo si arrivi a 120 punti di risoluzione nel range 1000 - 2000 micro secondi con 460 hz di periodo . Purtroppo usando un micro a 20 Mhz anziche' a 16 io vado a 700 hz e non riesco ad usare l'analogwrite .. qualche consiglio su come abbassare il periodo usando i prescaler ..? Per ora non sono ancora riuscito a venirne a capo .. anzi diciamo che su timer0 e timer2 potrei andare a 240 (16) che per me sono 300 e rotti hz meglio che i 150 a cui mi sono dovuto fermare ora .. andare a toccare il prescaler di timer0 pero' vuol dire cambiare la base dei tempi di arduino .. delle funzioni micros , delay ecc ecc .. un gran casino insomma ...
Un saluto a tutti e spero che qualcuno che ci ha gia' sbattuto il naso mi possa dare qualche buona dritta.
Un saluto
Roberto
Commenta