mpu6050是嵌入式设计中一个比较常用的芯片,虽然有比它更好的芯片,但耐不住这块芯片便宜,所以使用也是非常广。它的主要功能是可以提供以它为中心的欧拉角的值和一些陀螺仪,加速度传感器的数据。
笔者根据正点原子stm32的dmp库,花了一个下午的时间将dmp库移植到了tm4上,并使用了tm4自带的软件iic功能,具体库下载地址为:
https://download.csdn.net/download/qq_43725844/12406989
一、接线
具体的接线为:
SCL——————PB2
SDA——————PB3
VCC——————3.3V
GND——————GND
其他io口空着
注意所有的模块接单片机时都必须共地(即单片机的GND与模块的GND相连)
二、关于移植代码
有关DMP库的内容实在太多,但作为单纯的移植来说并不需要搞懂,只需要修改一些东西达到和源代码相同的格式就行。笔者这里主要修改的就是IIC发送和接收数据的代码,只改一些比较底层的代码,让其他的代码都能不报错就行。
三、关于硬件连接和一些小问题
接线如上,但问题有不少;
一、尽量不要使用杜邦线,使用杜邦线的话建议粘的牢一些,mpu6050的电压差非常敏感,有时候只是碰了下电源线,mpu6050的电源灯就会闪烁,这个闪烁很危险!!!!这一闪就代表着6050进行了重新上电,而iic协议的6050必须要有一个上电后初始化的动作,但单片机此时已工作在while循环中,初始化是不可能了,这样也就导致了单片机卡死的现象。解决方法的话还是要从连接线上下手,笔者建议大家能画板子的画一块板子,这样起码供电没有问题。
二、mpu6050一般要有一个一秒钟左右的上电时间,所以单片机最开始应该有一个延迟一秒的等待时间,不然mpu6050可能完不成初始化。
三、有时在运行dmp库中会发现单片机会一直卡在自检中,这样大概率上是因为mpu6050没有放平。
四、在读数据时发现z轴数据即使6050自身没动也会慢慢增加,这种现象称为零漂,都是便宜惹的祸,要解决的话还是要使用更贵的芯片或者使用地磁模块来解决。贵的芯片自有贵的道理。。。
三、关于使用
一、在mpu6050初始化时一定要放平,其在初始化时会以当前的状态为0值进而有后续变化;
二、有关读6050的值建议在定时器中断中来读,不要使用延时函数来读(笔者用500ms延时函数来读就出现了读不了值的问题)
三、mpu6050最常用的还是它的z轴的值,一般用在小车的原地旋转上;或者是用于平衡车上x或y轴的值;另外在使用6050时一定要将6050固定好!!!