標題: 電機調唆程序 [打印本頁]
作者: lifeng420922 時間: 2016-8-25 17:41
標題: 電機調唆程序
基于labview的PWM電機調速
一、簡介:
此設計模擬工業(yè)控制現(xiàn)場,通過調節(jié)Labview界面中的模擬儀表,通過RS232串口通信,把轉速控制信息通過串口傳送到單片機中,進而利用單片機控制電動機的轉速。
二、Labview前面板設計:
1.左部分為通訊端口、波特率、數(shù)據(jù)位、奇偶校驗位、停止位、延時等選擇端口。
2.中間為所調電壓的PWM波形,圖中藍綠色所示。
3.右部分顯示的是等效電壓的大小,圖中所示為2.35V。
4.下半部分為調節(jié)電壓的儀表和確定按鈕,當調節(jié)好電壓,按下確定鍵后方能調節(jié)電機轉速。
三、Labview程序框圖:
1. 串口通訊部分:
2.PWM電壓波形顯示部分:
四、硬件設計:
單片機IO端口的電流太小,不足以驅動直流電機;本設計通過I0端口外接ULN2003AN驅動直流電動機。
五、單片機部分程序:
/*********************************************關于頻率和占空比的確定,對于12M晶振,假定PWM輸出頻率為1KHZ,這樣定時中斷次數(shù) *
*設定為C=10,即0.01MS中斷一次,則TH0=FF,TL0=F6;由于設定中斷時間為0.01ms,這樣*
*可以設定占空比可從1-100變化。即0.01ms*100=1ms
******************************************************************************/
#include<reg52.h> //52單片機頭文件
#include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫
#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)
{
/*對占空比值限定范圍*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}
void timer0(void) interrupt 1 using 2
{
static uchar click=0; /*中斷次數(shù)計數(shù)器變量*/
TH0=V_TH0; /*恢復定時器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click=0;
if (click<=ZKB1) /*當小于占空比值時輸出低電平,高于時是高電平,從而實現(xiàn)占空比的調整*/
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;//設置定時器0工作方式1,定時器1為工作方式2
TH0=V_TH0; //定時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)先級最高
ET0=1;//開定時器0中斷
TR1=1; //開波特率
TR0=1;//啟動定時器0
}
基于labview的PWM電機調速
一、簡介:
此設計模擬工業(yè)控制現(xiàn)場,通過調節(jié)Labview界面中的模擬儀表,通過RS232串口通信,把轉速控制信息通過串口傳送到單片機中,進而利用單片機控制電動機的轉速。
二、Labview前面板設計:
1.左部分為通訊端口、波特率、數(shù)據(jù)位、奇偶校驗位、停止位、延時等選擇端口。
2.中間為所調電壓的PWM波形,圖中藍綠色所示。
3.右部分顯示的是等效電壓的大小,圖中所示為2.35V。
4.下半部分為調節(jié)電壓的儀表和確定按鈕,當調節(jié)好電壓,按下確定鍵后方能調節(jié)電機轉速。
三、Labview程序框圖:
1. 串口通訊部分:
2.PWM電壓波形顯示部分:
四、硬件設計:
單片機IO端口的電流太小,不足以驅動直流電機;本設計通過I0端口外接ULN2003AN驅動直流電動機。
五、單片機部分程序:
/*********************************************關于頻率和占空比的確定,對于12M晶振,假定PWM輸出頻率為1KHZ,這樣定時中斷次數(shù) *
*設定為C=10,即0.01MS中斷一次,則TH0=FF,TL0=F6;由于設定中斷時間為0.01ms,這樣*
*可以設定占空比可從1-100變化。即0.01ms*100=1ms
******************************************************************************/
#include<reg52.h> //52單片機頭文件
#include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫
#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)
{
/*對占空比值限定范圍*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}
void timer0(void) interrupt 1 using 2
{
static uchar click=0; /*中斷次數(shù)計數(shù)器變量*/
TH0=V_TH0; /*恢復定時器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click=0;
if (click<=ZKB1) /*當小于占空比值時輸出低電平,高于時是高電平,從而實現(xiàn)占空比的調整*/
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;//設置定時器0工作方式1,定時器1為工作方式2
TH0=V_TH0; //定時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)先級最高
ET0=1;//開定時器0中斷
TR1=1; //開波特率
TR0=1;//啟動定時器0
}
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |