有没有用C8051F单片机做双轮平衡小车的????
最近在论坛上看了大家做的小车很感兴趣,于是决定自己也做一个,买了MPU6050,蓝牙串口,NRF24L01。用的是C8051F021单片机,现在程序基本调试完毕,板子也画完了,过年期间空闲了全在搞这个了!现在就等快递上班把元器件和板子做了。电机准备用2342L012那种带编码器的电机。现在先把电路和PCB分享一下,用的protel99se画的,希望大家多多指教。QQ445353987 我用的c8051f310做的 chenjiawei7 发表于 2013-2-27 20:56 static/image/common/back.gif我用的c8051f310做的
你的小车怎么样了?,我的现在抖动的厉害。一会就向一边跑然后就倒了 以前的那个电机不好,效果不太好,现在买了空心杯的,还没弄呢,你用什么滤波? chenjiawei7 发表于 2013-2-28 06:50以前的那个电机不好,效果不太好,现在买了空心杯的,还没弄呢,你用什么滤波? ...
卡尔曼,我用的淘宝上2342L02那种电机 你用C8051F跑卡尔曼滤波?楼上你亮了。 tiancaigao7 发表于 2013-2-28 07:56 static/image/common/back.gif
你用C8051F跑卡尔曼滤波?楼上你亮了。
什么意思啊? 不知道你的卡尔曼滤波器怎么设计,另外你的控制频率有多快。卡尔曼滤波器计算量很大。 tiancaigao7 发表于 2013-2-28 09:55 static/image/common/back.gif
不知道你的卡尔曼滤波器怎么设计,另外你的控制频率有多快。卡尔曼滤波器计算量很大。 ...
我用的C8051F021频率22.1184MHz,10ms定时检测,角度加卡尔曼程序运行一共需要1.5ms左右。程序用的论坛上小米蓝牙那个哥们的改的 卡尔曼变量太多,必须用XRAM才行 chenjiawei7 发表于 2013-2-28 13:22 static/image/common/back.gif
卡尔曼变量太多,必须用XRAM才行
你的小车站起来没有啊? c8051f310功耗太大,不适合做产品 bfk2003 发表于 2013-2-28 15:48
你的小车站起来没有啊?
能站一会,很不稳定。我的驱动也有问题,自己画了个MOS的驱动,板子出来了还没来得及弄。准备移植到stm32上 chenjiawei7 发表于 2013-2-28 19:20 static/image/common/back.gif
能站一会,很不稳定。我的驱动也有问题,自己画了个MOS的驱动,板子出来了还没来得及弄。准备移植到stm32 ...
我的也是只能站一会儿就一边跑着倒掉! bfk2003 发表于 2013-2-28 19:59 static/image/common/back.gif
我的也是只能站一会儿就一边跑着倒掉!
你用什么的驱动?你可以看看PWM的输出波形 和在小角度的时候电机两端的电压 chenjiawei7 发表于 2013-2-28 20:49 static/image/common/back.gif
你用什么的驱动?你可以看看PWM的输出波形 和在小角度的时候电机两端的电压 ...
我用的互补滤波 卡尔曼我的不知道怎么跑步起来一直死机 chenjiawei7 发表于 2013-2-28 20:51 static/image/common/back.gif
我用的互补滤波 卡尔曼我的不知道怎么跑步起来一直死机
我用卡尔曼滤波,用示波器看了用了1.56ms.现在小车站起来了,就是力量不够。 bfk2003 发表于 2013-3-2 20:45 static/image/common/back.gif
我用卡尔曼滤波,用示波器看了用了1.56ms.现在小车站起来了,就是力量不够。 ...
那发我一份看看呗你用XDATA没有? chenjiawei7 发表于 2013-3-2 22:09 static/image/common/back.gif
那发我一份看看呗你用XDATA没有?
用了的,
//******角度参数************
float Gyro_y; //Y轴陀螺仪数据暂存
float Angle_gy; //由角速度计算的倾斜角度
float Accel_x; //X轴加速度值暂存
float Angle_ax; //由加速度计算的倾斜角度
float Angle; //小车最终倾斜角度
//uchar value; //角度正负极性标记
//******PWM参数*************
int speed_mr; //右电机转速
int speed_ml; //左电机转速
int PWM_R; //右轮PWM值计算
int PWM_L; //左轮PWM值计算
float PWM; //综合PWM计算
float PWMI; //PWM积分值
//******电机参数*************
float speed_r_l; //电机转速
float speed; //电机转速滤波
float position; //位移
//******蓝牙遥控参数*************
uchar remote_char; //蓝牙串口接收到的数据
charturn_need;
charspeed_need;
//******卡尔曼参数************
float code Q_angle=0.001;
float code Q_gyro=0.003;
float code R_angle=0.5;
float code dt=0.01; //dt为kalman滤波器采样时间;
charcode C_0 = 1;
float xdata Q_bias, Angle_err;
float xdata PCt_0, PCt_1, E;
float xdata K_0, K_1, t_0, t_1;
float xdata Pdot ={0,0,0,0};
float xdata PP = { { 1, 0 },{ 0, 1 } };
//*********************************************************
// 卡尔曼滤波
//*********************************************************
//Kalman滤波22.1184MHz处理时间560us
void Kalman_Filter(float Accel,float Gyro)
{
Angle+=(Gyro - Q_bias) * dt; //先验估计
Pdot=Q_angle - PP - PP; // Pk-先验估计误差协方差的微分
Pdot=- PP;
Pdot=- PP;
Pdot=Q_gyro;
PP += Pdot * dt; // Pk-先验估计误差协方差微分的积分
PP += Pdot * dt; // =先验估计误差协方差
PP += Pdot * dt;
PP += Pdot * dt;
Angle_err = Accel - Angle; //zk-先验估计
PCt_0 = C_0 * PP;
PCt_1 = C_0 * PP;
E = R_angle + C_0 * PCt_0;
K_0 = PCt_0 / E;
K_1 = PCt_1 / E;
t_0 = PCt_0;
t_1 = C_0 * PP;
PP -= K_0 * t_0; //后验估计误差协方差
PP -= K_0 * t_1;
PP -= K_1 * t_0;
PP -= K_1 * t_1;
Angle += K_0 * Angle_err; //后验估计
Q_bias += K_1 * Angle_err; //后验估计
Gyro_y = Gyro - Q_bias; //输出值(后验估计)的微分=角速度
}
//*********************************************************
// 倾角计算(卡尔曼融合)
//*********************************************************
void Angle_Calcu(void)
{
//------加速度--------------------------
//范围为2g时,换算关系:16384 LSB/g
//角度较小时,x=sinx得到角度(弧度), deg = rad*180/3.14
//因为x>=sinx,故乘以1.3适当放大
Accel_x= GetData(ACCEL_XOUT_H); //读取X轴加速度
Angle_ax = (Accel_x - 1100) /16384; //去除零点偏移,计算得到角度(弧度)
Angle_ax = Angle_ax*1.2*180/3.14; //弧度转换为度,
//-------角速度-------------------------
//范围为2000deg/s时,换算关系:16.4 LSB/(deg/s)
Gyro_y = GetData(GYRO_YOUT_H); //静止时角速度Y轴输出为-30左右
Gyro_y = -(Gyro_y + 30)/16.4; //去除零点偏移,计算角速度值,负号为方向处理
//Angle_gy = Angle_gy + Gyro_y*0.01;//角速度积分得到倾斜角度.
//-------卡尔曼滤波融合-----------------------
Kalman_Filter(Angle_ax,Gyro_y); //卡尔曼滤波计算倾角
//*************数据转换**************
//
// Pa=(unsigned char*)&Angle;//
// Tx0Buf=*Pa; //高位
// Tx0Buf=*(Pa+1); //
// Tx0Buf=*(Pa+2); //
// Tx0Buf=*(Pa+3); //
/*//-------互补滤波-----------------------
//补偿原理是取当前倾角和加速度获得倾角差值进行放大,然后与
//陀螺仪角速度叠加后再积分,从而使倾角最跟踪为加速度获得的角度
//0.5为放大倍数,可调节补偿度;0.01为系统周期10ms
Angle = Angle + (((Angle_ax-Angle)*0.5 + Gyro_y)*0.01);*/
} http://v.youku.com/v_show/id_XNTIxNjcwMTQ0.html小车站起来了,但是感觉没劲。用力点推会倒掉。中间死机是应为电源模块没有焊接,只是插着。 你用什么的驱动? tiancaigao7 发表于 2013-2-28 07:56 static/image/common/back.gif
你用C8051F跑卡尔曼滤波?楼上你亮了。
也不要太小看C8051f了 bfk2003 发表于 2013-3-3 15:15 static/image/common/back.gif
小车站起来了,但是感觉没劲。用力点推会倒掉。中间死机是应为电源模块没有焊接,只是插着。 ...
怎么还有风扇?驱动散热? chenjiawei7 发表于 2013-3-3 20:20怎么还有风扇?驱动散热?
L298驱动散热 298很热吗,我也买了两个冯哈伯的电机还没开始弄,我画了个MOS的驱动,板子打出来了还没焊接 chenjiawei7 发表于 2013-3-3 20:44 static/image/common/back.gif
298很热吗,我也买了两个冯哈伯的电机还没开始弄,我画了个MOS的驱动,板子打出来了还没焊接 ...
不加散热一会儿就热了。 bfk2003 发表于 2013-3-4 19:22 static/image/common/back.gif
不加散热一会儿就热了。
嗯 298的压降大 chenjiawei7 发表于 2013-3-4 19:28 static/image/common/back.gif
嗯 298的压降大
压降有多大啊?有没有压降小的H桥? bfk2003 发表于 2013-3-4 19:37 static/image/common/back.gif
压降有多大啊?有没有压降小的H桥?
具体手册上应该有,你可以自己用MOS搭一个桥,也有全桥芯片的 ,飞思卡尔好像有 chenjiawei7 发表于 2013-3-4 19:46 static/image/common/back.gif
具体手册上应该有,你可以自己用MOS搭一个桥,也有全桥芯片的 ,飞思卡尔好像有 ...
哦,当时没考虑那么多,只是觉得集成的简单点 chenjiawei7 发表于 2013-3-4 19:46 static/image/common/back.gif
具体手册上应该有,你可以自己用MOS搭一个桥,也有全桥芯片的 ,飞思卡尔好像有 ...
你用分离元件做的驱动板还是整块带控制的板子? bfk2003 发表于 2013-3-4 19:58
你用分离元件做的驱动板还是整块带控制的板子?
做了个驱动模块,用MOS管 bfk2003 发表于 2013-3-4 19:58
你用分离元件做的驱动板还是整块带控制的板子?
做了个驱动模块,用MOS管 chenjiawei7 发表于 2013-3-5 14:35 static/image/common/back.gif
做了个驱动模块,用MOS管
哦,赶快做吧,做好了我们交流交流。
页:
[1]