MPU6500 芯片读取传感器数值FPGA设计

MPU6500芯片是一种6轴运动跟踪装置。具备输出角速度,加速度和温度。

FPGA设计,是通过IIC时序读取相应功能数值。官方手册给的时序图如下图1。

                                                 图1 IIC读取芯片时序

通过FPGA设计读取 传感器, 芯片端是做为从设备。设备ID = 110100X,X是由硬件设计决定。芯片引脚ADO拉低。设备ID=68h,反之,硬件设备ID=69H.下面是芯片寄存器地址表。

CONSTANT MPU6500_SELF_TEST_XG     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"00";
CONSTANT MPU6500_SELF_TEST_YG     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"01";
CONSTANT MPU6500_SELF_TEST_ZG     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"02";
CONSTANT MPU6500_SELF_TEST_XA     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"0D";
CONSTANT MPU6500_SELF_TEST_YA     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"0E";
CONSTANT MPU6500_SELF_TEST_ZA     :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"0F";


CONSTANT MPU6500_XG_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"13";
CONSTANT MPU6500_XG_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"14";
CONSTANT MPU6500_YG_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"15";
CONSTANT MPU6500_YG_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"16";
CONSTANT MPU6500_ZG_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"17";
CONSTANT MPU6500_ZG_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"18";


CONSTANT MPU6500_SMPLRT_DIV          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"19";


CONSTANT MPU6500_CONFIG              :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1A";
CONSTANT MPU6500_GYRO_CONFIG         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1B";
CONSTANT MPU6500_ACCEL_CONFIG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1C";
CONSTANT MPU6500_ACCEL_CONFIG_2      :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1D";
                                    


CONSTANT  MPU6500_LP_ACCEL_ODR        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1E";


CONSTANT MPU6500_MOT_THR             :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"1F";


CONSTANT MPU6500_FIFO_EN             :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"23";


CONSTANT MPU6500_I2C_MST_CTRL        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"24";


CONSTANT MPU6500_I2C_SLV0_ADDR       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"25";        
CONSTANT MPU6500_I2C_SLV0_REG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"26";
CONSTANT MPU6500_I2C_SLV0_CTRL       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"27";
CONSTANT MPU6500_I2C_SLV1_ADDR       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"28";
CONSTANT MPU6500_I2C_SLV1_REG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"29";
CONSTANT MPU6500_I2C_SLV1_CTRL       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2A";
CONSTANT MPU6500_I2C_SLV2_ADDR       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2B";
CONSTANT MPU6500_I2C_SLV2_REG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2C";
CONSTANT MPU6500_I2C_SLV2_CTRL       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2D";
CONSTANT MPU6500_I2C_SLV3_ADDR       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2E";
CONSTANT MPU6500_I2C_SLV3_REG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"2F";
CONSTANT MPU6500_I2C_SLV3_CTRL       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"30";
CONSTANT MPU6500_I2C_SLV4_ADDR       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"31";
CONSTANT MPU6500_I2C_SLV4_REG        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"32";
CONSTANT MPU6500_I2C_SLV4_DO         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"33";
CONSTANT MPU6500_I2C_SLV4_CTRL       :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"34";
CONSTANT MPU6500_I2C_SLV4_DI         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"35";


CONSTANT MPU6500_I2C_MST_STATUS      :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"36";

CONSTANT MPU6500_INT_PIN_CFG         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"37";
CONSTANT MPU6500_INT_ENABLE          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"38";
CONSTANT MPU6500_INT_STATUS          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3A";


CONSTANT MPU6500_ACCEL_XOUT_H        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3B";
CONSTANT MPU6500_ACCEL_XOUT_L        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3C";
CONSTANT MPU6500_ACCEL_YOUT_H        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3D";
CONSTANT MPU6500_ACCEL_YOUT_L        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3E";
CONSTANT MPU6500_ACCEL_ZOUT_H        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"3F";
CONSTANT MPU6500_ACCEL_ZOUT_L        :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"40";
CONSTANT MPU6500_TEMP_OUT_H          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"41";
CONSTANT MPU6500_TEMP_OUT_L          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"42";
CONSTANT MPU6500_GYRO_XOUT_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"43";
CONSTANT MPU6500_GYRO_XOUT_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"44";
CONSTANT MPU6500_GYRO_YOUT_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"45";
CONSTANT MPU6500_GYRO_YOUT_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"46";
CONSTANT MPU6500_GYRO_ZOUT_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"47";
CONSTANT MPU6500_GYRO_ZOUT_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"48";


CONSTANT MPU6500_EXT_SENS_DATA_00    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"49";
CONSTANT MPU6500_EXT_SENS_DATA_01    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4A";
CONSTANT MPU6500_EXT_SENS_DATA_02    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4B";
CONSTANT MPU6500_EXT_SENS_DATA_03    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4C";
CONSTANT MPU6500_EXT_SENS_DATA_04    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4D";
CONSTANT MPU6500_EXT_SENS_DATA_05    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4E";
CONSTANT MPU6500_EXT_SENS_DATA_06    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"4F";
CONSTANT MPU6500_EXT_SENS_DATA_07    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"50";
CONSTANT MPU6500_EXT_SENS_DATA_08    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"51";
CONSTANT MPU6500_EXT_SENS_DATA_09    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"52";
CONSTANT MPU6500_EXT_SENS_DATA_10    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"53";
CONSTANT MPU6500_EXT_SENS_DATA_11    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"54";
CONSTANT MPU6500_EXT_SENS_DATA_12    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"55";
CONSTANT MPU6500_EXT_SENS_DATA_13    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"56";
CONSTANT MPU6500_EXT_SENS_DATA_14    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"57";
CONSTANT MPU6500_EXT_SENS_DATA_15    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"58";
CONSTANT MPU6500_EXT_SENS_DATA_16    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"59";
CONSTANT MPU6500_EXT_SENS_DATA_17    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5A";
CONSTANT MPU6500_EXT_SENS_DATA_18    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5B";
CONSTANT MPU6500_EXT_SENS_DATA_19    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5C";
CONSTANT MPU6500_EXT_SENS_DATA_20    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5D";
CONSTANT MPU6500_EXT_SENS_DATA_21    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5E";
CONSTANT MPU6500_EXT_SENS_DATA_22    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"5F";
CONSTANT MPU6500_EXT_SENS_DATA_23    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"60";


CONSTANT MPU6500_I2C_SLV0_DO         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"63";
CONSTANT MPU6500_I2C_SLV1_DO         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"64";
CONSTANT MPU6500_I2C_SLV2_DO         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"65";
CONSTANT MPU6500_I2C_SLV3_DO         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"66";

CONSTANT MPU6500_I2C_MST_DELAY_CTRL   :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"67";
CONSTANT MPU6500_SIGNAL_PATH_RESET    :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"68";
CONSTANT MPU6500_MOT_DETECT_CTRL      :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"69";
CONSTANT MPU6500_USER_CTRL            :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"6A";


CONSTANT MPU6500_PWR_MGMT_1           :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"6B";
CONSTANT MPU6500_PWR_MGMT_2           :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"6C";


CONSTANT MPU6500_FIFO_COUNTH           :STD_LOGIC_VECTOR(7 DOWNTO 0) := x"72";
CONSTANT MPU6500_FIFO_COUNTL          :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"73";


CONSTANT MPU6500_FIFO_R_W             :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"74";


CONSTANT MPU6500_WHO_AM_I             :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"75";    -- mpu6500 id = 0x70

CONSTANT MPU6500_XA_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"77";
CONSTANT MPU6500_XA_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"78";
CONSTANT MPU6500_YA_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"7A";
CONSTANT MPU6500_YA_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"7B";
CONSTANT MPU6500_ZA_OFFSET_H         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"7D";
CONSTANT MPU6500_ZA_OFFSET_L         :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"7E";
    
CONSTANT MPU6500_ID            :    STD_LOGIC_VECTOR(7 DOWNTO 0) := x"70";    

FPGA通过设计的IIC时序,读取 MPU6500_WHO_AM_I (75h)寄存器的值是70h ,说明IIC读取总线通信成功。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值