STM32F1 平衡小车 建造章节 (四)

大家好,本人小白一个,利用课余时间自学STM32,最近想做一辆平衡小车,小编会记录下所有有用的信息,方便自己以后查阅,同时希望对大家有所帮助。

   刚刚在网上找了几篇相关的博客,发现调参可能根本不简单(找个代码抄过来,可能你会永远也调不出来)

第一个疑惑:配置的MPU6050中断只触发了一次。(正确情况应当是每返回一个数据之前,就会出发一次中断)

图片显示,每一次mpu6050触发成功,只返回 了一个YES.如果按照正常的情况,应该是每5MS就触发一次外部中断。显示很残酷,就是MPU6050出错了。怎么个错法,有点心累,有空再继续深究吧。

休息了一上午,改继续解决问题了。这串英文的字母意思是:产品ID读取为0表示设备不兼容或MPU3050。

试试正点原子的代码,能够完全正确的读取数据。

怎么办呢?网上没有相关有用的解决办法(用了很多MPU6050模块来试,都是这个结果)

这里给出一个我参考过的链接,如有侵权,及时与小编联系:https://blog.csdn.net/qq_42208483/article/details/82928794

小编准备采用正点原子的例程修改。花了一天时间修改,结果还是遇到了同样的问题。

具体问题1:出在res=MPU_Read_Byte(MPU_DEVICE_ID_REG);这一句,读出的数据始终为0,如果读取成功,MPU6050的ID号码应该是0X68或者0X69(看AD0引脚接地还是3.3V)。我从模块、引脚重复定义、IIC通信方式3个方面检查,结果,没有找出错误。

遇见问题2..\OBJ\MPU6050.axf: Error: L6406E: No space in execution regions with .ANY selector matching _printf_intcommon.o(.text).//芯片空间不足,建议使用更大容量芯片。改一下芯片大小即可解决。

由于时间问题,只能从实验室大佬那里搞了一份初始化代码过来,终于实现了正确的数据读取(等做完小车,小编会抽时间搞明白这个问题出现的原因,以及修改方法)

现在开始调试小车了。

调试步骤一、首先读取两个轮子编码器返回的值(前面章节中读取是为了看编码器模式是否配置成功,此处是为了调平衡做基础)

A电机编码器返回值为160左右,B电机返回-140左右;(因为设置了电机PWM,所以不是全速转动)

两个轮子同PWM值,转速不同,原因可能是硬件平台太简陋导致的摩擦力不同。

这是为什么呢?由于AB相的先后不同所导致的。通俗一点,比如你将A、B相接到PB1、2(举例而已),编码器返回的数值为负数,换一下,A、B相接PB2、1.那么对应的数据即是正数。

调试步骤二、测量机械中值(就是将小车在平面上直立放置,测量平衡状态下相关参数的值)

也就是测量(小车静止时)平衡的角度,也就是Pitch的值。具体做法可以百度一下,有大篇幅的文章在描写。

KP的正负代表车轮转动的极性(顺着车倒下的方向转动,还是阻止车倒下的方向转动)

我曾许下十年,只为最美的遇见。我是西伯利亚小强,咱们有缘再见。

猜你喜欢

转载自blog.csdn.net/qq_41821562/article/details/88761437