Frequenza PWM Arduino Nano

Ho utilizzato un Arduino Nano come controller PWM per un elemento riscaldante.

Attualmente sto usando D11 (PB3). Potrei cambiare, sebbene tutti i pin con PWM siano in uso e richiederebbe una riscrittura e un ricablaggio.

Questo produce un segnale a ~ 490 Hz, ma vorrei provare a cambiarlo in una frequenza più alta.

Immagino che sia possibile variare la frequenza cambiando il divisore dal suo predefinito 64.

Il mio schizzo utilizza Uses http://playground.arduino.cc/Main/SevenSegmentLibrary e chiama millis (): la modifica del divisore PWM avrà un impatto su uno di questi?

NOTA Ho letto la documentazione setPwmFrequency, ma trovo inutile “interrompe il normale funzionamento” – in realtà sto cercando qualche spiegazione delleffetto concreto. Uso millis() solo per premere il pulsante e far lampeggiare un LED, che non sono critici in termini di tempo

Tieni presente che la modifica della frequenza PWM cambia la Atmega “s timer e interrompe il normale funzionamento di molte funzioni che si basano sul tempo (delay (), millis (), libreria Servo).

Ho fatto ulteriori studi. http://playground.arduino.cc/Code/PwmFrequency dichiara Le modifiche sui pin 3, 5, 6 o 11 possono causare il ritardo () e millis ( ) per smettere di funzionare.

Altri riferimenti dicono 3, 11 usano timer 2 quindi influenzano millis() o meno poiché altri riferimenti affermano che timer 0 viene utilizzato per questi.

Commenti

  • Sì e no, a seconda del timer pwm utilizzato.

Risposta

Non so da dove provenga questa disinformazione … La risposta è no , la riconfigurazione del timer 2 non influenzano millis()delay(), poiché queste funzioni si basano sul Timer 0. AFAIK il core di Arduino non usa affatto il Timer 2. Tieni però presente che potrebbero esserci altre librerie Arduino o di terze parti che si basano su Timer 2.

Puoi vedere qui il codice sorgente di millis() e delay() .

Come afferma correttamente MITU RAJ nella sua risposta, il segnale PWM sul pin 11 è fornito da Timer 2, quindi puoi usarlo in sicurezza.

Commenti

Risposta

La risposta è NO , la modifica del divisore PWM per il pin 11 non influirà sulla funzione millis() (né delay()).


Spiegazione:
Arduino Nano utilizza il microcontrollore ATMega328P, come Arduino Uno .

Il PWM del pin 11 “è controllato dal timer 2. Per impostazione predefinita, il timer 2 ha una prescala di 64 (cioè limpostazione 0x04). La frequenza di base del timer 2 è 31372,55 Hz risultante in una frequenza di 490,2 Hz (cioè 31372.55 / 64 = 490.1961).

Daltra parte, il timer in microsecondi (ovvero quello utilizzato da millis(), micros(), delay() e delayMicroseconds()) è controllato dal Timer 0.

Quindi la modifica del prescaler del Timer 2 non influirà su millis().

Tuttavia, cambierà la frequenza PWM del Pin 3.


Torna alla tua domanda:
Le possibili frequenze PWM del Pin 11 (superiori a 488 Hz) sono:

31373/32 = 980,4 Hz
31373/8 = 3921,6 Hz
31373/1 = 31373 Hz

Dove 32, 8, 1 sono il prescaler.
Che equivale a un valore di impostazione di 0x03, 0x02 & 0x01 rispettivamente.

Aggiungi questa riga di codice:

TCCR2B = TCCR2B & 0b11111000 | setting; 

Dove setting è il valore dellimpostazione per il rispettivo prescaler.

============================================ || Frequency [Hz] || Prescaler || Setting || ============================================ || 31373.55 || 1 || 0x01 || || 3921.57 || 8 || 0x02 || || 980.39 || 32 || 0x03 || || 490.20 || 64 || 0x04 || || 245.10 || 128 || 0x05 || || 122.55 || 256 || 0x06 || || 30.64 || 1024 || 0x07 || ============================================ 

Codice sorgente : https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c

Commenti

  • Semplicemente pignolo ma … la frequenza di base del timer ' in modalità PWM con correzione di fase è F_CPU / 510 (31373 Hz), non F_CPU / 512: ci vogliono 255 cicli per contare f da 0 a 255, quindi altri 255 per tornare a zero. C.f. lequazione per la frequenza PWM nel foglio dati.
  • @EdgarBonet Buon punto. La risposta è stata ora corretta.
  • sarebbe possibile scendere di un gradino più lentamente fino a 15,31 HZ?

Risposta

Dipende dal pin che hai usato per il PWM.

Le specifiche di Arduino UNO / NANO dicono le seguenti cose:

La frequenza di base per i pin 3, 9, 10 e 11 è 31250 Hz.

La frequenza di base per i pin 5 e 6 è 62500 Hz.

I divisori disponibili sui pin 5, 6, 9 e 10 sono: 1, 8, 64, 256 e 1024.

I divisori disponibili sui pin 3 e 11 sono: 1, 8, 32, 64, 128, 256 e 1024.

Le frequenze PWM sono legate insieme in coppie di pin. Se uno in una coppia viene modificato, anche laltro viene modificato in modo che corrisponda.

I pin 5 e 6 vengono accoppiati sul timer0.

I pin 9 e 10 vengono accoppiati sul timer1.

I pin 3 e 11 sono accoppiati sul timer2.

Le modifiche sui pin 3, 5, 6 o 11 possono causare il ritardo () e millis () per smettere di funzionare. Potrebbero essere influenzate anche altre funzioni relative al tempo.

Commenti

  • Dato che ' citando le specifiche, ' sarebbe carino se potessi anche collegarti a loro? 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *