自己做的自平衡小车,基本达到预期效果。制作资料在压缩包里面,供参考。
该两轮自平衡小车硬件设计概述:
控制器:ATmega16;8MHz;
加速度传感器:MMA2260;陀螺仪:EWTS82;
传感器的融合:卡尔曼滤波;
马达:EN_2342CR(速比64)+双路12脉冲编码器+CD40106对信号整形;
驱动板芯片:CD4001+IR2111+IRF1404(驱动电流可以很大);
图片(拍摄效果不佳),视频如下:
小车实物图展示:
设计分析:
其实控制很简单,利用定时器产生10ms中断,每次中断进行如下工作:
1:AD采样加速度传感器和陀螺仪,然后卡尔曼滤波得出角度与角速度;(滤波模块借鉴老外的)(互补滤波效果感觉不是很好);
2:计算车轮的速度,积分得出位置;
3:利用PD算法得出PWM值=K1*angle + K2*angle_dot + K3*speed + K4 * position;
4:前进后退给定参考速度计算即可;
注意:
增量式轮速传感器A相中断,读取B相电位判断前进还是后退,在10ms的时间内累加,计算车轮的速度;
由于10ms累加的轮速信号不多,直接计算车体会发抖,所以增加了低通滤波,解决问题;
我在外面增加4个电位器可以手动调节4个K值,方便调试;
附件的文件夹里面有matlab建模的资料,可以求出所需的4个K的值,(参考NXT的),大家可自行调试K值看看对车辆的影响;
电机选取建议:
由于考虑到减速器,而且带传感器。其实后面实践得知可以不要位置传感器,这样选择电机的空间就很大了,买便宜的;
电机扭矩要大;说白了,功率要大;转动惯量大似乎的更稳定,所以不用空心杯的也许更好;
减速比可以大一点,用较大的轮子;
重心越靠下,抗扰性越强;但是可能会影响稳定性;
购买的电机型号参考:
算法:
常用计算方法有两种:互补滤波和卡尔曼滤波;都可以输出校正后的角度与角速度;我采用的是卡尔曼滤波,考虑到单片机的运算能力,是经过精简的,当然这些都是老外做的,关于卡尔曼滤波,我找了很多资料,详见附件内容。
1