Pagina 1 di 1

Cambiare frequenza PWM arduino

MessaggioInviato: 1 nov 2015, 15:45
da murdok
Salve, avrei la necessità di cambiare la frequenza PWM erogata dai pin 9 e 10 arduino uno (attualmente 488Hz con prescaler 64) e portarla a 32250Hz mediante il prescaler 1.
Ho provato a consultare varie guide su google, ma non sono riuscito nel mio intento.
Non capisco se devo modificare il prescaler su qualche file del programmatore.... :roll:

Grazie...

Re: Cambiare frequenza PWM arduino

MessaggioInviato: 1 nov 2015, 23:46
da paofanello
Non so aiutarti... Qui hai visto?

Re: Cambiare frequenza PWM arduino

MessaggioInviato: 2 nov 2015, 15:55
da Russell
un prescaler di 64 è troppo alto, devi metterelo ad 1
A quel punto arriverai ad una freq di 31.250 kHz
la frequenza che chiedi tu non credo sia possibile, spero non faccia molta differenza.

leggi questa pagina fino alla fine
http://playground.arduino.cc/Main/TimerPWMCheatsheet

se sei proprio a zero, allora fatti un'infarinatura (in italiano) qui prima di passare all'altro documento
http://www.mauroalfieri.it/elettronica/frequenza-pwm-arduino-duty-cycle.html

Re: Cambiare frequenza PWM arduino

MessaggioInviato: 2 nov 2015, 18:44
da murdok
Russel, ho letto quella pagina e ho trovato anche altri link.
Ora devo testare le ricerche effettuate...
Riguardo alla frequenza (31.250 Hz) è quella che sto cercando! ;-)

Re: Cambiare frequenza PWM arduino

MessaggioInviato: 3 nov 2015, 22:07
da murdok
Ho trovato la soluzione! :D

non modificare la frequenza del PWM sui pin 5 e 6, perché porterebbero malfunzionamenti ai temporizzatori!

Nella funzione void setup() inserire il seguente codice:

Codice: Seleziona tutto
  byte mode;
  mode = 0x01;    // inserire qui il valore del timer desiderato
  TCCR1B = TCCR1B & 0b11111000 | mode;   // temporizzatore da settare




i vari temporizzatori controllano i seguenti pin:

timer 0 (controls pin 13, 4);
timer 1 (controls pin 12, 11);
timer 2 (controls pin 10, 9);
timer 3 (controls pin 5, 3, 2);
timer 4 (controls pin 8, 7, 6);


tabella per la selezione del valore del TCCR0B del timer0 (pin 5 e 6)
prescaler = 1 ----> PWM frequency is 62500 Hz -------------------------------------------------------------->mode = 0x01;
prescaler = 2 ----> PWM frequency is 7812,5 Hz-------------------------------------------------------------->mode = 0x02;
prescaler = 3 ----> PWM frequency is 976,5625 Hz (default value)------------------------------------->mode = 0x03;
prescaler = 4 ----> PWM frequency is 244,1406 Hz----------------------------------------------------------->mode = 0x04;
prescaler = 5 ----> PWM frequency is 61,0351 Hz------------------------------------------------------------->mode = 0x05;

TCCR0B = TCCR0B & 0b11111000 | mode;





tabella per la selezione del valore del TCCR1B del timer1 (pin 9 e 10)
prescaler = 1 ----> PWM frequency is 31250 Hz -------------------------------------------------------------->mode = 0x01;
prescaler = 2 ----> PWM frequency is 3906,25 Hz------------------------------------------------------------>mode = 0x02;
prescaler = 3 ----> PWM frequency is 488,28125 Hz (default value)----------------------------------->mode = 0x03;
prescaler = 4 ----> PWM frequency is 122,0703125 Hz----------------------------------------------------->mode = 0x04;
prescaler = 5 ----> PWM frequency is 30,5175 Hz------------------------------------------------------------>mode = 0x05;

TCCR1B = TCCR1B & 0b11111000 | mode;






tabella per la selezione del valore del TCCR2B del timer2 (pin 11 e 3)
prescaler = 1 ----> PWM frequency is 31250 Hz -------------------------------------------------------------->mode = 0x01;
prescaler = 2 ----> PWM frequency is 3906,25 Hz------------------------------------------------------------>mode = 0x02;
prescaler = 3 ----> PWM frequency is 488,28125 Hz (default value)----------------------------------->mode = 0x03;
prescaler = 4 ----> PWM frequency is 122,0703125 Hz----------------------------------------------------->mode = 0x04;
prescaler = 5 ----> PWM frequency is 30,5175 Hz------------------------------------------------------------>mode = 0x05;

TCCR2B = TCCR2B & 0b11111000 | mode;



Saluti O_/ --->