产品名称:WT901CM
官网:https://www.wit-motion.cn/#/witmotion/product/detail?id=78a80a409be742308b1e67153f773e1d
- 硬件连线:
使用到STM32的两个串口(不同型号的STM32开发板会有区别):
- usart1(PA9,PA10)通过开发板上已有的USB转串口CH340连接到电脑上与上位机通信,波特率为115200。
- usart2(PA2,PA3):PA2为TX口连接至下图板子的RX口,PA3为RX口连接至下图板子的TX口,另外板子的VCC和GND也要连接至32的3.3v和GND,波特率为9600。
- 上位机配置:
无论是IMU的数据直接读入电脑上位机,还是STM32读入经过计算得到角度、加速度等信息后再读入上位机,这些信息都需要上位机显示出来帮助我们理解和判断。
以下介绍两种应用场景:
- IMU直接与电脑相连,使用维特智能的上位机直接可以解析出角度,加速度等信息。
这时使用串口调试助手就可以读出IMU传给上位机的十六进制数据。
找出周期性的数据:
55 51 7A FA AE FF 86 05 C0 06 18
55 52 00 00 00 00 00 00 C0 06 6D
55 53 BE FC D8 1F C9 AB 22 49 38
55 54 67 08 13 FB F0 E5 00 00 FB
后面就可以通过维特的私有协议解析测量值。
2. IMU与STM32通信,STM32再与电脑上位机通信:
此时需要提前完成上文中的硬件连接部分,连接无误后,按下32开发版的RST复位键等待串口调试助手返回数据。
- 维特私有协议:
此处拿角度输出举例:
0x55为协议头每一包数据都以0x55打头,0x53为数据类型这里代表角度输出。
复制一段上文中的16进制数据:55 53 BE FC D8 1F C9 AB 22 49 38
D8 1F分别是PitchL和PitchH,那么0x1FD8就是俯仰角Y的数据,根据计算公式可得:
int main()
{
int PitchL = 0xD8;
int PitchH = 0x1F;
float res = ((PitchH<<8)|PitchL)/32768.0*180;
printf("俯仰角为%f", res);
return 0;
}
可以翻看上文中直接使用维特上位机读出的角度为44.736(这里角度有一点小偏差可能是没有把IMU固定住,让它的角度发生了微小的变化)
协议详细内容可访问:
- 串口通信例程:
配置两个串口的驱动文件:
fAcc[3], fGyro[3], fAngle[3]分别用来存放计算后的得到的数据,以下是初始化函数,有设置波特率,搜索传感器等。
以下是具体计算过程: