控制器:ATmega16;8MHz;
加速度传感器:MMA2260;陀螺仪:EWTS82;
传感器的融合:卡尔曼滤波;
马达:EN_2342CR(速比64)+双路12脉冲编码器+CD40106对信号整形;
驱动板芯片:CD4001+IR2111+IRF1404(驱动电流可以很大);
注意事项:
1:IR2111的PWM不能到100%,否则不能充电;
2:由于轮速编码器精度不是很高,取得的信号要滤波,不然增强速度控制会发抖,不易控制;
建模、控制算法及PD调节的取值参考:
视频 :
http://v.youku.com/v_show/id_XMTgxNTAxOTA4.html
http://v.youku.com/v_show/id_XMTgxNTAzMTI4.html
其实控制很简单,利用定时器产生10ms中断,每次中断进行如下工作:
1:AD采样加速度传感器和陀螺仪,然后卡尔曼滤波得出角度与角速度;(滤波模块借鉴老外的)(互补滤波效果感觉不是很好);
2:计算车轮的速度,积分得出位置;
3:利用PD算法得出PWM值=K1*angle + K2*angle_dot + K3*speed + K4 * position;
4:前进后退给定参考速度计算即可;
注:
1:增量式轮速传感器A相中断,读取B相电位判断前进还是后退,在10ms的时间内累加,计算车轮的速度;
2:由于10ms累加的轮速信号不多,直接计算车体会发抖,所以增加了低通滤波,解决问题;
3:我在外面增加4个电位器可以手动调节4个K值,方便调试;
以上;
程序: 平衡小车.rar(1.44 MB, 下载次数: 460)
评分
你好,你的那句“3:利用PD算法得出PWM值=K1*angle + K2*angle_dot + K3*speed + K4 * position;”,这句话中的这个PID公式是直接针对两个电机的,还是只针对一个电机,然后两个电机分别有这个公式,并且每个电机的PID三个参数是不一样的?