c语言的实现
P用于提高相应速度,I用于减小静差,D用中桥于抑制震荡
速度闭环控制是根据单位时间获取的脉冲数测量电机速度信息,对目标值进行比较
理论分析
直立环使用PD控制
在调试直立环,要在定时器中断服务函数屏蔽速度换和转向环
首先估计kp的取值范围,陪我们设置7200代表占空比百分百
设定kp值为7200,那么小车在10°就会满转
确定参数的镇培含御笑原则是:kp一直增加,出现大幅度低频抖动
kd一直增加,直至出现高频抖动
确定了pd的最大数,×0.6就是需要的参数
我们对速度进行低通滤波
一般可以把ki的值设置为kp/200
kp最大值=7200/(160*50%)
mpu6050内带三轴陀螺仪和三轴加速度传感器,自带数字腔唯运动处理器dmp硬件加速引擎,非常方便实现姿态解算,降低运动处理器对 *** 作系统的负荷伍简培 集成可程序控制加速度传感器,角速度传感器,自带温度传感器,支持输出中断INT中断输出,AD0设置地址AD0=0 地址=0X68 AD0=1 地址0X69,SCL/SDA IIC接口
1.初始化IIC
2.复位mpu6050,由电源管理寄存器0X6B控制
3.设置角速度加速度满量程范围
4.设置其他参数
5.设置系统时钟
6.使能
DEVICE_RESET=1复位
SLEEP=0正常工作模式
TEMP_DIS用于设置是否使能温度传感器,设置为0,则使能CLKSEL[2:0]用于选择系统时钟
陀螺仪配置寄存器0X1B
FS_SEL[1:0]用于设置满量程范围
加速度配置寄存器0X1C
AFS_SEL[1:0]用于设置满量程范围
FIFO使能寄存器0X23
在简咐渣单读取传感器数据,可以不用FIFO,设置为0
采样率分频寄存器0X19
采样频率=陀螺仪输出频率/(1+SMPLRT_DIV)
一般设置为采样率的一半
配置寄存器0X1A
看数字低通滤波器设置位
加速度输出寄存器0x3B-0X40
陀螺仪输出 0X43-0X48
温度传感器数据输出0X41-0X42高8位低8位,通过温度换算
欧拉角yaw航向角 roll横滚角 pitch俯仰角
dmp输出的是四元数,采用q30格式,q30是一个常量
上位机
匿名四轴上位机
重要的加点为:A、我们小车要模型实质上单摆倒立模型,要平衡必须要有指向平衡点的回复力,平衡车同样需要,只不过这个里需要小车的电机加速来维持平衡;
B、要平衡,小车的模型与电机的转速转矩和轮子的大小有关系,要么轮子大些,要么电机转速快些,同时,姿态传感器最好放在小车的质心处;
C、具体细节而言,小车的电机运动过程分为加枝伏速过程和平衡过程,小车平衡必须在加速阶段完成;首先需要进行姿态检测,了解姿态信息,然后通过PD调接来控制电机的转速来猛裂携维持平衡;
(2)、姿态检测是很重要的一环,需要加速度计(比较滞后)和陀螺仪(零点漂移)来完成,上述参考资料里面一种融合方案,当然还有卡尔曼滤波方案,互补滤源厅波方案,三种,也许还有其他的。由于加速度计和陀螺仪各有缺点,所以需要进行数据融合,我选择的是互补滤波,也许大多数都选择这个方案,能够满足平衡要求并且消耗时间较少;匠人手记一书中,有介绍一阶滤波器的深入研究,可以参考学习下;
(3)、调试阶段,首先必须坚持的陀螺仪零点偏移,以及加速度计的零点偏角;
其次,融合后的波形需要,观察防止过冲以及过于滞后;
再其次,电机运行时,要测试出每个轮子的死区;
最后,在调整参数时,要先调整P参数,当感觉轮子来回摆动时,可适当增加微分D进行微调,P大电机来回摆动厉害,D过大小车会震动。
第一步完成,站起来了!!但是不能平衡。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)