STM32基于CubeMX与Simulink的模块开发——MT6701和EEPROM的IIC实现
数据手册
通过数据手册可知:
MT6701的I2从机地址为0X06(b’0000110,b:Binary表示二进制)
MT6701数据手册中给的读取方式为单字节读取,先读0X03再读0X04获取角度
IIC也可进行多字节读取:将0X03与0X04的数据一同取出(第三节IIC)
参考:
STM32基于CubeMX与Simulink的模块开发——IIC官方例程学习-CSDN博客
MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600-CSDN博客
模块设计
官方帮助:使用 I2C 将数据读取和写入 STM32 处理器板上的加速度计 – MATLAB & Simulink – MathWorks 中国
单个字节读取
参考官方示例的单个字节读取的设计:
设计MT6701的模型:
1.完成单个数据读取模型搭建
先向外设地址为0X06,寄存器地址为0X03读取数据,再向外设地址为0X06,寄存器地址为0X04读取数据
存在报错:
解决方法:
修改输出类型
2.处理读取数据
如图所示,将0X03取出的数据左移六位,0X04取出的数据右移两位,组合再除以16384乘以360将是最后的角度信息
2.1新建一个子系统
Subsystem 模块:对各模块进行分组以创建模型层次结构
模块帮助:Subsystem – 对各模块进行分组以创建模型层次结构 – Simulink – MathWorks 中国
2.2在子系统中实现左移右移
使用Shift Arithmetic模块:移动输入信号中的数位和/或二进制小数点
模块帮助:Shift Arithmetic – 移动信号的位或二进制小数点 – Simulink – MathWorks 中国
2.3计算出角度
3.模型搭建完成
CubeMX配置
1.基本配置
参考:STM32基于CubeMX与Simulink的模块开发——新建工程-CSDN博客
2.IIC配置
MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600-CSDN博客
标准模式速度为100000HZ,10us,完全够用
重新修改一下
测试
1.先配置一下模型设置
2.测试一下子系统的计算
问题1:发现右移六位导致数据溢出,因为数据为8位数据
解决:进行一下数据转换,转换成uint16
Data Type Conversion模块:将输入信号转换为指定的数据类型
模块帮助:Data Type Conversion – 将输入信号转换为指定的数据类型 – Simulink – MathWorks 中国
子系统测试完成
3.HIL测试
参考:STM32基于CubeMX与Simulink的模块开发——PIL和HIL实现-CSDN博客
3.1先配置一下串口
Cuebemx
记得保存一下!!!!
Simulink
3.2MT6701传感器验证
先拿Arduino Mega2560测试一下传感器有没有问题(防止我代码没问题,传感器有问题)
Arduino 驱动MT6701磁编码器并读取角度数据-CSDN博客
没问题啊
3.3 EEPROM模块验证
因为我的开发板上(野火霸天虎)集成了EEPROM,想先拿这个来验证一下我的模块
按照上述流程配置了一下CubeMX,唯一不一样的是IIC的引脚:
所以改了一下配置
照着网上的验证步骤:先写入在把写入的数据读出来,搭建模型并编译
拿逻辑分析仪看看数据:
很完美!!!!
网盘链接:通过网盘分享的文件:EEPROM.zip
链接: https://pan.baidu.com/s/16cJsxyHAAA0hQtCLdYC9aw?pwd=qefw 提取码: qefw
–来自百度网盘超级会员v7的分享
3.4 MT6701实现
注意:使用dispaly和scope一定要把这个关了
拿逻辑分析仪看看:
完美!!!
百度网盘链接:通过网盘分享的文件:MT6701.zip
链接: https://pan.baidu.com/s/1lg1_4iFcBy16YnPzUv_dPQ?pwd=6rgr 提取码: 6rgr
–来自百度网盘超级会员v7的分享
作者:实验室的看门人