步进电机的控制代码

[复制链接]
 楼主| 1988020566 发表于 2023-12-23 12:30 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. void TurnMotor(unsigned long angle);
  3. void main(){
  4.     TurnMotor(360*25);  //360度*25,即25圈
  5.     while (1);
  6. }
  7. /* 软件延时函数,延时约 2 ms */
  8. void delay(){
  9.     unsigned int i = 200;
  10.     while (i--);
  11. }
  12. /* 步进电机转动函数,angle-需转过的角度 */
  13. void TurnMotor(unsigned long angle){
  14.     unsigned char tmp;  //临时变量
  15.     unsigned char index = 0;  //节拍输出索引
  16.     unsigned long beats = 0;  //所需节拍总数
  17.     //步进电机节拍对应的 IO 控制代码
  18.     unsigned char code BeatCode[8] = {
  19.         0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
  20.     };
  21.     //计算需要的节拍总数,4096拍对应一圈
  22.     beats = (angle*4096) / 360;
  23.     //判断 beats 不为0时执行循环,然后自减1
  24.     while (beats--){
  25.         tmp = P1;  //用 tmp 把 P1 口当前值暂存
  26.         tmp = tmp & 0xF0;  //用&操作清零低4位
  27.         tmp = tmp | BeatCode[index]; //用|操作把节拍代码写到低4位
  28.         P1 = tmp;  //把低4位的节拍代码和高4位的原值送回 P1
  29.         index++;  //节拍输出索引递增
  30.         index = index & 0x07;  //用&操作实现到8归零
  31.         delay();  //延时 2 ms,即 2 ms 执行一拍
  32.     }
  33.     P1 = P1 | 0x0F; //关闭电机所有的相
  34. }


tpgf 发表于 2024-1-5 14:44 | 显示全部楼层
步进电机的控制方式都有哪些呢
coshi 发表于 2024-1-5 15:18 | 显示全部楼层
使用循环等待会不会太浪费资源了
kxsi 发表于 2024-1-5 16:06 | 显示全部楼层
这个如何进行速度的调节呢
wiba 发表于 2024-1-5 16:41 | 显示全部楼层
这个需要进行转速的反馈信号采集吗
drer 发表于 2024-1-5 20:25 | 显示全部楼层
可以将定时器和io口配合起来进行控制
drer 发表于 2024-1-5 20:25 | 显示全部楼层
代码里边数组的数据是用来干嘛的呢
qcliu 发表于 2024-1-5 20:58 | 显示全部楼层
这个应该是通过pwm进行控制的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

418

主题

10979

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部