Arduino Nano PWM-frekvens (Norsk)

Jeg har brukt en Arduino Nano som en PWM-kontroller for et varmeelement.

Jeg bruker for øyeblikket D11 (PB3). Jeg kunne bytte, selv om alle pinner med PWM er i bruk, og vil kreve omskriving og omledning.

Dette gir et signal ved ~ 490Hz, men jeg vil eksperimentere med å endre dette til en høyere frekvens.

Jeg samler det er mulig å variere frekvensen ved å endre skillelinjen fra standard 64.

Min skisse bruker bruksområder http://playground.arduino.cc/Main/SevenSegmentLibrary og kaller millis () – vil endring av PWM-divisor påvirke noen av disse?

MERKNAD Jeg har lest setPwmFrequency dokumentasjonen, men finner «forstyrrer den normale driften» lite nyttig – jeg er faktisk ute etter noen forklaringer på den konkrete effekten. Jeg bruker bare millis() for å trykke på tidsknappen og blinke en LED, som ikke er tidskritisk

Husk at endring av PWM-frekvensen endrer Atmegas tidtakere og forstyrrer den normale driften av mange funksjoner som er avhengige av tid (forsinkelse (), millis (), Servo-bibliotek).

Jeg har gjort noen videre studier. http://playground.arduino.cc/Code/PwmFrequency sier Endringer på pinner 3, 5, 6 eller 11 kan føre til forsinkelse () og millis ( ) fungerer for å slutte å jobbe.

Andre referanser sier 3, 11 bruk timer 2 de påvirker millis() eller ikke som andre referanser hevder timer 0 brukes til disse.

Kommentarer

  • Ja og nei, avhengig av pwm-tidtakeren som brukes.

Svar

Jeg vet ikke hvor denne feilinformasjonen kommer fra … Svaret er nei , konfigurerer Timer 2 på nytt ikke påvirker millis() og heller ikke delay(), da disse funksjonene er avhengige av Timer 0. AFAIK Arduino-kjernen bruker ikke Timer 2 i det hele tatt. Men merk at det kan være andre Arduino- eller tredjepartsbiblioteker som er avhengige av Timer 2.

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

Som MITU RAJ korrekt sier i sitt svar, blir PWM-signalet på pin 11 levert av Timer 2, slik at du kan bruke den trygt.

Kommentarer

  • Feilinformasjonen kommer fra lekeplass .arduino.cc / Code / PwmFrequency . Jeg er sikker på at jeg ikke er den eneste brukeren som har blitt villedet. Det andre svaret publiserte nettopp et utdrag av den misvisende dokumentasjonen.

Svar

Svaret er NO , endring av PWM-deleren for pin 11 vil ikke påvirke millis() -funksjonen (eller delay()).


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

Pin 11 «s PWM styres av Timer 2. Som standard har Timer 2 en forhåndsskala på 64 (dvs. innstilling 0x04). Basisfrekvensen til Timer 2 er 31372,55 Hz, noe som resulterer i en frekvens på 490,2 Hz (dvs. 31372.55 / 64 = 490.1961).

På den annen side er mikrosekundtidsuret (dvs. den som brukes av millis(), micros(), delay() og delayMicroseconds()) styres av Timer 0.

Så endre prescaler av Timer 2 vil ikke påvirke millis().

Det vil imidlertid endre PWM-frekvensen til Pin 3.


Tilbake til spørsmålet ditt:
De mulige PWM-frekvensene til Pin 11 (høyere enn 488 Hz) er:

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

Der 32, 8, 1 er forkalkeren.
Som tilsvarer til en innstillingsverdi på henholdsvis 0x03, 0x02 & 0x01.

Legg til denne kodelinjen:

TCCR2B = TCCR2B & 0b11111000 | setting; 

Hvor setting er verdien av innstillingen 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 basefrekvens i fasekorrekt PWM-modus er F_CPU / 510 (31373 Hz), ikke F_CPU / 512: det tar 255 sykluser å telle f rom 0 til 255, deretter 255 til for å telle tilbake til null. C.f. ligningen for PWM-frekvensen i databladet.
  • @EdgarBonet Bra poeng. Svaret er nå rettet.
  • ville det være mulig å gå et trinn langsommere ned til 15.31 Hz?

Svar

Avhenger av nålen du brukte til PWM.

Arduino UNO / NANO spesifikasjoner sier følgende ting:

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

Basisfrekvensen for pinnene 5 og 6 er 62500 Hz.

Delene som er tilgjengelige på pinnene 5, 6, 9 og 10 er: 1, 8, 64, 256 og 1024.

Delene som er tilgjengelige på pinnene 3 og 11 er: 1, 8, 32, 64, 128, 256 og 1024.

PWM-frekvenser er bundet sammen i par pinner. Hvis en i et par endres, blir den andre også endret til å matche.

Pins 5 og 6 er paret på timer0.

Pins 9 og 10 er paret på timer1.

Pins 3 og 11 er paret på timer2.

Endringer på pinnene 3, 5, 6 eller 11 kan forårsake forsinkelsen () og millis () funksjoner for å slutte å fungere. Andre tidsrelaterte funksjoner kan også bli berørt.

Kommentarer

  • Siden du ' siterer du spesifikasjonene, det ' ville det være fint hvis du også kunne koble til dem? 🙂

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *