5、樹莓派3 Model B ——— 樹莓派PWM控制直流電機速度

浪子天涯63發表於2017-06-07

1、實驗前準備


           樹莓派3B及電源 x1

       麵包板 x1

       LED燈 x1

       ULN2003電機驅動或者L293、L298  x1

       直流電機小風扇x1 

       電阻220歐 x1

       杜邦線若干


2、實驗原理



PWM就是脈衝寬度調製,也就是佔空比可變的脈衝波形.

       脈衝寬度調製是一種對模擬訊號電平進行數字編碼的方法。通過高解析度計數器的使用,方波的佔空比被調製用來對一個具體模擬訊號的電平進行編碼。PWM訊號仍然是數字的,因為在給定的任何時刻,滿幅值的直流供電要麼完全有(ON),要麼完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重複脈衝序列被加到模擬負載上去的。通的時候即是直流供電被加到負載上的時候,斷的時候即是供電被斷開的時候。只要頻寬足夠,任何模擬值都可以使用PWM進行編碼。

       如圖佔空比為 t:T


對於樹莓派硬體PWM只有1腳(wiringPi)GPIO.1,那麼我們單獨測試此腳通過不同佔空比可以實現呼吸燈或者控制電機速度。


3、實驗步驟


按照如下接線。
LED正極接GPIO.1,串聯一個220Ω電阻接地,ULN2003電源接入5V電源和地,輸出接直流小電機暫且用D,對應GPIO.1接入IN4。
編寫控制程式碼如下,我們實現一個很簡單的功能,PWM從小的佔空比到最大然後在從小到大,實現呼吸燈的效果,電機也速度從慢到快,從快再到慢的過程。程式碼如下:


#include <wiringPi.h>
 
#define PWMPin 1    //定義PWM引腳
 
void setup();
 
int main (void)
{
    setup();
    intval = 0;
    intstep = 2;
    while(1)
    {
      if(val>1024)
      {
          step = -step;    
          val = 1024;
      }
      else if(val<0)
      {
          step = -step;
          val = 0;
      }
 
      pwmWrite(PWMPin,val);
      val+=step;
      delay(10);
  }
  return 0 ;
} 
/*初始化配置*/
void setup()
{
       wiringPiSetup ();         //wiringPi庫初始化
       pinMode (PWMPin, PWM_OUTPUT);   //設定1為PWM輸出    
}



編寫完程式碼通過SSH檔案上傳到wiringPi目錄下。
輸入如下命令:


# gcc -o pwm pwm.c -lwiringPi


執行:
# ./pwm或者sudo  ./pwm


實驗現象:我們執行程式,則LED會從亮到滅再到亮逐漸變化的過程即呼吸燈效果,直流電機小風扇從快到慢再到快實現了電機的調速功能。到此我們按鍵輸入的學習到此結束,下一講我們開始學習樹莓派中斷的知識,可以引入外部中斷來處理突發事件,比如障礙物靠近,開始下一講吧!
下一講:6、樹莓派中斷實驗, 通過按鍵模擬外部中斷,控制LED亮滅。

相關文章