[单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计
串级PID算法应用剖析
这是经过给队友讲解串级PID的程序的之后的进一步的理解总结。
内环的实际值,取决于你能测出什么值给内环。而内环的输入就是内环误差
内环的输出值,是内环误差(内环目标值-内环实际值)经过内环pid计算后的值(可加 死区,不要积分项,要微分项)
其上限值需要考虑执行器所能控制的极限
内环的目标值,同时也是外环的输出值。
外环控制对象是内环控制对象的积分,所以PID参数整定也是结合现象,用控制变量法先整定内环,后整定外环。
外环的实际值,取决与你能测出什么值给外环。而外环的输入就是外环误差。它对应是串级PID最终要控制的物理量。
外环的输出值,是外环误差(外环目标值-外环实际值)经过外环pid计算后的值。(可加入 死区 和 积分分离,不要微分项)。
其上限值需要考虑对应物理量,估算出合理值。
外环的目标值,对应串级pid控制要达成的控制效果。
在条件允许时: 传感器获取数据时 加入 滤波算法 ;执行器在输出控制时 加入 平滑输出算法
以板球控制串级PID控制为例: (位置环不加死区,效果反而更好,不用担心板子不平)
通过串口控制两个电机
改自野火的例程,可以通过串口调试助手直接控制两个电机的速度和转向。
移植后关键函数:放在stm32f1xx_it.c 的串口中断服务函数;放在control.c的deal_serial_data()函数;放在bsp_debug.c的串口重定之类的函数。
(上述程序是没有真正编写协议的,没有解码数据帧之类的操作)
有协议的要参考之前的上位机设置PID的程序:
【单片机学习笔记】(32):L298N H桥驱动电路原理、基于野火的通信协议进行PID参数设置、中断服务函数标志位注意事项、非独立IO口注意事项、野火PID助手调参失败原因_wenhaiii的博客-CSDN博客
其中bsp_debug.c里的串口回显可以让上位机确认下位机是否成功接收到控制信号,之后给上位机控制程序的时候记得编写相应代码利用下位机的串口回显,保证控制的可靠性。
之后可以根据上述两个函数将小车由电脑通过USB线控制,改成可以通过蓝牙、wifi等无线来控制小车。
MPU6050获取平衡车姿态
由于MPU6050的安装姿态与小车姿态不匹配,得把横滚角roll和偏航角pitch 转换一下。
加速度计和陀螺仪的数据都要变换。
实际测式最高读取速率:调用这个函数的时间可以在0.5ms至300ms,太快的话可能DMP还没处理完数据。 即最高读取频率可达2KHz(文件上说1KHz)。实际用的时候还是1ms以上调用一次稳妥一些
移植的时候记得把 mpu6050.c inv_mpu.c inv_mpu_dmp_motion_driver.c 都添加到工程中,然后要调用相关函数的时候,把mpu6050.h 和 inv_mpu.h这两个头文件include就行
自制平衡车PID算法程序设计
喵呜两轮平衡车没有使用速度闭环内环的PID控制,它通常三轮,四轮的小车上的。
两轮平衡车上的速度环 、角度环是分别各自去运算之后合成出一个输出。
速度环输入:电机编码器捕获到的脉冲数
回看之前自己照着喵呜的教程写的HAL库的平衡小车代码,发现用来存放编码器值的变量竟然是unsigned int 类型的变量,可是之前还让小车立起来了。。。。。。(得去比对一下之前的程序,查找原因)
去看喵呜的标准库的例程,它存放编码器值的变量是short类型的。
角度环输入: 有软件解算和硬件解算两种,因为滤波算法接触的不多,所以直接用mpu6050硬件解算出来的数据更靠谱。
软件解算姿态:MPU6050获取的一个方向的角度数据(accx或accy)和一个方向的加速度数据(gyrox或gyroy) 经过互补滤波之后的值(当成角度来理解就行)。
(喵呜用了一种很简单的互补滤波算法,可能是为了为了避免移植mpu6050的DMP驱动库的繁琐操作,不一定可靠。)
DMP解算姿态:直接用mpu6050硬件解算出来的欧拉角中的一个角度值
[单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计相关推荐
- 51单片机学习笔记(清翔版)(19)——串口通信
学好了中断再学串口通信 今天这课内容是关于数据传输的,在工业控制和商业控制是很重要的.数据传输包含串口.并行通信. 这里说的计算机都可以理解为单片机,因为工作方式是一样的. 单片机通信是指单片机之间, ...
- stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...
原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...
- 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】
C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...
- ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi
ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi 暂停了半个多月的学习,去调车了.现在课设开始了,赶紧回来把一开始的"以太网"目标学完.但是却发现,好 ...
- [51单片机学习笔记TWO]----蜂鸣器
蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...
- 单片机学习笔记(Arduino Uno r3)
单片机学习笔记(Arduino Uno r3) Aduino是什么? 分为硬件和软件两个部分,硬件和软件共同组成了Arduino,使用时须将Arduino硬件和软件配合使用 硬件:Arduino系列 ...
- 单片机学习笔记-数码管的显示
单片机学习笔记-数码管的显示 数码管的显示 1.首先我们来看一下开发板的原理图 由管脚分配可知,数码管的末端(也就是LED端),是由74138译码器来控制的. 2.下面是数码管显示的函数 这里我们使用 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
最新文章
- 【分享】Maven插件的源码下载(SVN)
- Smartforms 设置纸张打印格式
- CSRFGuard工具介绍
- 当你的技术债务到期时,LinkedIn的故事 | IDCF
- 软件测试计划时要记住什么
- 元类被称为 Python 中的“深奥的巫术“
- c mysql 双主复制_mysql双主复制及使用keepalived作高可用的配置详解
- 进程间通信之3----信号量
- Linux 音频驱动
- STM8单片机ADC连续采样模式
- SQL Server中的数据库表分区
- 读书随笔:The Book of Why——CHAPTER 1:The Ladder of Causation
- weblogic使用脚本部署
- wxParse无法解析strong标签
- 【python】Anaconda3环境安装
- 腾讯云即时通信IM实现聊天功能
- 台式计算机设置热点,台式机怎么设置无线热点
- 视频通信中的码率控制算法
- IB中文诗歌手法分析
- PHPStorm 配置locahost 数据库
热门文章
- VMware 12 Exception 0xc0000005
- android高德定位sdk,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
- [前后端分离][MVC模式]JavaWeb实现简单的购物网站主体功能
- 详解二叉树的后序遍历
- 数学小故事之拉格朗日的世界
- Mybatis中用到的设计模式
- 逆向倾向评分 (Inverse Propensity Scoring, IPS) 原理解析与MF算法的结合使用
- 蒙特卡洛方法 matlab 实现
- 怎么用cmd强制修改密码
- Ajax——同步请求与异步请求