基于labview的PWM電機(jī)調(diào)速 一、簡(jiǎn)介: 此設(shè)計(jì)模擬工業(yè)控制現(xiàn)場(chǎng),通過(guò)調(diào)節(jié)Labview界面中的模擬儀表,通過(guò)RS232串口通信,把轉(zhuǎn)速控制信息通過(guò)串口傳送到單片機(jī)中,進(jìn)而利用單片機(jī)控制電動(dòng)機(jī)的轉(zhuǎn)速。 二、Labview前面板設(shè)計(jì): 1.左部分為通訊端口、波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位、延時(shí)等選擇端口。 2.中間為所調(diào)電壓的PWM波形,圖中藍(lán)綠色所示。 3.右部分顯示的是等效電壓的大小,圖中所示為2.35V。 4.下半部分為調(diào)節(jié)電壓的儀表和確定按鈕,當(dāng)調(diào)節(jié)好電壓,按下確定鍵后方能調(diào)節(jié)電機(jī)轉(zhuǎn)速。 三、Labview程序框圖: 1. 串口通訊部分: 2.PWM電壓波形顯示部分: 四、硬件設(shè)計(jì): 單片機(jī)IO端口的電流太小,不足以驅(qū)動(dòng)直流電機(jī);本設(shè)計(jì)通過(guò)I0端口外接ULN2003AN驅(qū)動(dòng)直流電動(dòng)機(jī)。 五、單片機(jī)部分程序: /*********************************************關(guān)于頻率和占空比的確定,對(duì)于12M晶振,假定PWM輸出頻率為1KHZ,這樣定時(shí)中斷次數(shù) * *設(shè)定為C=10,即0.01MS中斷一次,則TH0=FF,TL0=F6;由于設(shè)定中斷時(shí)間為0.01ms,這樣* *可以設(shè)定占空比可從1-100變化。即0.01ms*100=1ms ******************************************************************************/ #include<reg52.h> //52單片機(jī)頭文件 #include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫(kù) #define uint unsigned int //宏定義 #define uchar unsigned char //宏定義 #define V_TH0 0XFF #define V_TL0 0XF6 uchar ZKB1; sbit P1_2=P1^2; void init_sys(void); /*系統(tǒng)初始化函數(shù)*/ void main() //主函數(shù) { init_sys(); while(1) { /*對(duì)占空比值限定范圍*/ if (ZKB1>99) ZKB1=1; if (ZKB1<1) ZKB1=99; } } void timer0(void) interrupt 1 using 2 { static uchar click=0; /*中斷次數(shù)計(jì)數(shù)器變量*/ TH0=V_TH0; /*恢復(fù)定時(shí)器初始值*/ TL0=V_TL0; ++click; if (click>=100) click=0; if (click<=ZKB1) /*當(dāng)小于占空比值時(shí)輸出低電平,高于時(shí)是高電平,從而實(shí)現(xiàn)占空比的調(diào)整*/ P1_2=1; else P1_2=0; } void ser() interrupt 4 { RI=0; ZKB1=SBUF; } /*系統(tǒng)初始化函數(shù)*/ void init_sys() { ZKB1=40; TMOD=0x21;//設(shè)置定時(shí)器0工作方式1,定時(shí)器1為工作方式2 TH0=V_TH0; //定時(shí)0.01s TL0=V_TL0; TH1=0xF3; //波特率2400 TL1=0xF3; REN=1; //允許串口接收數(shù)據(jù) SM0=0;//串口工作方式1,8位數(shù)據(jù)傳送 SM1=1; EA=1;//開總中斷 ES=1; //串口中斷開 PS=1; //串口中斷優(yōu)先級(jí)最高 ET0=1;//開定時(shí)器0中斷 TR1=1; //開波特率 TR0=1;//啟動(dòng)定時(shí)器0 } 基于labview的PWM電機(jī)調(diào)速 一、簡(jiǎn)介: 此設(shè)計(jì)模擬工業(yè)控制現(xiàn)場(chǎng),通過(guò)調(diào)節(jié)Labview界面中的模擬儀表,通過(guò)RS232串口通信,把轉(zhuǎn)速控制信息通過(guò)串口傳送到單片機(jī)中,進(jìn)而利用單片機(jī)控制電動(dòng)機(jī)的轉(zhuǎn)速。 二、Labview前面板設(shè)計(jì): 1.左部分為通訊端口、波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位、延時(shí)等選擇端口。 2.中間為所調(diào)電壓的PWM波形,圖中藍(lán)綠色所示。 3.右部分顯示的是等效電壓的大小,圖中所示為2.35V。 4.下半部分為調(diào)節(jié)電壓的儀表和確定按鈕,當(dāng)調(diào)節(jié)好電壓,按下確定鍵后方能調(diào)節(jié)電機(jī)轉(zhuǎn)速。 三、Labview程序框圖: 1. 串口通訊部分: 2.PWM電壓波形顯示部分: 四、硬件設(shè)計(jì): 單片機(jī)IO端口的電流太小,不足以驅(qū)動(dòng)直流電機(jī);本設(shè)計(jì)通過(guò)I0端口外接ULN2003AN驅(qū)動(dòng)直流電動(dòng)機(jī)。 五、單片機(jī)部分程序: /*********************************************關(guān)于頻率和占空比的確定,對(duì)于12M晶振,假定PWM輸出頻率為1KHZ,這樣定時(shí)中斷次數(shù) * *設(shè)定為C=10,即0.01MS中斷一次,則TH0=FF,TL0=F6;由于設(shè)定中斷時(shí)間為0.01ms,這樣* *可以設(shè)定占空比可從1-100變化。即0.01ms*100=1ms ******************************************************************************/ #include<reg52.h> //52單片機(jī)頭文件 #include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫(kù) #define uint unsigned int //宏定義 #define uchar unsigned char //宏定義 #define V_TH0 0XFF #define V_TL0 0XF6 uchar ZKB1; sbit P1_2=P1^2; void init_sys(void); /*系統(tǒng)初始化函數(shù)*/ void main() //主函數(shù) { init_sys(); while(1) { /*對(duì)占空比值限定范圍*/ if (ZKB1>99) ZKB1=1; if (ZKB1<1) ZKB1=99; } } void timer0(void) interrupt 1 using 2 { static uchar click=0; /*中斷次數(shù)計(jì)數(shù)器變量*/ TH0=V_TH0; /*恢復(fù)定時(shí)器初始值*/ TL0=V_TL0; ++click; if (click>=100) click=0; if (click<=ZKB1) /*當(dāng)小于占空比值時(shí)輸出低電平,高于時(shí)是高電平,從而實(shí)現(xiàn)占空比的調(diào)整*/ P1_2=1; else P1_2=0; } void ser() interrupt 4 { RI=0; ZKB1=SBUF; } /*系統(tǒng)初始化函數(shù)*/ void init_sys() { ZKB1=40; TMOD=0x21;//設(shè)置定時(shí)器0工作方式1,定時(shí)器1為工作方式2 TH0=V_TH0; //定時(shí)0.01s TL0=V_TL0; TH1=0xF3; //波特率2400 TL1=0xF3; REN=1; //允許串口接收數(shù)據(jù) SM0=0;//串口工作方式1,8位數(shù)據(jù)傳送 SM1=1; EA=1;//開總中斷 ES=1; //串口中斷開 PS=1; //串口中斷優(yōu)先級(jí)最高 ET0=1;//開定時(shí)器0中斷 TR1=1; //開波特率 TR0=1;//啟動(dòng)定時(shí)器0 } |