arduino之PWM的實現


首先我們要知道什么是PWM,PWM就是在輸出直流電的時候有時候也會輸出低電平。一會高一會低,這樣就有規律了。這樣做的方法就是為了讓輸出的不同的有效電壓值!
在arduino有一個Stepper庫就是專門為步進電機的,可以看看!
實現PWM的方法有以下幾種:

1、用analogWrite(pin, val)命令
其中pin是腿的編號,傳說中只能用3,5,6,9,10,11這幾條;val是0~255的整數值,對應電壓從0到+5V。注意,那幾個腳的編號,指的是ATmega168的pin編號,Arduino的板子會用這幾個管腳支持更多路的PWM輸出。

Arduino Nano 的analogWrite的頻率是490Hz,電壓是5V

Arduino Due 的analogWrite 的頻率是1KHz,電壓是3.3V

Teensy 4.1 analogWrite的頻率是4.82KHz,電壓是3.3V
具體的使用可以看下面的示例代碼:

 

int pwm = 5; //0~13
 
    void setup()
    {
        pinMode(pwm, OUTPUT);
    }   
 
    void loop()
    {
        analogWrite(pwm, 250);
        delay(200);
    }

2、 使用digitalWrite來實現pwm。

int pin = 4;  
 
void setup()
{
    pinMode(pin, OUTPUT);
}
 
void loop()
{
  digitalWrite(pin, HIGH);
  delayMicroseconds(500);
  digitalWrite(pin, LOW);
  delayMicroseconds(1000 - 500);
}  

  

 

 

  

3、使用寄存器:
里面有兩個timer。

pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS22);
OCR2A = 180;
OCR2B = 50;


輸出口3的頻率: 16 MHz / 64 / 256 = 976.5625Hz
輸出口3的占空比: (180+1) / 256 = 70.7%
輸出口11的頻率: 16 MHz / 64 / 256 = 976.5625Hz
輸出口11的占空比: (50+1) / 256 = 19.9%
參考:

http://www.geek-workshop.com/thread-119-1-1.html
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

https://blog.csdn.net/c602273091/article/details/39004999

 https://www.cnblogs.com/lulipro/p/6092264.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM