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 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?