打印

步进电机的控制代码

[复制链接]
116|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1988020566|  楼主 | 2023-12-23 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
void TurnMotor(unsigned long angle);
void main(){
    TurnMotor(360*25);  //360度*25,即25圈
    while (1);
}
/* 软件延时函数,延时约 2 ms */
void delay(){
    unsigned int i = 200;
    while (i--);
}
/* 步进电机转动函数,angle-需转过的角度 */
void TurnMotor(unsigned long angle){
    unsigned char tmp;  //临时变量
    unsigned char index = 0;  //节拍输出索引
    unsigned long beats = 0;  //所需节拍总数
    //步进电机节拍对应的 IO 控制代码
    unsigned char code BeatCode[8] = {
        0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
    };
    //计算需要的节拍总数,4096拍对应一圈
    beats = (angle*4096) / 360;
    //判断 beats 不为0时执行循环,然后自减1
    while (beats--){
        tmp = P1;  //用 tmp 把 P1 口当前值暂存
        tmp = tmp & 0xF0;  //用&操作清零低4位
        tmp = tmp | BeatCode[index]; //用|操作把节拍代码写到低4位
        P1 = tmp;  //把低4位的节拍代码和高4位的原值送回 P1
        index++;  //节拍输出索引递增
        index = index & 0x07;  //用&操作实现到8归零
        delay();  //延时 2 ms,即 2 ms 执行一拍
    }
    P1 = P1 | 0x0F; //关闭电机所有的相
}


使用特权

评论回复
沙发
tpgf| | 2024-1-5 14:44 | 只看该作者
步进电机的控制方式都有哪些呢

使用特权

评论回复
板凳
coshi| | 2024-1-5 15:18 | 只看该作者
使用循环等待会不会太浪费资源了

使用特权

评论回复
地板
kxsi| | 2024-1-5 16:06 | 只看该作者
这个如何进行速度的调节呢

使用特权

评论回复
5
wiba| | 2024-1-5 16:41 | 只看该作者
这个需要进行转速的反馈信号采集吗

使用特权

评论回复
6
drer| | 2024-1-5 20:25 | 只看该作者
代码里边数组的数据是用来干嘛的呢

使用特权

评论回复
7
drer| | 2024-1-5 20:25 | 只看该作者
可以将定时器和io口配合起来进行控制

使用特权

评论回复
8
qcliu| | 2024-1-5 20:58 | 只看该作者
这个应该是通过pwm进行控制的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

380

主题

10388

帖子

6

粉丝