深圳市利记SBO伺服控制技术有限公司
电话:0755-29030191
邮箱:983847136@qq.com
地址:深圳市龙华区东环一路天汇大厦D栋306房
步进电机控制之一:查询实现正反转控制
发布时间:2020-11-20 07:34:04
步进电机控制之一:查询实现正反转控制
/*设计思路:采用按键对标志位flag1、flag2的
奇偶性判断不同的键值含义,按键要加松手检测
功能,否则会执行多次无法区别其状态;步进电
机采用四相四拍的工作方式;Proteus不支持八拍
工作模式,该程序在Keil5下运行,低版本需修改
头文件为:#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code num[]={0x01,0x02,0x04,0x08};
sbit k1=P2^0;//启停控制
sbit k2=P2^2;//正反转控制
bit flag1,flag2;
void delay_ms(uint z);
bit k1_scan();
bit k2_scan();
void motorzz();
void motorfz();
void motorstop();
void main()
{
while(1)
{
if(k1_scan()==0)
motorstop();
else if(k2_scan()==0)
motorzz();
else
motorfz();
}
}
void delay_ms(uint z)
{
uchar i;
while(z--)
for(i=0;i<120;i++);
}
bit k1_scan()
{
if(k1==0)
{
delay_ms(5);
if(k1==0)
{
flag1=~flag1;
while(!k1);
}
}
return flag1;
}
bit k2_scan()
{
if(k2==0)
{
delay_ms(5);
if(k2==0)
{
flag2=~flag2;
while(!k2);
}
}
return flag2;
}
void motorstop()
{
P0=0X00;
}
void motorzz()
{
uchar i;
for(i=0;i<4;i++)
{
P0=num[i];
delay_ms(20);
}
}
void motorfz()
{
char i;
/*注意:此处定义为有符号字符型,如果定义为
无符号字符型,i=0,i-1=255,i=255,for循
环依旧成立,而num[255]是一个未知数*/
for(i=3;i>=0;i--)
{
P0=num[i];
delay_ms(20);
}
}
/*以上motorfz()函数又等价于
void motorfz()
{
uchar i;
for(i=4;i>0;i--)
{
P0=num[i-1];
delay_ms(20);
}
}
*/
- 上一篇:步进电机控制之二:中断实现正反转控制
- 下一篇:闭环步进电机有什么优势?
产品推荐:两相步进电机
产品推荐:无刷电机
产品推荐:两相步进驱动器
产品推荐:直流无刷驱动器