lxmstudent 2023-02-25 20:44 采纳率: 66.7%
浏览 12
已结题

tim的一个规划问题,求指导

我的stm32有四个定时器,我要做一个二轮平衡小车,问题是我左右两个轮子测速要两个tim,pid定时更新要一个tim,剩下一个用来驱动电机,但是pid要分别计算左轮和右路,但是我电机只能输出一个pwm,但是我左轮和右轮如果需要输出不同的波形该怎么搞,求解,先谢谢各位的帮助了

  • 写回答

1条回答 默认 最新

  • GPT_Pro 2023-02-25 20:51
    关注

    该回答内容部分引用GPT,GPT_Pro更好的解决问题
    你的问题很有意思,实现一个平衡小车的控制确实需要考虑很多因素。控制一个平衡小车,主要是控制左右轮子的转速,使其能够保持平衡,实现小车前后左右的运动。由于你使用的是stm32单片机,定时器只有4个,2个用于测量左右轮子的转速,1个用于PID更新,另外一个用于驱动电机。

    目前你遇到的问题是:PID需要分别计算左轮和右路的速度,但是电机只能输出一个PWM,如何实现对左右两个轮子输出不同的波形。

    这里我建议你使用差动技术,将PWM信号分别作用在电机的正向和反向端口上。如图所示:

    根据左右两个轮子的不同速度,通过PID算法来更新PWM信号的占空比,从而实现对左右两个轮子不同速度的控制。

    具体代码实现如下:

    //根据左右轮子速度,来调整正反向电机PWM占空比
    void adjustPwmDuty(float leftWheelSpeed,float rightWheelSpeed) {
    
      //根据PID算法来更新左右两个轮子电机PWM占空比
      float leftSpeedDutyCycle = PIDCalculate(leftWheelSpeed);  //左轮子PWM占空比
      float rightSpeedDutyCycle = PIDCalculate(rightWheelSpeed); //右轮子PWM占空比
    
      //根据左右两个轮子的速度不同来决定正反向电机的占空比
      if(leftWheelSpeed > rightWheelSpeed){   //如果左轮子速度大于右轮子速度
        //将左轮子PWM占空比作用在正向电机上
        Motor_postive_dutycycle(leftSpeedDutyCycle);  
    
        //将右轮子PWM占空比作用在反向电机上
        Motor_negative_dutycycle(rightSpeedDutyCycle);  
    
      }else if (leftWheelSpeed < rightWheelSpeed){  //如果左轮子速度小于右轮子速度
        //将左轮子PWM占空比作用在反向电机上
        Motor_negative_dutycycle(leftSpeedDutyCycle);  
    
        //将右轮子PWM占空比作用在正向电机上
        Motor_postive_dutycycle(rightSpeedDutyCycle);  
      }else{   //如果左右两个轮子速度相同
    
        //将左右两个轮子的PWM占空比作用在正向和反向电机上
        Motor_postive_dutycycle(leftSpeedDutyCycle);  
        Motor_negative_dutycycle(rightSpeedDutyCycle);  
      }
    
      delay_ms(50);      //延时50ms
    }
    

    以上便是使用STM32定时器以及差动信号实现一个平衡小车的方法。希望能帮助到你。
    如果回答有帮助,望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 Mac虚拟机安装Windows,Windows中用idea跑项目,报错process finished with exit code -1073741819(0xc0000005) 如何解决?
  • ¥15 关于python爬虫返回js数据结构的处理
  • ¥15 ubuntu所用stm32标准库开发烧录没反映
  • ¥15 运维工程师(在职人员回答)
  • ¥15 python 爬虫问题
  • ¥15 Kmeans的趋势分析有会的吗
  • ¥20 R语言单细胞测序 对seurat对象进行标准化时出现问题
  • ¥15 Anaconda navigator updateor一直更新
  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。