Elektronika dla Każdego

 PWM, modulacja szerokością impulsu

   Piny w Arduino możemy programować jako wejściowe (input),  wyjściowe (output) dziś poznamy jak można generować sygnał prostokątny, do pinu D3 podłączmy oscyloskop i wgrywamy program.

 void setup()

{

pinMode(3,  OUTPUT);         // Pin D3 jako wyjściowy
}

 void loop()

{
analogWrite(3,  127);        
}

 

 

   Funkcja   analogWrite   generuje sygnał protokątny o częstotliwości  490Hz. Wartość PWM  można kontrolować w zakresie 0-255. ( 0 ->0%   255 ->100%) przy 127 wypełnienie jest równe 50%

Co jeśli chcemy syganł o innej częstotliwości ?

  PWM i rejestr TCCRnB

    Bootloader Arduino domyślnie ustawia Timery i dzielniki  jak wyżej jednak wartościte można zmienić i wygenerować następującze  częstotliwości :

- 30,  122,  245, 490  Hz  

- 1,  4,  8,  31,  62  KHz

 

void setup()

 {

TCCR2B = TCCR2B & B11111000 | B00000001;     //   PWM 31,372 KHz
pinMode(3,  OUTPUT);
 }

 void loop()

 {
analogWrite(3,  127);
 }

 

 

 

Oto szczegółowe dane timerów, wyjść które można konfigurować zmianą wpisu do rejestru

 // Arduino Uno, Nano, Micro, Mini, Lilly Pad, ATmega 8, 168, 328.

 Wartości domyślne dla Pinów D3, 5, 6, 9, 10, 11.

 //------------------------------------------------ Pin PWM Arduino IDE D5 & D6 -------------------------------
 
//TCCR0B = TCCR0B & B11111000 | B00000001;    // set timer 0 divisor to     1 for PWM frequency of 62500.00 Hz
//TCCR0B = TCCR0B & B11111000 | B00000010;    // set timer 0 divisor to     8 for PWM frequency of  7812.50 Hz
  TCCR0B = TCCR0B & B11111000 | B00000011;    // set timer 0 divisor to    64 for PWM frequency of   976.56 Hz 
//TCCR0B = TCCR0B & B11111000 | B00000100;    // set timer 0 divisor to   256 for PWM frequency of   244.14 Hz
//TCCR0B = TCCR0B & B11111000 | B00000101;    // set timer 0 divisor to  1024 for PWM frequency of    61.04 Hz
 
 
//------------------------------------------------ Pin PWM Arduino IDE D9 & D10 ------------------------------
 
//TCCR1B = TCCR1B & B11111000 | B00000001;    // set timer 1 divisor to     1 for PWM frequency of 31372.55 Hz
//TCCR1B = TCCR1B & B11111000 | B00000010;    // set timer 1 divisor to     8 for PWM frequency of  3921.16 Hz
  TCCR1B = TCCR1B & B11111000 | B00000011;    // set timer 1 divisor to    64 for PWM frequency of   490.20 Hz 
//TCCR1B = TCCR1B & B11111000 | B00000100;    // set timer 1 divisor to   256 for PWM frequency of   122.55 Hz
//TCCR1B = TCCR1B & B11111000 | B00000101;    // set timer 1 divisor to  1024 for PWM frequency of    30.64 Hz
 
//------------------------------------------------ Pin PWM Arduino IDE D3 & D11 ------------------------------
 
//TCCR2B = TCCR2B & B11111000 | B00000001;    // set timer 2 divisor to     1 for PWM frequency of 31372.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000010;    // set timer 2 divisor to     8 for PWM frequency of  3921.16 Hz
//TCCR2B = TCCR2B & B11111000 | B00000011;    // set timer 2 divisor to    32 for PWM frequency of   980.39 Hz
  TCCR2B = TCCR2B & B11111000 | B00000100;    // set timer 2 divisor to    64 for PWM frequency of   490.20 Hz 
//TCCR2B = TCCR2B & B11111000 | B00000101;    // set timer 2 divisor to   128 for PWM frequency of   245.10 Hz
//TCCR2B = TCCR2B & B11111000 | B00000110;    // set timer 2 divisor to   256 for PWM frequency of   122.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000111;    // set timer 2 divisor to  1024 for PWM frequency of    30.64 Hz
 
 

  // Arduino Mega1280, Mega2560, MegaADK,ATmega1280, ATmega2560   //------------------------------------------------ Pin PWM Arduino IDE D4 & D13 ------------------------------   //TCCR0B = TCCR0B & B11111000 | B00000001; // set timer 0 divisor to 1 for PWM frequency of 62500.00 Hz //TCCR0B = TCCR0B & B11111000 | B00000010; // set timer 0 divisor to 8 for PWM frequency of 7812.50 Hz



ustawienie 31K i wartość 1 w PWM





ustawienie 31K i wartość 1 PWM "z zoomem"
czas impulsu 125ns, czas propagacji średnio 20ns




Dodaj komentarz






Dodaj

© 2013-2024 PRV.pl
Strona została stworzona kreatorem stron w serwisie PRV.pl