|
基于51單片機(jī)的PWM直流電機(jī)調(diào)速控制程序與仿真,是通過電位器控制直流電機(jī),并將電機(jī)運(yùn)行狀態(tài)顯示在LCD上。
PWM直流電機(jī)調(diào)速控制.rar
(86.12 KB, 下載次數(shù): 73)
2019-5-4 06:19 上傳
點(diǎn)擊文件名下載附件
基于51單片機(jī)的PWM直流電機(jī)調(diào)速控制程序與仿真 下載積分: 黑幣 -5
PWM調(diào)速.jpg (159.28 KB, 下載次數(shù): 75)
下載附件
2019-5-4 06:20 上傳
//*************************************************************************************************
//*************************************************************************************************
**
//**<功能>:通過電位器控制直流電機(jī),并將電機(jī)運(yùn)行狀態(tài)顯示在LCD上。 **
//**可以通過電位器控制電機(jī)轉(zhuǎn)向和速度,修改了PWM計(jì)算方法。 **
//*************************************************************************************************
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************頭文件及宏定義************************** *
//* *
//*************************************************************************************************
#include "includes.h"
#define TIME1H 0xFF
#define TIME1L 0x9C //定時(shí)器1溢出時(shí)間:0.1ms
#define MOTORPORT P1 //電機(jī)接口。
#define MO_COMMON 0x08 //點(diǎn)擊運(yùn)行狀態(tài)。
#define MO_OPPOSE 0x06
#define MO_CUTOFF 0x00
#define MO_STOP 0x0A
//*************************************************************************************************
//* *
//* *******************************全局變量***************************** *
//* *
//*************************************************************************************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PWM調(diào)制計(jì)數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_MoCount=0; //PWM調(diào)制計(jì)數(shù)。
unsigned char uc_PWM; //存儲(chǔ)PWM。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DA轉(zhuǎn)換>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_DAResult; //存儲(chǔ)DA轉(zhuǎn)換結(jié)果。
//*************************************************************************************************
//* *
//* ********************************主函數(shù)****************************** *
//* *
//*************************************************************************************************
void main()
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化定時(shí)器1,用于PWM調(diào)制計(jì)數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TMOD=0x10;
TH1=TIME1H;
TL1=TIME1L;
TR1=1;
ET1=1;
EA=1; //開總中斷。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化LCD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vdInitialize();
vWriteCMD(0xC4);
vShowChar("PWM:");
vWriteCMD(0x81);
vShowChar("Status:");
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化電機(jī)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MOTORPORT=MO_COMMON;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<主循環(huán)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
while(1)
{
uc_DAResult=ucADTransform(); //將DA轉(zhuǎn)換結(jié)果賦給uc_MoChange,改變轉(zhuǎn)速。
vWriteCMD(0xC9);
vShowNumber(uc_PWM);
vWriteCMD(0x89); //在LCD上顯示電機(jī)運(yùn)行狀態(tài)。
if(uc_DAResult==128||uc_DAResult==127)
vShowChar("Stop ");
else
{
if(uc_DAResult>128)
vShowChar("Common");
else
vShowChar("Oppose");
}
}
}
//*************************************************************************************************
//* *
//* ****************************定時(shí)器1中斷,用于PWM調(diào)制計(jì)數(shù)**************************** *
//* *
//*************************************************************************************************
void vTimer0() interrupt 3 //根據(jù)DA轉(zhuǎn)換結(jié)果計(jì)算PWM,PWM值在1~127之間。
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<當(dāng)DA轉(zhuǎn)換結(jié)果等于127或者128時(shí),電機(jī)停止>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(uc_DAResult==128||uc_DAResult==127)
{
uc_PWM=0;
MOTORPORT=MO_CUTOFF;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<當(dāng)DA轉(zhuǎn)換結(jié)果大于128時(shí),電機(jī)正常運(yùn)行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
else
{
if(uc_DAResult>128)
{
uc_PWM=uc_DAResult-128;
if(uc_MoCount<=uc_PWM)
MOTORPORT=MO_COMMON;
else
MOTORPORT=MO_CUTOFF;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<當(dāng)DA轉(zhuǎn)換結(jié)果小于127時(shí),電機(jī)反向運(yùn)行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
else
{
uc_PWM=127-uc_DAResult;
if(uc_MoCount<=uc_PWM)
MOTORPORT=MO_OPPOSE;
else
MOTORPORT=MO_CUTOFF;
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<循環(huán)計(jì)數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(uc_MoCount<(uc_PWM+2)) //循環(huán)計(jì)數(shù)總是比PWM大1。
uc_MoCount++;
else
uc_MoCount=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復(fù)定時(shí)器1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH0=TIME1H;
TL0=TIME1L;
}
|
評(píng)分
-
查看全部評(píng)分
|