STM32野火开源平衡小车(五)之外设搭建之PID与MPU6050初始化

野火开源平衡车官网板块

https://www.firebbs.cn/forum.php?mod=forumdisplay&fid=129&page=1

参考资料

暂无

参考视频(这个群主讲的不错)

https://www.bilibili.com/video/BV1j7411z7uX

硬件平台

开发平台

KEIL5, STM32F103X主控,程序用的SWD下载(啥下载器都行,能下载进去就好,用串口下载也是可以的)

开发(一) 

P 比例: 提高响应速度,减小静态误差(因为EP值比EI,ED都要大,值大贡献的值就大,太大直接跑扑街,太小会一直达不到设定点)

(静态误差指 理想值 与真实值 之差, 比例过大,会导致系统振荡,但你想达到目标值,必须围绕这目标值振荡,然后通过其他I,D来逐渐减小振荡幅度, 但你太大他直接振没了(不受ID控制了))

 

I 积分: 消除稳态误差 (积分是累加, 求面积, 主要是积累误差)

有一丁点误差,都会因为累加,变得很大, 直到你的误差消除为0

 

D 微分:减小振荡,以及超调(微分就是求导, 导数就是变化率)

微分越大,阻力就越大, 就越削弱之前的EP比例(也可能含有EI积分值)的幅度值

 

有网友总结到

比例是考虑当前,积分是回顾历史(累计误差),微分是预测未来

 

 

直立环 让小车角度趋近0,小车正立住(PD:比例微分控制)

直立环: 输入(1.给定的角度.2角度的反馈), 输出(PWM直接控制车车)

 

速度环, 让电机速度趋近0,电机不转(PI:比例积分控制)

速度环: 输入(1.给定的速度. 2速度的反馈) ,  输出(角度值,直立环的期望速度输入)

 

先搞MPU6050

用到了PB8和9

 

\

MPU6050这边设置中断的频率为50HZ,(10ms中断一次 更新电机PWM)

 

处理下 MPU6050  10ms来一次的中断(我们用的是PD2)

直立环PD控制

速度环 PI控制

转向环 在直立的时候 约束车车的转向

继续编写10ms的MPU6050中断内容

 

下面改以下OLED引脚  PB10和PB11

 

编写主函数

 

 

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,MPU6050是一种常用的六轴传感器,可用于测量物体的加速度和角速度。当使用STM32进行MPU6050初始化时,代码卡死可能有以下几个原因。 第一,硬件连接问题。首先要确保MPU6050正确连接到STM32开发板。检查SDA和SCL线是否正确连接到适当的I2C引脚上,并且没有法线或短路问题。还要确保在MPU6050上的电源引脚上提供正确的电压。 第二,I2C通信问题。MPU6050使用I2C通信协议与STM32进行通信。在初始化过程中,必须正确配置I2C时钟频率和I2C通信地址。确认在初始化代码中设置了正确的时钟频率和地址,并且I2C总线没有冲突或者其他设备没有占用I2C总线。 第三,软件错误。初始化代码可能存在错误,例如寄存器配置错误或未正确设置I2C时序等。检查与MPU6050相关的寄存器配置是否正确,并确保正确设置了I2C时序和时钟频率。 第四,系统时钟问题。检查系统时钟配置是否正确。如果时钟频率设置错误,可能导致I2C通信失败。 最后,当代码卡死时,可以使用调试工具,如JTAG或ST-LINK等,进行调试。通过设置断点、查看寄存器状态和执行单步调试等方式,可以帮助定位代码卡死的具体原因。 总之,STM32代码卡死在MPU6050初始化可能是由于硬件连接问题、I2C通信问题、软件错误或系统时钟问题等原因引起的。通过检查这些可能的原因,并进行逐步的排查和调试,可以找到并解决问题。 ### 回答2: STM32代码卡死在MPU6050初始化的原因可能有几种,以下是可能导致该问题的几个常见原因和解决方法: 1. 电路问题:首先要确保硬件连接正确,包括MPU6050与STM32之间的连接线路是否正确,是否有短路或接触不良等问题。可以使用示波器或逻辑分析仪来检查信号线的电平和波形是否正常。 2. 时钟配置问题:在初始化代码中,需要正确配置STM32的时钟以及I2C总线的时钟。确保时钟的设置正确,可以参考官方提供的示例代码或参考MPU6050和STM32的数据手册。 3. I2C通信问题:MPU6050使用I2C进行通信,因此需要正确配置STM32的I2C外设。要检查I2C引脚的连接是否正确,并确保I2C外设初始化设置正确。 4. 软件编程问题:MPU6050的初始化是通过向其寄存器写入特定的配置值来完成的。在初始化过程中,需要确保正确设置MPU6050的寄存器地址和配置值,以及正确使用I2C发送数据。可以逐步调试初始化代码,确保每一步操作的准确性,并使用调试器查看寄存器值和发送的数据是否正确。 5. 软件死循环或卡死:如果代码卡死在MPU6050初始化的过程中,有可能是因为初始化过程中的某个步骤出现了错误,导致程序陷入死循环或卡死。需要仔细检查初始化代码中是否存在逻辑错误或死循环的情况,并对可能引起问题的地方进行调试。 总的来说,解决该问题的关键是仔细检查硬件连接、时钟配置、I2C通信、软件编程等方面的问题,并逐步调试代码,确定具体出错的地方,进而进行修复。 ### 回答3: 在STM32代码卡死在MPU6050初始化时,可能有以下几个原因: 1. I2C通信问题:MPU6050与STM32通过I2C进行通信,可能是I2C线路接错或者电气连接有问题。可以检查I2C引脚的电气连接是否正确,并使用逻辑分析仪检查I2C通信信号是否正常。 2. MPU6050硬件问题:MPU6050本身可能存在硬件问题,例如损坏、芯片版本不兼容等。可以尝试更换另一颗MPU6050来测试是否是硬件问题。 3. 初始化配置错误:在初始化MPU6050时,可能出现配置错误导致卡死。需要确保正确配置相关的寄存器,比如设置合适的时钟源、陀螺仪和加速度计的量程等。 4. 系统时钟问题:在初始化MPU6050之前,需要先配置好系统时钟。如果时钟配置有误,可能会导致初始化过程中的延时等待出错,进而导致卡死。可以检查时钟配置是否正确,并使用调试工具观察时钟信号是否正常。 5. 代码逻辑错误:在MPU6050初始化的代码逻辑中,可能存在错误导致卡死。可以检查代码是否正确处理了错误情况,例如检查返回值是否正确处理、超时机制是否设置等。 针对以上可能原因,可以逐个排查,使用调试工具进行调试,观察相关信号和寄存器值的变化,以定位问题所在,并对应进行修正。同时,参考MPU6050和STM32的相关文档资料,了解其使用方法和正确配置,以确保顺利初始化MPU6050。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值