基于Arduino與LabVIEW的直流電機(jī)轉(zhuǎn)速控制系統(tǒng)
圖10
3.2轉(zhuǎn)速比例控制的程序設(shè)計(jì)
實(shí)現(xiàn)了電機(jī)轉(zhuǎn)速的測量,下面就要對電機(jī)轉(zhuǎn)速進(jìn)行比例控制了。為了提高控制系統(tǒng)響應(yīng)的速度,將程序代碼2轉(zhuǎn)速測量程序中的定時(shí)時(shí)間更改為10毫秒,也就是轉(zhuǎn)速的采樣頻率為100Hz,且由圖8和圖9可知,電機(jī)減速前的1秒鐘轉(zhuǎn)速在4500和12650之間,即10毫秒的轉(zhuǎn)速在45至127之間,此處將轉(zhuǎn)速設(shè)置為100,比例系數(shù)設(shè)置為3。轉(zhuǎn)速比例控制的程序設(shè)計(jì)如程序代碼3所示。
程序代碼3:轉(zhuǎn)速比例控制的程序設(shè)計(jì)
#include
#define Kp 3
#define set_point 100
long counter_val[2] = {0,0};
byte CurCnt = 0;
int j=0;
int output_value=0;
void setup()
{
}
void loop()
{
if(output_value <0)
}
//外部中斷處理函數(shù)
void counter()
{
}
//定時(shí)器中斷處理函數(shù)
void timerIsr()
{
}
通過串口輸出的電機(jī)實(shí)際轉(zhuǎn)速與PWM值的數(shù)據(jù)如圖11和圖12所示。其中圖11為系統(tǒng)剛啟動(dòng)的時(shí)候,此時(shí)可以看出電機(jī)逐漸上升,達(dá)到128之后逐漸降至100以下,這屬于系統(tǒng)初期的振蕩;圖12是系統(tǒng)運(yùn)行一段時(shí)間之后的轉(zhuǎn)速和PWM數(shù)據(jù),轉(zhuǎn)速穩(wěn)定在100±2,PWM穩(wěn)定在145左右。
圖11 PWM為80時(shí)轉(zhuǎn)速數(shù)據(jù)
圖12 PWM為255時(shí)轉(zhuǎn)速數(shù)據(jù)
圖11和圖12中的串口輸出數(shù)據(jù)看起來沒有圖形那么直觀,為此我們使用LabVIEW2012和VISA 5.3編寫一個(gè)轉(zhuǎn)速顯示程序。前面板如圖13所示,程序框圖如圖14所示,其中的數(shù)據(jù)解析子VI的程序框圖如圖15所示,其功能是解析出串口數(shù)據(jù)中的轉(zhuǎn)速值和PWM值。
除了上位機(jī)顯示程序之外,我們還需要對轉(zhuǎn)速的比例控制程序進(jìn)行部分修改,具體如下:
將
Serial.print( lTemp);
修改為
if((lTemp/100) ==0)
Serial.print( lTemp);
將
Serial.println(output_value);
修改為
if((output_value /100) ==0)
Serial.print(output_value);
圖13 LabVIEW上位機(jī)前面板
圖14 LabVIEW上位機(jī)程序框圖
圖15數(shù)據(jù)解析程序框圖
在LabVIEW上位機(jī)軟件上選擇Arduino Uno控制器對應(yīng)的串口號,即可將電機(jī)的轉(zhuǎn)速和PWM值實(shí)時(shí)的顯示在LabVIEW前面板上,如圖16所示。
圖16轉(zhuǎn)速和PWM顯示在LabVIEW上位機(jī)上
評論