标题:
单片机按键控制步进电机的源程序
[打印本页]
作者:
月翟
时间:
2018-5-22 20:57
标题:
单片机按键控制步进电机的源程序
自己做的小项目代码
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表
uchar code CW[8]= {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表
sbit K1=P3^5; //反转按键
sbit K2=P3^3; //正转按键
sbit K3=P3^1; //反转按键
sbit K4=P3^0; //正转按键
sbit K5=P3^2; //正转按键
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++); //1ms基准延时程序
}
}
void motor_ccw(void)
{ uchar i,j;
for(j=0;j<8;j++) //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
{
for(i=0;i<8;i++) //旋转45度
{ P1=CCW[i];
delaynms(10); //调节转速
}
}
}
void motor_ccw0(void)
{ uchar i,j;
for(j=0;j<8;j++) //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
{
for(i=0;i<8;i++) //旋转45度
{ P0=CCW[i];
delaynms(10); //调节转速
}
}
}
void motor_cw(void)
{ uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++) //旋转45度
{ P1=CW[i];
delaynms(10); //调节转速
}
}
}
void motor_cw0(void)
{ uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++) //旋转45度
{ P0=CW[i];
delaynms(10); //调节转速
}
}
}
void main(void)
{ uchar r;
uchar N=1; //因为步进电机是减速步进电机,减速比的1/64 ,
//所以N=64时,步进电机主轴转一圈
while(1)
{
if(K1==0)
{for(r=0;r<N;r++)
motor_ccw(); //电机逆转
}
else if(K3==0)
{for(r=0;r<N;r++)
motor_ccw0(); //电机逆转
}
else if(K2==0)
{for(r=0;r<N;r++)
motor_cw(); //电机反转
}
else if(K4==0)
{for(r=0;r<N;r++)
motor_cw0(); //电机反转
}
else if(K5==0)
{for(r=0;r<N;r++)
motor_cw0(); //电机反转
}
else P1=0xf0; //电机停止
}
}
复制代码
所有资料51hei提供下载:
步进电机.zip
(30.87 KB, 下载次数: 103)
2018-5-22 20:57 上传
点击文件名下载附件
代码
下载积分: 黑币 -5
作者:
毕竟摩羯座
时间:
2018-10-14 09:58
楼主,这个是基于51的还是stm32的程序??
作者:
462283895
时间:
2018-12-10 12:21
没有主程序,要下载的才是全的吗?这个转法,每45度一个绕组供电,不知道改为每次多个绕组供电,力会不会更大一点跜
作者:
梦园心田
时间:
2019-1-17 01:11
看一下。明天我要用
作者:
king8
时间:
2019-1-19 16:50
程序思路不错,但没有细分控制,运行起来容易失步,平稳性不会太好,噪音也会比较大,如果能加以改进会更好些。建议加入细分和起步的梯形或S型控制就完美了。
作者:
Cheers05
时间:
2019-9-5 20:58
谢谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1