【重要】【程序】使用STM32+CubeMax读取JY901陀螺仪角度

九轴陀螺仪 JY901

1.陀螺仪的轴是啥意思

三轴陀螺仪指的是可以感应Roll(翻滚角,左右倾斜)、Pitch(俯仰角,前后倾斜)和Yaw(偏航角、前行角度)的传感器。六轴陀螺仪指的是将三轴加速度传感器和三轴陀螺仪结合起来的传感器,可以额外感应空间上三个方向的加速度。而九轴传感器可以再额外测量空间三个方向的磁场强度。此外还有十轴传感器,能再测量气压高度。

为了看得更清晰,这里画出一个表格。

陀螺仪种类角度加速度磁场气压高度
三轴
六轴
九轴
十轴

2.市面上主要陀螺仪产品

  1. GY521

GY521模块用的是MPU-6050芯片。MPU-6050是一种六轴陀螺仪,可以测量角度和加速度。优点是成本较低,缺点是编程复杂,库代码量很大,对单片机Flash要求比较高,有一定的误差,总之就是不推荐。

image-20220724164510967

  1. ATK-MPU6050

ATK-MPU6050模块和GY521模块用的芯片都是MPU6050,但是不知道为什么ATK的价格比GY521的贵了好几倍

image-20220724165115986

  1. JY系列

除了蓝色底的MPU6050模块,我们能用到的陀螺仪基本上就是维特智能家的产品了。维特智能的模块有一个特点,就是绿色底,一看就能认出来。

image-20220724165606650

价格很贵,但是精度高,编程简单(串口通讯)物有所值。

这里简单对比一下常用的几个模块

建议有钱直接上JY901S

3. JY901的使用

我们做车的主要是要用Z轴方向的偏航角,JY901能够解决偏航角的积分误差累积问题,所以JY901就比较适合我们。

image-20220916211314914

3.1 上位机配置

每个项目开始前,建议先在上位机中进行加速度和磁场校准,具体看官方使用手册

为了数据的高效稳定传输,我们在上位机中配置值通讯速率(波特率)9600,回传速率20Hz,回传内容只要欧拉角。

如果只使用偏航角,最好将算法从九轴改成六轴,这会使偏航角更稳定。

配置完成后就可以写STM32代码了。(比6050方便好多)

3.2 STM32 代码编写

对于这种固定频率的数据高速传输,最好使用串口DMA,不要使用串口中断(会有莫名卡死的问题)。

在使用手册中我们可以找到角度回传的数据内容

image-20220724180735187

image-20220724180742731

也就是说,每次回传内容都是11位。其中,第7位和第8位是我们需要的偏航角信息。

在写STM32接收角度信息的代码时,我们首先要判断第一第二位是不是0x55和0x53因为有时候STM32会读取到错误数据,如全是0等,所以我们要过滤掉这些错误信息。然后我们直接取第七第八位进行计算即可,具体代码如下

     //DMA每接收到一次数据就运行下面代码一次 
	 if(rx_buffer[0] == 85 && rx_buffer[1] == 83)
      {
        angle_z = (float)((rx_buffer[7]<<8)|rx_buffer[6])/32768.0*180.0;
      }

注意要写成32768.0和180.0而不是32768和180,否则计算会出大错。

好了,到现在我们就能读取到实时的偏航角信息了。但这个时候还有一个大问题,就是数据溢出。就是说,当转角增大到360时,下一个角度将会是0度。这会给我们带来很大麻烦,我们可以使用类似处理电机编码器溢出的方法来解决它。

我们定义一个总的角度变量和一个溢出计数变量,当发生向上溢出时,溢出计数变量加一,反之减一,总的角度值等于当前角度值加上溢出计数值乘以360。我们之后不要使用当前角度值,直接使用总角度值即可。

	 //DMA每接收到一次数据就运行下面代码一次 
	 if(rx_buffer[0] == 85 && rx_buffer[1] == 83)
      {
        angle_z = (float)((rx_buffer[7]<<8)|rx_buffer[6])/32768.0*180.0;
      }
	 if(angle_z > 300 && angle_z_last < 50) jy901_of_count--;
      else if(angle_z < 50 && angle_z_last > 300) jy901_of_count++;
      angle_z_all = angle_z + jy901_of_count * 360;
      angle_z_last = angle_z;//保存上一次的值

好了,现在所有代码都写完了,开心使用偏航角来完成作品就好了。

  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值