步進(jìn)電機(jī)仿真程序
這是一款步進(jìn)電機(jī)仿真程序,程序是經(jīng)過(guò)仿真調(diào)試通過(guò)的,是電子制作比較好的實(shí)例現(xiàn)貼出來(lái)給大家參考試驗(yàn)。單片機(jī)使用的是的AT89C51單片機(jī)、晶振12M、電機(jī)驅(qū)動(dòng)電路是L298、電機(jī)選用的是5-12伏的真流電機(jī),程序?qū)崿F(xiàn)四種功能:正轉(zhuǎn)、反轉(zhuǎn)、加速、減速。仿真圖如下:
附上源程序:
#include "REGX51.H"
#define uchar unsigned char
#define uint unsigned int
uint time,s;
zhpai[8]={0x16,0x96,0x86,0xc6,0x46,0x66,0x26,0x36};//正轉(zhuǎn)
fzai[8]={0x36,0x26,0x66,0x46,0xc6,0x86,0x96,0x16};//正轉(zhuǎn)
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
bit qt,zf; //啟動(dòng)停止及正反轉(zhuǎn)標(biāo)志位
void t0() interrupt 1 //定時(shí)器0中斷,定時(shí)1ms//
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
time++;
}
void delay(uint dtime) //延時(shí)
{
TR0=1;
while(time<=dtime)
{
if(k2==0) //加速按鍵處理程序
{
while(k2==0);
{
if(s>80)
s=s-40;
}
}
if(k3==0)
{
while(k3==0); //減速按鍵處理程序
{
if(s<200)
s=s+40;
}
}
}
time=0;
TR0=0;
}
void moto() //電機(jī)驅(qū)動(dòng)子程序,
{
uchar i,l=0;
for(i=0;i<8;i++)
{
P2=zhpai[l];
l++;
delay(s);
if(l>8)
l=0;
}
}
void moto1() //電機(jī)驅(qū)動(dòng)子程序,
{
uchar i,l=0;
for(i=0;i<8;i++)
{
P2=fzai[l];
l++;
delay(s);
if(l>8)
l=0;
}
}
void main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
EA=1;
ET0=1;
TR0=1;
qt=0;
zf=1;
s=200;
while(1)
{
if(k1==0) //反轉(zhuǎn)按鍵處理程序
{
while(k1==0);
qt=0;
}
if(k4==0)
{
while(k4==0); //正轉(zhuǎn)按鍵處理程序
qt=1;
}
if(qt==1)
{
moto();//正轉(zhuǎn)
}
else moto1();//正轉(zhuǎn)
}
}