weixin_70996210 2023-03-24 12:15 采纳率: 75%
浏览 28
已结题

无法实现电机转动两周的功能

电机没有转动
C语言 单片机
电机转动两周停止
#include<reg52.h>
unsigned long beats=0;
void TurnMotor(unsigned long angle);    //函数声明
void main()
{
    EA=1;                                //使能总中断
    TMOD=0x01;                            //设置T0模式
    TH0=0xF8;                            //高低位初值(2ms)
    TL0=0xCD;                            
    TR0=1;                                //计数器to启动
    ET0=1;                                //T0中断开关
    TurnMotor(360*2);                    //转动2圈,传入角度
    while(1);
}

void TurnMotor(unsigned long angle)                //计算所需要的拍数
{
    
    EA=0;
    beats=(angle*4076)/360;                    //计算所需要的拍数
    EA=1;
}
/*中断服务函数*/
void interrupttimer0() interrupt 1
{
    unsigned char tmp;
    static unsigned char index=0;
    unsigned char code BeatCode[8]={        //步进电机节拍对应的io控制代码
    0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6
    };
    TH0=0xF8;                                //重新赋初值
    TL0=0xCD;
    while(beats--)                            //拍数结束循环结束
    {
        tmp=P1;
        tmp=tmp&0xF0;
        tmp=tmp | BeatCode[index];           //节拍低四位赋值
        P1=tmp;
        index++;
        index=index&0x07;                    //到8置0
        
    }
    P1=P1|0x0F;                                   //电机停止工作
    
}

  • 写回答

2条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-24 13:14
    关注

    在代码中,我发现 while(beats--) 循环中对 beats 的判断是通过减一的方式实现的,这个方式在理论上是可以实现电机转动两圈的功能的。但是,由于这个循环执行的次数非常大,如果电机转动的速度过快,就有可能出现循环次数过多,导致电机无法正常转动的情况。

    可以尝试在循环中添加延时等待电机转动完成,以确保电机能够转动到指定角度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀