功能配置
编码器
编码器作为一个读取电机的位移的传感器,对应的引脚GPIO要设置成浮空输入。
通过STM32的定时器输入捕获,实现数据的读取
1.编码器读取电机速度的原理,通过编写的Read_Speed函数,单位周期内读取的位移值即为该时刻的速度,即每次读取完赋给另一个变量之后,需要将定时器捕获的值清零
2.编码器级数的原理以及程序配置的流程:①时钟配置,GPIO和定时器的时钟②GPIO引脚配置,设置为输入模式③定时器的时基单元,不分频④配置输入捕获单元(滤波器和极性)
后两个参数是极性选择,上升沿表示不反相,下降沿表示反向。
通过(上升沿,下降沿),(高电平,低电平)两组的状态组合进行区分正转还是反转。
TB6612驱动
驱动原理和L298N类似,两个电机,每个电机各有两个方向引脚如:1,0正转;0,1反转;这样。一共四个AIN1.AIN2;BIN1,BIN2。(PB12,13,14,15)方向确定之后,将PID调整过的一个脉冲值,使用定时器的PWM输出比较功能,在程序中是使用定时器一的通道一和通道四(PA8,11),输出相应的脉冲
平衡车PID算法
1.KP就让偏差(目标减去当前)与调节装置的“调节力度”,建立一个一次函数的关系,kP越大,调节作用越激进,kP调小会让调节作用更保守。
2.KD控制作用,让被控制的物理量的“变化速度”趋于0,即类似于“阻尼”的作用。kD参数越大,向速度相反方向刹车的力道就越强。
3.对于下面这种情况:天气太冷,水散热的速度,和P控制的加热的速度相等了。需要引入KI积分调节。
P兄这样想:我和目标已经很近了,只需要轻轻加热就可以了。
D兄这样想:加热和散热相等,温度没有波动,我好像不用调整什么。作为一个人,根据常识,我们知道,应该进一步增加加热的功率。可是增加多少该如何计算呢?设置一个积分量。只要偏差存在,就不断地对偏差进行积分(累加),并反应在调节力度上。
I的作用就是,减小静态情况下的误差,让受控物理量尽可能接近目标值
速度环PI控制
速度环输入:1.给定速度2.速度反馈
输出:角度值(直立环的期望角度)
选择PI的原因:由于电机的死区或者是滑动,电机的振动,需要减小静差。正反馈
直立环PD控制
直立环输入:1.给定角度2.角度反馈
输出:PWM(直接控制小车)
控制量:角度
比例:提高响应速度,减小静差。
积分项:消除稳态误差。
微分项:减小震荡以及超调。