HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

这篇具有很好参考价值的文章主要介绍了HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 系列文章目录

HAL库版STM32双轮自平衡车(一) ———代码思路和PID的简单介绍(本篇) 

HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置、原理图接线、物料准备

HAL库版STM32双轮自平衡车(三) ———代码精讲

HAL库版STM32双轮自平衡车(四) ———— 原理图以及PCB绘制

HAL库版STM32双轮自平衡车(五) ———— 调参

带编码器的直流减速电机测速

HAL库版 0.96'OLED的使用


目录

 系列文章目录

 前言

一、代码整体框架

二、P , I , D 这三个控制器的作用和缺点

三、所用PID精讲

四、编写代码前的整体思路

五、小结



完整工程以及学习资料(设置了收费望理解)https://h5.m.goofish.com/item?id=681989715310&ut_sk=1.X2hUgNjQh0QDAMrgZaxtwchr_21407387_1684499716074.copy.detail.681989715310.2209260974794&forceFlush=1&ownerId=9db66f5694ab477fc49456657355a970&un=b92a505ad4316dfe46071105c2583afc&share_crt_v=1&un_site=77&spm=a2159r.13376460.0.0&sp_abtk=common_xianyu_commonInfo&sp_tk=UndhbWRvMlUwNzc%3D&cpp=1&shareurl=true&short_name=h.UEhbs71&bxsign=scd2vrEz8ec8281p2gBEWXb_hK1esb_MFtgLX0U9fHSxWHWEUxw2KDwuHFLf7dA0QUH1VGbvJXD3BKyKhMRbpxqeMktn1Tlm-MUD_wJhhrmkLdpYFWkc1t0KApMVQN8nj5NZvwrV_KDRe53CoD_5Yi2wg&tk=Rwamdo2U077&app=chrome


 前言

趁着暑假时间充裕,我也是完成了平衡小车的制作,现在实现的功能仅限于小车自平衡保持直立以及外界干扰(如:手用力推小车)时小车能够以很快的响应速度恢复平衡直立。接下来会写关于制作HAL库版平衡小车的系列文章。系列文章的链接放在了文章开头的系列文章目录里。

这篇文章也就是HAL库版STM32平衡小车的第一篇将重点讲解一下怎么编写平衡小车代码的思路以及一些基础的PID知识点,跟着我的思路相信你一定能在自己的脑海里面形成一个完整的框架,话不多说我们开始吧。


一、代码整体框架

HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲


二、P , I , D 这三个控制器的作用和缺点

p控制器(比例)

作用是:减小测量值和期望值之间的误差,让测量值不断接近期望值。

缺点是:存在稳态误差(静差)。若存在固定扰动时,P控制律不能迅速响应。

I控制器(积分)

作用是:消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差。

缺点是:控制不及时。因为积分输出的累积是渐进的,其产生的控制作用总是落后于偏差的变化,不能及时有效地克服干扰的影响,难以使控制系统稳定下来。

D控制器(微分)

作用是:反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。

缺点是:放大噪声。


三、所用PID精讲

通过上述的代码框架,可以知道我的这个平衡小车用的是位置式并联型PID控制

  • 什么是位置式PID?

HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

式中输出的u(k)可直接用来控制 系统需要控制的对象,u(k)的值和控制对象是一一对应的,因此通常称该公式为位置式PID控制算法。位置式PID缺点是每次输出均与过去的状态有关,计算时要对e(k)进行累加,计算繁琐,保存e(i)占用很多内存,控制不方便。增量式PID和位置式PID没有本质区别,就是数字PID的两种不同表示形式而已,在不同的系统中,根据题的具体内容选择适合的方法,位置式需要历次的偏差信号,而增量式只需一个增量信号即可。增量式误动作小,易于实现手动/自动的无扰动切换,不产生积分失控。但是缺点在于积分截断效应大,溢出影响大。

下面也给出增量式PID的数学公式:

HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

  • 么是并联型PID?

并联型PID实现了比例项,积分项和微分项的完全解耦,调节其中的Kp,Ki 与 Kd即可独立的作用在比例,积分和微分项上;而标准形式的Kp将同时影响比例,积分和微分三项行为。串联型类似

HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

  • 为什么采用位置式并联型PID?

虽然位置式计算较为繁琐,但是在位置式直立环的微分项中,角度的微分可以直接采用mpu6050采集到的y轴角速度值,比较容易理解。

采用并联型PID是因为可以让直立环和角度环独立开来,易于理解,调参也比较容易。当然如果采用串联型,那么就要将直立环设置为内环,速度环设置为外环,并且速度环的输出就要作为直立环期望角度的输入,因为重点在于保持直立状态。

  • 为什么直立环用 PD 而不用 PI 呢?

当角度接近机械零度时,P控制器就不工作了,控制器认为完成了任务,然而控制器忽略了角度在机械零度时电机还存在角速度,简单来说就是小车还有惯性。这时候就需要加入D控制器,预测下一时刻的偏差,进行超前调节,从而增加了系统的快速性。反过来想就是这个PID控制器中为什么不用积分。这里必须知道的一点是当比例系数很大的时候系统几乎没有静差。平衡小车直立控制需要快速性,相比之下P是很大的,积分的作用是消除静差,而静差对于直立控制的影响很小自然就不需要积分了。实际上平衡小车不一定要完全处于机械中值,稍微偏一点点也没有关系,只要稳定就行了。再有一点,小车需要尽可能快的达到直立平衡,I控制存在着控制不及时的缺点。

所以对于准确性要求不高的系统可以不加入积分控制。

  • 平衡小车直立有了直立环为什么还需要速度环?

小车光有直立环也是可以直立一小会儿的,但是一但外界有干扰(比如用手推了小车),小车只能通过单方向运动维持平衡,加入速度环就是修正小车的角度,小车一直往前面开时,速度环让小车以更快速度行驶使得小车后仰,这时直立控制让小车后退以维持平衡。

  • 还是老问题,为什么速度环用 PI 而不用 PD 呢?

对于速度控制当然是越精确越好,平衡小车当然希望速度一直为0。但是光有P控制器是不够的,因为P控制器的主要缺点是存在静差。那么就需要用I积分控制器来消除静差。

虽然D控制器可以预测未来,提前响应,但是微分控制的缺点是放大噪声。速度控制的速度偏差是由直立控制电机运动引起的,即速度噪声很大,所以不加入微分控制。

所以对于准确性要求高,系统噪声大时可以采用PI控制。


四、编写代码前的整体思路

我认为这是关于制作HAL库版平衡小车的重中之重,在编写代码前应该在脑海里面有一个大体的思路至关重要,这一步的完成度关系着之后编写代码的效率和质量。

下面就来开始吧,一步步进行。

  1. 首先要驱动轮子转吧,那就一定需要PWM。这一步就需要设置一个定时器(TIM2)的两个通道为PWM模式
  2. 轮子的正反转还要控制电机驱动板的AIN,BIN。这一步需要设置4个IO口为输出模式
  3. 速度环肯定需要得到两个轮子的转速。这一步就需要开启两个定时器(TIM3,TIM4)的编码器模式
  4. 直立环需要俯仰角以及y轴加速度。这一步需要开启I2C1为I2C模式
  5. OLED显示。这一步需要开启I2C2为I2C模式
  6. PID控制需要维持高度的周期性,用MPU6050自带的中断引脚INT发出的信号作为定时信息。这一步需要将一个IO口设置为外部中断引脚。

之后在CubeMX中的配置就可以按上述步骤一步步来。


五、小结

这篇文章就叙述完了,下一篇文章重点讲解CubeMX的配置、原理图接线、物料准备,以及在配置时遇到的“大坑”,CubeMX的配置思路也是与本篇文章所讲息息相关。

码字不易,希望喜欢的小伙伴别忘了点赞+收藏+关注,你们的肯定就是我创作的动力

欢迎大家积极交流,本文未经允许谢绝转载!!!文章来源地址https://www.toymoban.com/news/detail-443131.html

到了这里,关于HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32(HAL)库编码器电机pid代码及利用VOFA+对Pid波形显示调参

    PID控制是一种经典的反馈控制算法,它通过不断地调整输出来使系统的实际值与设定值尽量接近,并保持在设定值附近。PID控制器由三个部分组成:比例§、积分(I)和微分(D)。 比例作用(P):比例作用通过测量实际值与设定值之间的偏差,乘以一个比例系数来产生输出。输出

    2024年02月13日
    浏览(62)
  • PID理论基础及代码详解【stm32标准库】

    只考察控制对象当前的状态值 。 为了能够控制温度,速度等具有惯性性质的利用位式控制算法,框图如上。 以温度控制为例:图如下所示。 用户设定为SV,假设设定温度为 80 度 ,通过传感器将控制对象的温度PV进行获取。 (注:执行部件在此处可表示为加热器) SVPV时,位

    2024年02月15日
    浏览(38)
  • STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

    文章目录: 第一部分:项目开始前的计划与准备 1.项目策划和开发规范  1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分:调通硬件电路与驱动程序 第三部分:编写最基础的应用程序 第四部分:完成最终要求、反复调试 第五部分:程序优化、

    2024年02月13日
    浏览(51)
  • 三天让车立起来!STM32平衡车入门PID —— 第三天(PID调参)

    说明:本文章适用于STM32初学者,想完成一个好玩且有深度的项目但不知道从何下手的同学。 PID调参是平衡车的精髓所在,参数整定的好坏直接影响到平衡车的平衡效果。有的车平衡时来回晃而参数选的好的车就能稳稳地平衡在原地。可见PID调参在PID中是重中之重。我们一定

    2023年04月18日
    浏览(41)
  • STM32 HAL库PID控制电机 第三章 PID控制双电机

    注:本文含全部PID控制代码,保证可以运行,如不能运行可以留言回复 1 基础配置 1.1 编码器电路图及配置 引脚 定时器通道 PA0 TIM2_CH1 PA1 TIM2_CH2 PB6 TIM4_CH1 PB7 TIM4_CH2 因此需要把TIM2、TIM4配置为编码器模式。在STM32CubeIDE中找到定时器2与定时器4,进行模式配置。以下以定时器2为

    2024年02月16日
    浏览(38)
  • 【STM32F4系列】【HAL库】电机控制(转速和角度)(PID实战1)

    实现电机最常使用的两个功能, 转速控制 和 位置控制 使用PID闭环控制(控制线性系统最简单快捷的控制方法) 为了实现 控制电机转动 和 闭环控制 需要: 电机(废话) 编码器( 霍尔编码器 或者 光电编码器 均可) 电机驱动(这里选的是 l298n模块 ) 千万注意黑色的地线,单片机的地要

    2024年02月02日
    浏览(54)
  • STM32CubeMX 直流电机串级PID位置速度控制、HAL库、cubemx、PID、串级PID、位置控制、速度控制、双环控制

    提示:本文章的串级PID位置速度控制,是在前两篇文章速度控制,位置控制的基础上实现的,这一章节中不需要额外的cubemx的配置,只需要写简单的代码即可,复杂的地方在于串级pid的调试过程。 pid是我们在学习单片机中首先要学会的控制算法,而串级pid又是在单pid的基础上

    2024年02月14日
    浏览(53)
  • STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的IO口清零电机全部停止,置1通过AIN1 AIN2,BIN1,BIN2 来控制正反转 VM:建议接10V以内电源( 瞬间上电12V可能会有尖峰电压击穿器件 ) VCC:接5V电源 GND:接电源负极 PWMA:接单片机的PWM口 ,控制转速 PWM

    2023年04月22日
    浏览(96)
  • STM32 HAL库开发——基础篇

    一、基础知识 1.1 Cortex--M系列介绍 1.2 什么是stm32 1.3 数据手册查看 1.4 最小系统和 IO 分配  1.4.1 电源电路 1.4.2 复位电路 1.4.3 BOOT 启动电路 1.4.4 晶振电路 1.4.5 下载调试电路 1.4.6 串口一键下载电路  1.4.7 IO 分配  1.4.8 总结  1.5 开发工具 1.6 下载 二、 代码、工程相关 2.1 文本美化

    2024年02月07日
    浏览(33)
  • 【05】STM32·HAL库开发-C语言基础知识 | stdint.h介绍 | 位操作 | 宏定义的使用 | 条件编译 | extern声明 | typdef使用 | 结构体、指针、代码规范介绍。

      stdint.h 是从 C99 中引进的一个标准 C 库的文件,可以在MDK5的安装路径:D:MDK5.34ARMARMCCinclude中找到。   stdint.h 定义了很多类型别名,将有符号的char类型定义别名为int8_t等,使用此套别名有易于移植。   在MDK中需要配置才能支持使用S99标准, 默认是勾选的 。   只

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包