大家好,本人小白一个,利用课余时间学习stm32,最近在做平衡车,发现资料都很理论化,于是自己写学习动手笔记,同时希望对同学们有帮助。
话不多说,先上硬货。
上一节的答案是,数据代表车轮的速度。但是,通过读取值却可能因情况而异。我们先拿出一部分代码研读。
通过这个函数,可以实现选择对C8T6定时器进行读取。但是很明显,就是它只能读取调用的那一个时刻,所对应的编码器的值。一句话说,当调用这个函数时,才能读取值。在调用这个函数之前,比如有所有程序相同,但是在这个语句之前分别加10个printf("abc");和5个printf("abc");所读取出的值是根本不同的。
好了,花了2天时间才想明白这个问题(别怪小编头脑愚钝)。
下一个步骤,读取MPU6050的数值。(题外话:我是打算使用DMP,如果要读取原始数据,网上例程有很多,我就不写了),注意读取的时间为5MS一次,而且是是由MPU6050来控制这个时间的。具体见下图。
同时要注意AD0引脚的作用,上电时的IIC地址为0X69,接地时的地址为0新8,这个倒是没有太大影响,为了简单,小编就给AD0接地。悬空感觉不太严谨,可能会给通信方式带来不必要的困扰。
小编常见的最多的就是IIC通信MPU6050,所以采用这款模块,使用模拟IIC通信。
不过小编在这里了遇到大问题:复位MPU6050失败,经过多方论证,还是没有找出结果,最终我借鉴别人写好的代码,实现读取MPU6050数据。
小总结:可以尝试将这个模块单独提出进行测试,接线太多,程序太复杂,会给你的排错造成巨大困扰。在条件允许的情况下,换模块,换板子进行测试。(手头一共就4块板子,烧了3块,所以是没办法操作喽)。如果赶时间,或者实在没头绪,那就只能借鉴已经别人写好的程序,然后移植代码。在这4天中,小编分理解了编码器读取、MPU6050数据采集,总的来说,感觉这个项目不简单,真不简单。
原定计划是要做一个功能完善的小车,不过由于突发情况,可能只做一辆“平衡的小车”,其他的功能并不是很难。
下一章节,就要开始最终的调试以及一步一步的数据检测,小编会记录一切可能有价值的情况,希望对大家有用。
遇到小编表述不清楚的地方,可以在下方留言,共同学习,共同进步。
我曾许下十年,只为最美的遇见。我是西伯利亚小强,咱们有缘再见。