无法使用TI C2000 f28379d和Simulink从MPU6050读取数据金宝app

37次观看(过去30天)
你好,我试图使用TI C2000 f28379d与simulink从IMU 6自由度(MPU6050)读取数据(加速度计,陀螺仪和温度计)。金宝appMPU6050采用I2C方式,带有以下寄存器:
  • 0x68: MPU-6050的I2C地址
  • 0x6B: PWR_MGMT_1寄存器
  • 0x3B(加速度xout_h) & 0x3C(加速度xout_l)
  • 0x3D (accel_you_h) & 0x3E (accel_you_l)
  • 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  • 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  • 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  • 0x45 (gyro_you_h) & 0x46 (gyro_you_l)
  • 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
为了做到这一点,我修改了“德州仪器C2000处理器的嵌入式编码器支持包”:“c28x_i2c_sensor”提供的示例,使用以下金宝app逻辑:
  1. write 0 to register 0x6B:唤醒MPU-6050
  2. 读取寄存器0x3B(加速xout_h)
但我只读0(外部模式)。
电气连接:
  • SDA: P104
  • sci:施敏原著
我附上修改后文件的屏幕。
有什么办法可以帮助我吗?
谢谢。

接受的答案

Aditya Padmanabha
Aditya Padmanabha 2018年5月24日
编辑:Aditya Padmanabha 2018年5月24日
你好,托马索,
我根据上面安东宁提供的模型,在F28379D LaunchPad上附上了BOOSTXL_SENSHUB上现有的MPU-9150的17a模型。该型号在外部模式下运行,有合适的COM端口。如果你想在ControlCard而不是LaunchPad上运行这个模型,你可能需要相应地修改时钟,I2C和SCI设置。
在这个模型中,我使用了函数调用方法对I2C发送和接收进行排序。您可能需要对MPY-6050传感器的配置进行其他更改。
我没有实现在这个模型中重置从传感器的逻辑,如果你需要这样做,你必须实现单独的逻辑。复位后确保从传感器工作在正常模式。如果没有复位逻辑,如果通信中断,您可能必须对传感器进行电源循环,并执行C2000板复位以将从传感器从睡眠模式中拉出来。
如果你在F28379D LaunchPad上运行,你可能需要做的另一件事是在主从之间为SDA和SCL引脚创建额外的电路,如图所示。这确保了F28379D LaunchPad和MPU-9150之间更强的上拉和稳定的I2C通信。
如果传感器模块中已经有上拉电阻,则可能不需要上拉电阻(2.2K欧姆)。但是F28379D发射台和传感器模块之间需要33欧姆系列电阻,没有这个电阻I2C通信不稳定,读取传感器数据时可能总是返回零。
我希望这对你们有帮助,
谢谢,
Aditya
1评论
Aditya Padmanabha
Aditya Padmanabha 2018年5月25日
你好,托马索,
关于I2C故障问题的更多信息,导致TI E2E中F28379D发射台的问题https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/676372。金宝app
谢谢,
Aditya

登录评论。

更多答案(5)

安东尼
安东尼 2018年5月11日
你好,托马索,
I2C块需要一个十进制格式的从I2C地址。你必须使用hex2dec('68')或104作为从地址寄存器。
此外,请确保在读取地址设置为“3B”和I2C接收请求之间等待以读取传感器数据,否则I2C接收请求将希望在前一个I2C传输结束之前执行。这就是“do{…”} while”子系统,您可以在示例中找到:c28x_i2c_eeprom/EEPROM Data Read。
避免等待的一种方法是首先发出I2C接收请求,然后为下一个I2C接收命中发送'3B'地址。你可以在init函数中处理第一个实例。
我希望这对你们有帮助,
祝你好运,
安东尼。

托马索serni
托马索serni 2018年5月14日
谢谢你的回答,安东宁。
我按照您的建议修改了示例(我附上了图像),但我仍然只读取零。
我尝试将“InitTrigger”和“Rate Transition”块的采样时间分别减少到15e- 2s和1e- 2s,但没有结果。
最好的问候,
托马索。

安东尼
安东尼 2018年5月15日
附件是一个在MATLAB R2016b中为MPU-9150创建的模型,该模型存在于F28027发射台上的BOOSTXL-SENSHUB上。它也可以在外部模式下运行。我认为你可以直接复制块到你的模型。模型配置可能与您的不同。
我意识到MPU-9150使用与MPY-6050相同的地址,所以它应该非常接近。
您的函数调用方法可以很好地对执行进行排序,比我们在附带的模型中使用的块优先级更好。这是你可以做的一项改进。如上所述,有一种方法可以删除等待循环,这是另一种可能的改进。
我希望这对你们有帮助,
安东尼。

托马索serni
托马索serni 2018年5月15日
谢谢你的帮助,安东宁,
我复制了我的模型中的块,但我得到以下错误:
不能实现用户指定的优先级。'i2c_sensor_example_antonin/第一次Init/High Addr/Constant' (pri=[10, Inf])必须在'i2c_sensor_example_antonin/第一次Init/I2C Transmit1' (pri=[2])之前执行以满足数据依赖
错误:错误发生当执行外部模式mexfile 'ext_comm'时:
失败的连接到目标。在等待来自目标的连接响应时发生了超时。可能的超时原因:
一个)目标未开启。
b)目标未连接到主机。
c)模型的应用程序没有在目标上运行。您可能点击了“停止”按钮。如果运行按钮没有变暗,点击它。否则,点击Build按钮,这下载并在目标上运行应用程序。
错误:无法连接到'TI Delfino F2837xD'目标'i2c_sensor_example_antonin'。
经过各种测试后,我意识到删除“While迭代器子系统”块后,我不会从模型中收到错误,但显然我不会读取数据。
你有什么解决这个问题的办法吗?
最好的问候,
托马索。

阿里Ozan
阿里Ozan 2018年8月12日
你好,tommaso serni;
我正在做一个类似的项目,我需要使用TI C2000 F28379D发射台从MPU6050读取陀螺仪数据。
你设法解决这个问题了吗?因为在另一个线程中,你说“在CPU1上:IMU 6自由度读取(I2CA),使用串行SCIA/SCIB和PWM输出伺服/ESC (ePWM1/ePWM2)”。如果你能找到解决办法,请帮助我。
致以最亲切的问候。
1评论
乔治kotoulas
乔治kotoulas 2022年11月1日
你好,
我也遇到了同样的问题。你找到解决办法了吗?
致以最好的问候,乔治。

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!