IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103C8-平衡小车笔记 -> 正文阅读

[嵌入式]STM32F103C8-平衡小车笔记

STM32F103C8-平衡小车笔记

1.PID的作用

(1)比例项:提高响应速度,减小静差

(2)积分项:消除稳态误差

(3)微分项:减小震荡以及超调

2.串级PID

(1)直立环(角度环)作为内环,速度环作为外环

(2)直立环采用PD控制器,速度环采用PI控制器

3.串级PID参数整定

(1)先整定内环,后整定外环,内环是外环的微分。

(2)主调为外环,副调为内环,外环就是只是一个P在起作用,也就是比例在起作用;P也就是修正力度,越大越容易使被控制量震荡。

4.MPU6050 INT中断触发而不用循环,这样有何优势?

放在while循环的话,这个循环是可以被中断打断的。
小车平衡对实时性要求高,如果在while循环里,姿态矫正时,程序被其他模块中断,小车就立不起来了

5. 串口发送一帧数据时,两个字节的间隔时间是多少?

这里先搞懂什么是波特率:
波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud。

如果波特率为9600,发送一个位需要的时间为1/9600s=0.0001042s=0.1042ms,这里按数据位为8位,停止位为2位,
加起来就是10位,10个位发送所需的时间为:0.1042*10ms = 1.042ms,如果我要发送10个字节的数据,那发送这10个字节数据给接收方需要
的时间为:10*1.042ms = 10.42ms,这是算实际的发送10个字节的数据所需要的时间。我们在接收方接收数据时可以
把时间再加宽一些,让它有一点余量。让接收方能稳定的把数据从发送方接手过来,可以加个5ms,或更宽一点10ms,
加上发送10个字节所花的时间,就是15ms或20ms。

注:波特率为115200或是4800的为发送时间都可以这样算。

6.STM32外部中断触发问题

中断必须要清标志,另外不要在中断里面延时,不要在中断里面延时,中断里面只做一些赋值等简单操作,最好做个标志位,在外面处理。

7.速度处理记录
MotorSpeed = Encoder_GetPosIncr(MotorID)*230.769230;	
8.欧拉角定义
  • pitch是围绕X轴旋转,也叫做俯仰角。
  • yaw是围绕Y轴旋转,也叫偏航角。
  • roll是围绕Z轴旋转,也叫翻滚角。
9.陀螺仪检测的缺陷

由于陀螺仪测量角度时使用积分,会存在积分误差,若积分时间 Dt 越小,误差就越小。

10.加速度传感器检测的缺陷

由于这种倾角检测方式是利用重力进行检测的,它无法检测到偏航角(Yaw) 。

另一个缺陷是加速度传感器并不会区分重力加速度与外力加速度,当物体运动的时候,
它也会在运动的方向检测出加速度,特别在震动的状态下,传感器的数据会有非常大的数
据变化,此时难以反应重力的实际值

11.磁场检测器的缺陷

与指南针的缺陷一样,使用磁场传感器会受到外部磁场干扰,如载体本身的电磁场干
扰,不同地理环境的磁铁矿干扰等等

12.姿态融合与四元数

可以发现,使用陀螺仪检测角度时,在静止状态下存在缺陷,且受时间影响,而加速
度传感器检测角度时,在运动状态下存在缺陷,且不受时间影响,刚好互补。假如我们同
时使用这两种传感器,并设计一个滤波算法,当物体处于静止状态时,增大加速度数据的
权重,当物体处于运动状时,增大陀螺仪数据的权重,从而获得更准确的姿态数据。同理,
检测偏航角,当载体在静止状态时,可增大磁场检测器数据的权重,当载体在运动状态时,
增大陀螺仪和 GPS 检测数据的权重。这些采用多种传感器数据来检测姿态的处理算法被称
为姿态融合

13.关于硬件IIC问题

STM32的硬件IIC是存在一定问题的,初始化MPU6050时可能导致初始化失败,所以推荐使用软件IIC。

14.MPU6050偏航角(yaw)零飘

MPU6050的偏航角是不正常的,即使静止不动也会跳动。这个纯粹是硬件问题,就算算法怎么牛逼也解决不了。只能外加磁力计解决,也可以直接使用MPU9250,这个是自带磁力计的。使用时注意不要和电机靠太近,磁场很容易受到干扰。

15.MPU6050万向节锁

默认Z-Y-X顺序下,不知道大家有没有发现这个问题。当MPU6050只转动俯仰角,俯仰角接近90度或者等于90度时,偏航角的角度会发生很大的偏差。那么这个就是万向节锁,此时如果比作一架飞机,当飞机垂直90度向上时,按照Z-Y-X顺序无论怎么改变方向飞机都只能向上飞。
所以不要让俯仰角垂直,这样可以减少bug。

16.采样率设置为200HZ,那么采样时间就是1/200=5ms

根据公式T = 1 / f
实际上采样频率是根据DMP频率,如果两个频率不同最终也以DMP的为主,当然前提是使用DMP。

小车的处理时序越短,理论上小车性能会更好。但是MPU6050的采样频率是有限制的,不能小于5ms。所以时序最短只能设置为5ms,一般会用定时器或者MPU6050中断引脚触发5ms中断然后处理数据输出PWM。

17.C语言 格式化输出–%m.n

%5d 要求宽度为5位,如果不足5位,前面空格补齐;如果足够5位,此语句无效。

%05d 要求宽度为5位,如果不足5位,前面0补齐;如果足够5位,此语句无效。

%-5d 要求宽度为5位,如果不足5位,后面空格补齐;如果足够5位,此语句无效。

%.2d 小数点后只保留2位小数。

18.void * data 数据类型参数解释

void* data 是一个无类型的指针参数,任意类型指针可以赋值给data,当data赋值给其他类型时需要先指定数据类型。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:42:18  更:2022-07-21 21:43:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:29:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码