电机控制方案
登录
直播中
杨秀英
7年用户
1357经验值
私信
关注
[问答]
stc8a8k64s4单片机是如何控制步进电机实现顺时针逆时针转动的?
开启该帖子的消息推送
单片机
步进电机
脉冲信号
stc8a8k64s4
单片机
是如何控制步进电机实现顺时针逆时针转动的?
回帖
(1)
李辉
2021-6-29 15:09:23
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
红线接电源5V,橙色电线接P1.6口,黄色电线接P1.5口,粉色电线接P4.4口,蓝色接P1.4口。
橙 黄 粉 蓝 十六制(数据)
1 0 0 0 0x08
1 1 0 0 0x0c
0 1 0 0 0x04
0 1 1 0 0x06
0 0 1 0 0x02
0 0 1 1 0x03
0 0 0 1 0x01
1 0 0 1 0x09
所以可以定义旋转相序uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表
#include 《stc8.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}; // 独立按键定义***it K1=P0^0; // 反转按键***it K2=P0^1; // 正转按键***it K3=P0^2; // 停止按键// 四相的引脚定义***it A1 = P1^6;***it B1 = P1^5;***it C1 = P4^4;***it D1 = P1^4;// 毫秒级延时 (根据自己的单片机修改)void delaynms(uint aa){ uchar i, j; while(aa--) { i = 12; j = 169; do { while (--j); } while (--i); }}// 给每个相赋值void Give(unsigned char dat){ A1 = dat & 0x08; B1 = dat & 0x04; C1 = dat & 0x02; D1 = dat & 0x01;}// 步进电机逆时针转赋值void motor_ccw(void){ uchar i,j; // 电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周 for(j=0;j《8;j++) { if(K3==0) { break; // 如果K3按下,退出此循环 } for(i=0;i《8;i++) // 旋转45度 { Give(CCW); delaynms(2); // 调节转速 } }}// 步进电机顺时针转赋值void motor_cw(void){ uchar i,j; for(j=0;j《8;j++) { if(K3==0) { break; // 如果K3按下,退出此循环 } for(i=0;i《8;i++) // 旋转45度 { Give(CW); delaynms(2); // 调节转速 } }}void main(void){ uchar r; uchar N=64; //因为步进电机是减速步进电机,减速比的1/64 , //所以N=64时,步进电机主轴转一圈 P07 = 0; // 开独立按键总开关 while(1) { if(K1==0) { for(r=0;r《N;r++) { motor_ccw(); // 电机逆时针转 if(K3==0) { break; } } } else if(K2==0) { for(r=0;r《N;r++) { motor_cw(); // 电机顺时针转 if(K3==0) { break; } } } else Give(0x00); // 电机停止 }}
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
红线接电源5V,橙色电线接P1.6口,黄色电线接P1.5口,粉色电线接P4.4口,蓝色接P1.4口。
橙 黄 粉 蓝 十六制(数据)
1 0 0 0 0x08
1 1 0 0 0x0c
0 1 0 0 0x04
0 1 1 0 0x06
0 0 1 0 0x02
0 0 1 1 0x03
0 0 0 1 0x01
1 0 0 1 0x09
所以可以定义旋转相序uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表
#include 《stc8.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}; // 独立按键定义***it K1=P0^0; // 反转按键***it K2=P0^1; // 正转按键***it K3=P0^2; // 停止按键// 四相的引脚定义***it A1 = P1^6;***it B1 = P1^5;***it C1 = P4^4;***it D1 = P1^4;// 毫秒级延时 (根据自己的单片机修改)void delaynms(uint aa){ uchar i, j; while(aa--) { i = 12; j = 169; do { while (--j); } while (--i); }}// 给每个相赋值void Give(unsigned char dat){ A1 = dat & 0x08; B1 = dat & 0x04; C1 = dat & 0x02; D1 = dat & 0x01;}// 步进电机逆时针转赋值void motor_ccw(void){ uchar i,j; // 电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周 for(j=0;j《8;j++) { if(K3==0) { break; // 如果K3按下,退出此循环 } for(i=0;i《8;i++) // 旋转45度 { Give(CCW); delaynms(2); // 调节转速 } }}// 步进电机顺时针转赋值void motor_cw(void){ uchar i,j; for(j=0;j《8;j++) { if(K3==0) { break; // 如果K3按下,退出此循环 } for(i=0;i《8;i++) // 旋转45度 { Give(CW); delaynms(2); // 调节转速 } }}void main(void){ uchar r; uchar N=64; //因为步进电机是减速步进电机,减速比的1/64 , //所以N=64时,步进电机主轴转一圈 P07 = 0; // 开独立按键总开关 while(1) { if(K1==0) { for(r=0;r《N;r++) { motor_ccw(); // 电机逆时针转 if(K3==0) { break; } } } else if(K2==0) { for(r=0;r《N;r++) { motor_cw(); // 电机顺时针转 if(K3==0) { break; } } } else Give(0x00); // 电机停止 }}
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
步进电机
脉冲信号
请问
stc8a8k64s4
单片机
控制
步进
电机
实现
顺时针
转一圈和
逆时针
转一圈?
2021-10-15
774
怎样通过按钮去
控制
电机
的
顺时针
或
逆时针
旋转啊?
2021-06-29
1447
如何通过按钮
控制
电机
顺时针
或
逆时针
旋转?
2021-10-14
2802
为什么
步进
电机
一直
逆时针
转动
?
2019-10-09
3108
Stm32编码器接口怎么以
顺时针
和
逆时针
方向
转动
电机
2019-01-25
2711
求助! AT89
S
51
单片机
控制
步进
电机
编程
2014-03-24
3185
为什么无刷
电机
闭环
控制
逆时针
转会磕磕巴巴?
2021-07-21
1149
H桥如何工作?
2015-04-15
3144
使如何用FOC_BASIC库进行BLDC
电机
方向的转变?
2024-01-22
159
转角编码器采集角度,3路信号720p/r,1p/r,
顺时针
5v,
逆时针
0v
2019-03-01
2000
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分