电话:0755-29030191
邮箱:983847136@qq.com
地址:深圳市龙华区东环一路天汇大厦D栋306房
步进电机控制之启停正反转与调速
发布时间: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;
}
- 上一篇:步进电机的速度扭矩曲线图介绍
- 下一篇:步进电机控制之二:中断实现正反转控制
产品推荐:两相步进电机
产品推荐:无刷电机
产品推荐:两相步进驱动器
产品推荐:直流无刷驱动器