Arduino:直流電機PWM調速?

引言:

設計一種基於Arduino直流電機PWM調速系統,

PWM電機調速是開環控制技術,精度比較低,容易實現;

更高階的自動控制技術要用到PID控制。

直流電機調速系統是電機調速控制中發展得最為成熟,應用非常廣泛的電力傳動系統。

Arduino:直流電機PWM調速

工具/原料

Arduino板一片;

電機驅動板一片;一般是L298;

杜邦線一些;

直流電機2個;

方法/步驟

硬體準備:

如圖所示:

Arduino:直流電機PWM調速

Arduino:直流電機PWM調速

Arduino:直流電機PWM調速

Arduino:直流電機PWM調速

電路連線:

L298N out1,out2分別直接電機引用

L298N N1,N2分別接arduino 10,11引腳

L298N ENA使能端接arduino 6引腳,高電平有效

L298N +5V腳接arduino +5V

L298N GND腳接arduino GND

Arduino:直流電機PWM調速

analogWrite():

功能:給埠寫入一個模擬值(PWM波)。

可以用來控制LED燈的亮度變化,或者以不同的速度驅動馬達。

當執行analogWrite()命令後,埠會輸出一個穩定的佔空比的方波。除非有下一個命令來改變它。

PWM訊號的頻率大約為490Hz.

在使用analogWrite()命令前,可以不使用pinMode()命令把埠定義為輸出埠,當然如果定義了更好,這樣利於程式語言規範。

Arduino:直流電機PWM調速

delayMicroseconds():

作用:產生一個延時,計量單位是微秒,1000微秒=1毫秒。

目前delayMicroseconds()最大值為16383。

如果值大於1000,推薦使用delay() 命令。

Arduino:直流電機PWM調速

PWM(Pulse-width modulation)脈寬調製

PWM是使用數字手段來控制模擬輸出的一種手段。

使用數字控制產生佔空比不同的方波(一個不停在開與關之間切換的訊號)來控制模擬輸出。

arduino的數字埠電壓輸出只有LOW與HIGH兩個開關,

對應0V與5V的電壓輸出,

週期為PWM頻率的倒數。

如果arduino PWM的頻率是500Hz,那麼兩綠線之間的週期就是2毫秒。 analogWrite() 命令中可以操控的範圍為0-255,

analogWrite(255)表示100%佔空比(常開),

analogWrite(127)佔空比大約為50%(一半的時間)。

如圖所示:

Arduino:直流電機PWM調速

傳統方法實現PWM:

除了使用analogWrite()命令實現PWM,

還可以通過傳統方法來控制電平的開關時間來設定。

優點:可以使用任意數字埠做輸出埠,且可以自己隨意設定佔空比與頻率;

缺點:是任何中斷都會影響時鐘,導致很大的抖動,除非禁用中斷;

以及CPU在處理輸出的時,無法做其他事情。

程式:

void setup(){

pinMode(13, OUTPUT);//設定13號埠為輸出

}

void loop(){

digitalWrite(13, HIGH);

delayMicroseconds(100); // 大約10%佔空比的1KHz方波

digitalWrite(13, LOW);

delayMicroseconds(900);

}

Arduino:直流電機PWM調速

PWM直流電機調速(程式碼):

int i=0;

void Forward();

void Back();

void Turn_left();

void Turn_right();

void Speed_up();

void Slow_down();

void setup() {

// put your setup code here, to run once:

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

}

void loop() {

// put your main code here, to run repeatedly:

Forward();

Back();

Turn_left();

Turn_right();

Speed_up();

Slow_down();

}

void Forward(){

//you guys must understand which pin connect to VCC,which pin connect to GND

digitalWrite(9,HIGH);

digitalWrite(10,LOW);

digitalWrite(5,HIGH);

digitalWrite(6,LOW);

delay(4000);

}

void Back(){

digitalWrite(9,LOW);

digitalWrite(10,HIGH);

digitalWrite(5,LOW);

digitalWrite(6,HIGH);

delay(4000);

}

void Turn_left(){

digitalWrite(9,LOW);

digitalWrite(10,LOW);

digitalWrite(5,HIGH);

digitalWrite(6,LOW);

delay(4000);

}

void Turn_right(){

digitalWrite(9,HIGH);

digitalWrite(10,LOW);

digitalWrite(5,LOW);

digitalWrite(6,LOW);

delay(4000);

}

void Speed_up(){

for(i=0;i<=255;i+=5){

analogWrite(9,i);

analogWrite(10,0);

analogWrite(5,i);

analogWrite(6,0);

delay(50);

}//speed up

}

void Slow_down(){

for(i=255;i>=0;i-=5) {

analogWrite(9,i);

analogWrite(10,0);

analogWrite(5,i);

analogWrite(6,0);

delay(50);

}

}

Arduino:直流電機PWM調速

注意事項

硬體電路連線要正確;

analogWrite():給埠寫入一個模擬值(PWM波)。

analogWrite(255)表示100%佔空比(常開), analogWrite(127)佔空比大約為50%(一半的時間)。

傳統方法實現PWM;

系統, 硬體, 電機, 直流電機, 控制技術,
相關問題答案