Arduino Nano PWM-frekvens

Jeg har brugt en Arduino Nano som en PWM-controller til et varmeelement.

Jeg bruger i øjeblikket D11 (PB3). Jeg kunne skifte, selvom alle ben med PWM er i brug, og ville kræve en omskrivning og omledning.

Dette producerer et signal ved ~ 490Hz, men jeg vil gerne eksperimentere med at ændre dette til en højere frekvens.

Jeg samler det er muligt at variere frekvensen ved at ændre divisoren fra dens standard 64.

Min skitse bruger Anvendelser http://playground.arduino.cc/Main/SevenSegmentLibrary og kalder millis () – vil ændring af PWM-divisor påvirke nogen af disse?

BEMÆRK Jeg har læst setPwmFrequency -dokumentationen, men finder “forstyrrer den normale drift” ikke nyttigt – jeg er faktisk efter nogle forklaringer på den konkrete effekt. Jeg bruger kun millis() for at trykke på tidsknappen og blinke en LED, som ikke er tidskritisk

Husk, at ændring af PWM-frekvensen ændrer Atmegas timere og forstyrrer den normale drift af mange funktioner, der er afhængige af tid (forsinkelse (), millis (), servobibliotek).

Jeg har lavet nogle yderligere undersøgelser. http://playground.arduino.cc/Code/PwmFrequency angiver Ændringer på ben 3, 5, 6 eller 11 kan forårsage forsinkelse () og millis ( ) fungerer for at stoppe med at arbejde.

Andre referencer siger 3, 11 brug timer 2 de påvirker millis() eller ikke som andre referencer hævder timer 0 bruges til disse.

Kommentarer

  • Ja og nej, afhængigt af den anvendte pwm-timer.

Svar

Jeg ved ikke, hvor denne misinformation kommer fra … Svaret er no , omkonfigurering af Timer 2 gør ikke påvirker millis() eller delay(), da disse funktioner er afhængige af Timer 0. AFAIK Arduino-kernen bruger slet ikke Timer 2. Men bemærk, at der kan være andre Arduino- eller tredjepartsbiblioteker, der er afhængige af Timer 2.

Du kan her se kildekoden til millis() og delay() .

Som MITU RAJ korrekt siger i sit svar, leveres PWM-signalet på pin 11 af Timer 2, så du kan bruge den sikkert.

Kommentarer

  • Fejlagtig information kommer fra legeplads .arduino.cc / Code / PwmFrequency . Jeg er sikker på, at jeg ikke er den eneste bruger, der er blevet vildledt. Det andet svar offentliggjorde netop et uddrag af den vildledende dokumentation.

Svar

Svaret er NO , ændring af PWM-skillevæg til pin 11 påvirker ikke millis() -funktionen (eller delay()).


Forklaring:
Arduino Nano bruger ATMega328P mikrokontroller, samme som Arduino Uno .

Pin 11 “s PWM styres af Timer 2. Som standard har Timer 2 en forskala på 64 (dvs. indstilling 0x04). Basisfrekvensen for Timer 2 er 31372,55 Hz, hvilket resulterer i en frekvens på 490,2 Hz (dvs. 31372.55 / 64 = 490.1961).

På den anden side er mikrosekundtimeren (dvs. den der bruges af millis(), micros(), delay() og delayMicroseconds()) styres af Timer 0.

Så ændring af prescaler af Timer 2 påvirker ikke millis().

Det ændrer dog PWM-frekvensen for Pin 3.


Tilbage til dit spørgsmål:
De mulige PWM-frekvenser for Pin 11 (højere end 488 Hz) er:

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

Hvor 32, 8, 1 er forkalkeren.
Hvilket svarer til en indstillingsværdi på henholdsvis 0x03, 0x02 & 0x01.

Tilføj denne kodelinje:

TCCR2B = TCCR2B & 0b11111000 | setting; 

Hvor setting er værdien af indstillingen for den respektive 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 || ============================================ 

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

Kommentarer

  • Bare nitpicking men … timeren ' s basisfrekvens i fasekorrekt PWM-tilstand er F_CPU / 510 (31373 Hz), ikke F_CPU / 512: det tager 255 cyklusser at tælle f rom 0 til 255, derefter 255 mere for at tælle tilbage til nul. C.f. ligningen for PWM-frekvensen i databladet.
  • @EdgarBonet Godt punkt. Svaret er nu rettet.
  • ville det være muligt at gå et trin langsommere ned til 15.31 HZ?

Svar

Afhænger af nålen, du brugte til PWM.

Arduino UNO / NANO-specifikationer siger følgende ting:

Basisfrekvensen for ben 3, 9, 10 og 11 er 31250 Hz.

Basisfrekvensen for ben 5 og 6 er 62500 Hz.

De tilgængelige delere på ben 5, 6, 9 og 10 er: 1, 8, 64, 256 og 1024.

De dele, der er tilgængelige på ben 3 og 11, er: 1, 8, 32, 64, 128, 256 , og 1024.

PWM-frekvenser er bundet sammen i par stifter. Hvis en i et par ændres, ændres den anden også til at matche.

Pins 5 og 6 er parret på timer0.

Pins 9 og 10 er parret på timer1.

Pins 3 og 11 er parret på timer2.

Ændringer på ben 3, 5, 6 eller 11 kan forårsage forsinkelsen () og millis () -funktioner for at stoppe med at arbejde. Andre tidsrelaterede funktioner kan også blive påvirket.

Kommentarer

  • Da du ' citerer du specifikationerne, det ' ville det være rart, hvis du også kunne linke til dem? 🙂

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *