
深圳市東么川伺服控制技術有限公司
電話:13316379101
郵箱:1355229533@qq.com
地址:深圳市龍華區民治街道樟坑社區青創城A棟B502
步進電機控制之啟停正反轉與調速
發布時間:2020-11-20 06:25:55
步進電機控制之啟停正反轉與調速

/*設計說明:步進電機采用四相四拍的工作方
式;Proteus不支持八拍工作模式,該程序在
Keil5下運行,低版本需修改頭文件為:
#include
/*調試過程:按加速按鍵k1矩形波周期變短,
即輸入步進電機繞組的脈沖變快,電機加速。*/
/*設計思路:(1)采用對標志位flag1、flag2
的奇偶性判斷啟停與正反轉;(2)根據進入定
時器中斷的時間長短實現加減速調節;(3)中
斷時間長短由按鍵在中斷外對定時時間加減實現;
(4)根據進入定時器中斷的次數實現對步進電機
單四拍節拍設計。*/
#include
#define uint unsigned int
#define uchar unsigned char
sbit k1=P3^4;//加速
sbit k2=P3^5;//減速
bit flag1,flag2;
uchar code tab1[]={0X01,0X02,0X04,0X08};
uchar code tab2[]={0X08,0X04,0X02,0X01};
uint a=3000;
uchar j;
void init_t0();
void init_exint();
void delay_ms(uint z);
void key_scan();
void main()
{
init_t0();
init_exint();
while(1)
key_scan();
}
void init_t0()
{
TMOD=0X01;
TH0=(65536-a)/256;
TL0=(65536-a)%256;
EA=1;
ET0=1;
TR0=1;
}
void init_exint()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
}
void delay_ms(uint z)
{
uchar i;
while(z--)
for(i=0;i<120;i++);
}
void key_scan()
{
if(k1==0)
{
delay_ms(5);
if(k1==0)
{
if(a>=1000)
{
a=a-200;
while(!k1);
}
}
}
if(k2==0)
{
delay_ms(5);
if(k2==0)
{
if(a<=5000)
{
a=a+200;
while(!k2);
}
}
}
}
void exint0() interrupt 0
{
flag1=~flag1;
}
void exint1() interrupt 2
{
flag2=~flag2;
}
void timer() interrupt 1
{
TR0=0;
TH0=(65536-a)/256;
TL0=(65536-a)%256;
if(flag1==1)
{
if(flag2==0)
P0=tab1[j];
else
P0=tab2[j];
}
j++;
if(j==4)
j=0;
TR0=1;
}
- 上一篇:步進電機的速度扭矩曲線圖介紹
- 下一篇:步進電機控制之二:中斷實現正反轉控制
產品推薦:兩相步進電機
產品推薦:無刷電機
產品推薦:兩相步進驅動器
產品推薦:直流無刷驅動器