本帖最后由 qixiyi 于 2013-11-9 13:14 编辑
MPU6050应用(IIC通讯)
MPU-6050是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其I2C或SPI接口输出一个9轴的信号。 MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±5001000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。 下图标明了传感器的参考坐标系(XYZ组成右手系)以及3个测量轴和旋转方向,旋转的正向可用右手螺旋定则判断。 file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg
MPU6050
硬件设计 接线方式:SCL P4.0 SDA P4.1 MPU6050模块:仅使用SCL、SDA、GND和5V引脚。 PSOC4 kit使用3.3V供电。
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image004.jpg 软件设计 在void InitMPU6050()函数中,一个I2C写操作周期为: I2C_M_Start(); status=I2C_M_I2CMasterClearStatus(); //清除之前状态 status=I2C_M_I2CMasterSendStart(SlaveAddress,I2C_M_I2C_WRITE_XFER_MODE); //校验地址+写入模式 while(status!=I2C_M_I2C_MSTR_NO_ERROR); I2C_M_I2CMasterWriteByte(PWR_MGMT_1); //电源管理,解除休眠状态 I2C_M_I2CMasterWriteByte(0x00); I2C_M_I2CMasterSendStop(); (1)I2C_M_Start()函数会调用I2C_M_Init()函数,然后调用I2C_M_Enable()函数。 (2)I2C_M_I2CMasterSendStart(SlaveAddress,I2C_M_I2C_WRITE_XFER_MODE); 用于产生I2C开始条件,SlaveAddress是mpu6050从地址0x68,这里需要特别注意, 这个参数是右对齐7位从器件地址(有效范围介于0~127之间)。 (3)I2C_M_I2CMasterWriteByte(PWR_MGMT_1);用于发送子地址。 (4)I2C_M_I2CMasterSendStop();发送停止命令。
在int8 getResult(uint8 reg_addr)函数中,一个I2C读操作周期为: I2C_M_Start(); I2C_M_I2CMasterClearStatus(); I2C_M_I2CMasterSendStart(SlaveAddress,I2C_M_I2C_WRITE_XFER_MODE); I2C_M_I2CMasterWriteByte(reg_addr); I2C_M_Start(); I2C_M_I2CMasterSendRestart(SlaveAddress,I2C_M_I2C_READ_XFER_MODE); result=I2C_M_I2CMasterReadByte(I2C_M_I2C_ACK_DATA); I2C_M_Stop(); 在进行读写切换操作时,需要加入I2C_M_Start()和I2C_M_I2CMasterSendRestart()这两个函数,才能实现。
实验效果 for(;;) { Value[0] = getAccel_X(); Value[1] = getAccel_Y(); Value[2] = getAccel_Z(); Value[3] = getGyro_X(); Value[4] = getGyro_Y(); Value[5] = getGyro_Z(); Value[6] = Angel_ACCX(); Value[7] = Angel_ACCY(); Value[8] = Angel_ACCZ(); } file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image006.jpg
实验现象
注意:使用PSOC4在Creator2.2的编译环境下进行编程中用到了math.h文件,如何添加? 对于 PSoC4/PSoC5 LP 的工程, Creator 默认是不加载 math 库的,如果需要调用 math 库里面的函数,需要在 Creator 里面做如下设置:
打开工程, 点击 Project -> Build Settings -> Linker -> General-> Additional Libraries. 在 “ Additional Libraries“ 文本框里面添加 ”m“. 然后确定,保存就可以了。
math.h添加方法
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image008.jpg
|