攻城狮Melo 发表于 2023-2-12 17:24:00

基于STM32F103的平衡车设计

本辆小车是以STM32F103C8T6作为主控芯片,使用LQR算法作为小车的自控算法,
区别于传统PID算法,LQR控制器(Linaer Quadratic Regulator 线性二次型调节器)是一种在现代控制理论中设计状态反馈控制器的方法,在这里引入了反馈增益K的概念来使系统稳定。我们可以通过选择反馈增益K的值来改变闭环矩阵的特征值,从而改变系统的表现。
与经典PID系统相比,经典PID是依靠误差反馈来消除误差,这种系统存在一定的惯性,不能发生跳变,而目标值是外部给定,可以跳变,这就导致了PID系统会发生超调的现象,
而LQR中通过建立系统模型,来得到最优控制解,比PID具有更好的线性调节能力,这也是为什么选择LQR算法作为控制算法的主要原因。

!(data/attachment/forum/202302/12/171927je39tvv6krr88t9t.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "1.png")!(data/attachment/forum/202302/12/171927e0dwv9u2vv7gwa70.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "2.png")

如上图是对小车LQR控制系统建立的Siumlink模型,系统收敛可控,通过不断调节参数使得响应得到最优

LQR求解过程:
1 选取合适的Q和R
2 解 Riccati方程
3 计算出K

!(data/attachment/forum/202302/12/171939k8isd87m34r3xz43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "3.png")

如图是LQR判断系统是否可控,是基于已经得到的物理模型上建立而来的。

!(data/attachment/forum/202302/12/171949d7bdp1dou1o2o2dp.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "4.png")

车轮的运动可分解为平动和转动,则 由牛顿第二定律可得
mxr’’= Hfr-Hr
根据刚体转动定律可得
Iwr=TR-HfRr

其中m为车轮质量r车轮半径,Xr右轮水平位移,Hfr右轮收到地面的摩擦力大小,Hr右轮收到的车体作用力的水平分力大小,Tr右轮电机输出转矩大小 I 右轮转动惯量,WR是右轮角速度大小

联立方程 得关联函数(m+I/r2)xr’’= TR/r-HR

以上是针对控制算法做的一些简述,接下来是软件部分
源码中注释已经相对完善,

!(data/attachment/forum/202302/12/172003vafkii9ikbxriikf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "6.png")!(data/attachment/forum/202302/12/172003nkwdj7gvr6ajkvgv.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "5.png")

如图是LQR控制的相关代码,通过MPU6050测量的俯仰角度 来转换为小车前进速度,保持系统平衡状态始终为“0”
LQR 控制器的效果是使得所有的状态变量都变为 0,为了实现 App 控制的 便捷,这里引入了 “Target_x_speed”,“Target_angle_x”,“Target_gyro_z”三个量, 分别表示目标前进速度,校正后的平衡中值,目标转向速度。(以 App 控制小 车前进为例,此时,我们的目标是使得 x_speed=Target_x_speed≠0,而 LQR 控制 器的效果是使得所有的状态变量都变为 0,那么,可以把“x_speed-Target_x_speed” 作为新的状态变量,使它变为0 .

硬件部分
主控芯片采用ST的STM32F103C8T6,72Mhz主频足够小车进行基本运算,同时还有CAN2.0外设接口
小车硬件选择MPU6050作为六轴传感器,用来测量三个轴向的加速度和角速度,代码中还可以根据温度来补偿陀螺仪的YAW轴角度偏移,
电机驱动部分使用TB6612

!(data/attachment/forum/202302/12/172017u2srrnvzk14scnst.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "7.png")

最大输入电压为15V,峰值电流可以达到3.2A,足以满足小车控制,同时带有多种保护功能,是小车驱动的最佳选择。
同时为了主板的简洁性,主板上除了屏幕均采用芯片,

!(data/attachment/forum/202302/12/172130oskocjzww8kpne1j.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "9.jpg")

如图示MPU6050模块的原理图部分

!(data/attachment/forum/202302/12/172142du8268k8n6zm8kk2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "10.png")


降压部分使用LM2596, 实际测试效率不高,纹波较大

!(data/attachment/forum/202302/12/172206f2slfyvap00asf20.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "11.png")

如图示电压测量部分
页: [1]
查看完整版本: 基于STM32F103的平衡车设计