OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

12
返回列表 发新帖
楼主: 培大少

我的自平衡车也完毕了,共享下资料

[复制链接]

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2014-8-20 11:20:09 | 显示全部楼层
正点原子公众号
回复【47楼】ssssssssssss:
---------------------------------
就是把三轴加速度的数据折算成角度 就是普通的三角函数。你不要把它想复杂了,Z,Y的数值相当于两个直角边,比值就是tan。
回复 支持 反对

使用道具 举报

  离线 

25

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-7
在线时间
56 小时
发表于 2014-8-20 16:04:28 | 显示全部楼层
回复【51楼】培大少:
---------------------------------额   你计算的是x轴的偏转角度,还是y?
嗯呢
回复 支持 反对

使用道具 举报

  离线 

25

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-7
在线时间
56 小时
发表于 2014-8-20 16:23:43 | 显示全部楼层
回复【51楼】培大少:
---------------------------------
那你这个就不是算x轴的偏转角度了,根本没x轴什么事情的呀?而你的程序里面A_X=count_acc_angle(acc_y,acc_z);          //计算X角度a   注释说算x轴的偏转角度,但是仔细研究函数怎么却不是呢?
嗯呢
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2014-8-20 21:16:02 | 显示全部楼层
回复【53楼】ssssssssssss:
---------------------------------
是X轴转过的角度,是由Y,Z两根轴得到的。跟X轴的数据没关系
回复 支持 反对

使用道具 举报

  离线 

25

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-7
在线时间
56 小时
发表于 2014-8-20 21:39:32 | 显示全部楼层
回复【54楼】培大少:
---------------------------------
嗯  是滴  如果x轴是车前进的方向,那么根本不存在y》0,y《0;的情况啊?
嗯呢
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2014-8-20 22:15:35 | 显示全部楼层
回复【55楼】ssssssssssss:
---------------------------------
我记不得了。。。你最终把它换算成-90到90之间变化就行了
回复 支持 反对

使用道具 举报

  离线 

25

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-7
在线时间
56 小时
发表于 2014-8-20 22:17:57 | 显示全部楼层
回复【56楼】培大少:
---------------------------------
嗯好的谢谢你的指导嘿嘿帅哥还有个问题是怎么计算速度的?
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
__interrupt void port1(void)
{
  
  if(P1IFG&BIT0==BIT0)
  {  
    P1IFG=0X00; 
    if((P1IN&BIT1)==BIT1)
    i++;
    else
    i--;
  }
}
嗯呢
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2014-8-20 22:26:29 | 显示全部楼层
回复【57楼】ssssssssssss:
---------------------------------
用的是码盘。光电门出来两路脉冲,一路脉冲计数,一路辨别方向
开个外部中断,有计数脉冲到来的时候,判断另一路脉冲是高电平还是低电平,正转就++ 反转就--
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2014-3-22
在线时间
1 小时
发表于 2014-8-21 11:38:40 | 显示全部楼层
回复【2楼】培大少:
---------------------------------
培少,帅呆了!求抱大腿。。。
回复 支持 反对

使用道具 举报

  离线 

25

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-7
在线时间
56 小时
发表于 2014-8-24 21:01:33 | 显示全部楼层
回复【2楼】培大少:
---------------------------------
我移植你的程序 角度什么都测的准,但是经过 滤波balan_angle=blance_filter(balan_angle,A_X,G_X); //????角度会变化很缓慢,比如我现在角度变化到30度,经过滤波的值balan_angle会经过几分钟才能变化到三十度然后稳定,这是为什么呢?你有qq吗  私信给我可以吗?我想请教您一些问题
嗯呢
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2014-8-24 21:51:10 | 显示全部楼层
回复【60楼】ssssssssssss:
---------------------------------
应该是你陀螺仪积分的方向反了。。。把正负颠倒下
回复 支持 反对

使用道具 举报

  离线 

15

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2014-2-17
在线时间
16 小时
发表于 2014-8-26 09:33:06 | 显示全部楼层
回复【2楼】培大少:
---------------------------------
代公司招人,来几个牛逼人,教我做平衡小车,做四轴飞行器,欢迎留言
花自飘零水自流,生命不息,奋斗不止
回复 支持 反对

使用道具 举报

  离线 

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
发表于 2014-8-26 11:53:43 | 显示全部楼层
我的毕业设计也做了一个自平衡小车,能够自动平衡,但是只能平衡小车倾斜角度为-5度到5度的角度,超过了就会倒下,还有一个就是我的小车怎么不能直线运动,只能静止,向左转,向右转,求解?你的小车能够控制的角度为“-45度到45度”吗???
回复 支持 反对

使用道具 举报

  离线 

15

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-31
在线时间
3 小时
发表于 2014-11-1 22:41:29 | 显示全部楼层
路过,膜拜下
总有一天,要为自由而活
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-2 11:07:27 | 显示全部楼层
楼主厉害。。。膜拜。。
回复 支持 反对

使用道具 举报

  离线 

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-9 09:01:54 | 显示全部楼层
妒忌……
为所有员工都能买车买楼而奋斗!
回复 支持 反对

使用道具 举报

  离线 

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-11
在线时间
3 小时
发表于 2014-12-15 11:27:14 | 显示全部楼层
mark....
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-17 22:50:51 | 显示全部楼层
回复【58楼】培大少:
---------------------------------
我想知道电池在哪里买的
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-2 22:35:13 | 显示全部楼层
回复【60楼】ssssssssssss:
---------------------------------
你是怎么测的角度?用什么来显示的?
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
22
金钱
22
注册时间
2015-2-4
在线时间
0 小时
发表于 2015-2-4 16:49:27 | 显示全部楼层
收藏,赞一个~
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2015-2-4 22:53:21 | 显示全部楼层
回复【69楼】扬帆起航:
---------------------------------
MPU6050
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-12 17:56:52 | 显示全部楼层
2个电机速度相差一点能平衡么
回复 支持 反对

使用道具 举报

  离线 

4

主题

111

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2013-7-24
在线时间
9 小时
 楼主| 发表于 2015-2-12 21:50:30 | 显示全部楼层
回复【72楼】扬帆起航:
---------------------------------
可以的
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-17 21:57:21 | 显示全部楼层
回复【73楼】培大少:
---------------------------------
你的码盘是怎么安装的?能不能上传几张图片来看下?
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-17 22:53:36 | 显示全部楼层
小车检测角度什么都对,然后就是小车先倒了,电机才开始转动,那我现在应该调什么?
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-19 11:45:11 | 显示全部楼层
P的值怎么确定
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-11-26
在线时间
0 小时
发表于 2015-2-23 18:49:52 | 显示全部楼层
PWM的值是怎么确定的?我和你一样的电机
回复 支持 反对

使用道具 举报

  离线 

0

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2012-9-17
在线时间
12 小时
发表于 2015-3-22 18:30:03 | 显示全部楼层
感觉很高大上....
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
9
金钱
9
注册时间
2016-3-27
在线时间
0 小时
发表于 2016-3-27 15:01:19 | 显示全部楼层
程序打不开..
回复 支持 反对

使用道具 举报

  离线 

1

主题

6

帖子

0

精华

新手上路

Rank: 1

积分
45
金钱
45
注册时间
2016-3-28
在线时间
7 小时
发表于 2016-3-28 09:47:49 | 显示全部楼层
哈,以后也做一个给小朋友玩
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
30
金钱
30
注册时间
2016-3-29
在线时间
4 小时
发表于 2016-3-29 16:30:22 | 显示全部楼层
楼主大神你的代码是用IAR写的吗?怎么看着像c的?
回复 支持 反对

使用道具 举报

  离线 

9

主题

34

帖子

1

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2016-3-31
在线时间
226 小时
发表于 2016-6-16 21:35:41 | 显示全部楼层
没用编码器?
回复 支持 反对

使用道具 举报

  离线 

18

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
382
金钱
382
注册时间
2014-9-19
在线时间
117 小时
发表于 2016-6-20 17:45:07 | 显示全部楼层
大牛,求抱大腿。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

  离线 

4

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2016-5-25
在线时间
36 小时
发表于 2016-6-21 17:28:20 | 显示全部楼层
牛逼厉害
回复 支持 反对

使用道具 举报

  离线 

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-5-19
在线时间
14 小时
发表于 2016-8-9 18:25:38 | 显示全部楼层
我用printf("%0.2f    %0.2f    %0.2f\r\n",Angle,Angle_ax,Gyro_y);函数分别读取的加速度,角速度和倾角,我发现当我快速的改变板子的倾角的时候,比如快速变化10度,Angle(卡尔曼滤波后的倾角)瞬时变化非常快,可能会瞬间变化几十度然后回到正常角度,而当我缓慢变化10度的时候,Angle变化是正常线性变化到10度,在这两种变化中,Angle_ax(从MPU6050读取的值经过处理后的陀螺仪的Y轴数据)的变化一直都是线性正常的,并且Angle的值特别接近Angle_ax的值
问题:1,我快速改变板子倾角时Angle的变化正常吗?
      2,Angle正常变化的时候是应该与Angle_ax的值相近吗?

现在情况就是,就算我是在减小倾角,只要我快速地改变,它显示的倾角都会先增大再减小,而如果我慢速改变的话,倾角就会缓慢减小而不会出现中间的角度增大


*************读取数据********************
//定义MPU6050内部地址
#define        SMPLRT_DIV                0x19        //陀螺仪采样率 典型值 0X07 125Hz
#define        CONFIG                          0x1A        //低通滤波频率 典型值 0x00
#define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围                 典型值 0x18 不自检 2000deg/s
#define        ACCEL_CONFIG        0x1C        //加速度计自检及测量范围及高通滤波频率 典型值 0x01 不自检 2G 5Hz
#define INT_PIN_CFG     0x37
#define INT_ENABLE      0x38
#define INT_STATUS      0x3A    //只读
#define        ACCEL_XOUT_H        0x3B
#define        ACCEL_XOUT_L        0x3C
#define        ACCEL_YOUT_H        0x3D
#define        ACCEL_YOUT_L        0x3E
#define        ACCEL_ZOUT_H        0x3F
#define        ACCEL_ZOUT_L        0x40
#define        TEMP_OUT_H                0x41
#define        TEMP_OUT_L                0x42
#define        GYRO_XOUT_H    0x43
#define        GYRO_XOUT_L                0x44       
#define        GYRO_YOUT_H        0x45
#define        GYRO_YOUT_L                0x46
#define        GYRO_ZOUT_H        0x47
#define        GYRO_ZOUT_L                0x48

//读取寄存器原生数据
           
        MPU6050_Raw_Data.Accel_X = (buf[0]<<8 | buf[1]);
        MPU6050_Raw_Data.Accel_Y = (buf[2]<<8 | buf[3]);
        MPU6050_Raw_Data.Accel_Z = (buf[4]<<8 | buf[5]);
        MPU6050_Raw_Data.Temp =    (buf[6]<<8 | buf[7]);  
        MPU6050_Raw_Data.Gyro_X = (buf[8]<<8 | buf[9]);
        MPU6050_Raw_Data.Gyro_Y = (buf[10]<<8 | buf[11]);
        MPU6050_Raw_Data.Gyro_Z = (buf[12]<<8 | buf[13]);
      
      
        //将原生数据转换为实际值,计算公式跟寄存器的配置有关
        MPU6050_Real_Data.Accel_X = -(float)(MPU6050_Raw_Data.Accel_X)/8192.0;
        MPU6050_Real_Data.Accel_Y = -(float)(MPU6050_Raw_Data.Accel_Y)/8192.0;
        MPU6050_Real_Data.Accel_Z = (float)(MPU6050_Raw_Data.Accel_Z)/8192.0;
              MPU6050_Real_Data.Gyro_X=-(float)(MPU6050_Raw_Data.Gyro_X - gyroADC_X_offset)/65.5;   
        MPU6050_Real_Data.Gyro_Y=-(float)(MPU6050_Raw_Data.Gyro_Y - gyroADC_Y_offset)/65.5;   
        MPU6050_Real_Data.Gyro_Z=(float)(MPU6050_Raw_Data.Gyro_Z - gyroADC_Z_offset)/65.5;   
    }
   


//******卡尔曼参数************
               
const float Q_angle=0.001;  
const float Q_gyro=0.003;
const float R_angle=0.5;
const float dt=0.01;                          //dt为kalman滤波器采样时间;
const char  C_0 = 1;
float Q_bias, Angle_err;
float PCt_0, PCt_1, E;
float K_0, K_1, t_0, t_1;
float Pdot[4] ={0,0,0,0};
float PP[2][2] = { { 1, 0 },{ 0, 1 } };

/*****************卡尔曼滤波**************************************************/
void Kalman_Filter(float Accel,float Gyro)               
{
        Angle+=(Gyro - Q_bias) * dt; //先验估计
       
        Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; // Pk-先验估计误差协方差的微分

        Pdot[1]= -PP[1][1];
        Pdot[2]= -PP[1][1];
        Pdot[3]=Q_gyro;
       
        PP[0][0] += Pdot[0] * dt;   // Pk-先验估计误差协方差微分的积分
        PP[0][1] += Pdot[1] * dt;   // =先验估计误差协方差
        PP[1][0] += Pdot[2] * dt;
        PP[1][1] += Pdot[3] * dt;
               
        Angle_err = Accel - Angle;        //zk-先验估计
       
        PCt_0 = C_0 * PP[0][0];
        PCt_1 = C_0 * PP[1][0];
       
        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[0][1];

        PP[0][0] -= K_0 * t_0;                 //后验估计误差协方差
        PP[0][1] -= K_0 * t_1;
        PP[1][0] -= K_1 * t_0;
        PP[1][1] -= K_1 * t_1;
               
        Angle        += K_0 * Angle_err;         //后验估计
        Q_bias        += K_1 * Angle_err;         //后验估计
        Gyro_y   = Gyro - Q_bias;         //输出值(后验估计)的微分=角速度

}

******************倾角计算*****************
void Angle_Calculate(void)
{

/****************************加速度****************************************/
       
        Accel_x  =  MPU6050_Real_Data.Accel_X;          //读取X轴加速度
        Angle_ax = Accel_x*1.2*180/3.14;     //弧度转换为度

/****************************角速度****************************************/
       
         Gyro_y = MPU6050_Real_Data.Gyro_Y;             
时间dt,所以此处不用积分
/***************************卡尔曼融合*************************************/
        Kalman_Filter(Angle_ax,Gyro_y);       //卡尔曼滤波计算倾角
       

回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2017-3-23
在线时间
30 小时
发表于 2017-3-28 18:24:22 | 显示全部楼层
楼主好厉害 谢楼主~
回复 支持 反对

使用道具 举报

  离线 

0

主题

26

帖子

0

精华

新手上路

Rank: 1

积分
35
金钱
35
注册时间
2017-4-6
在线时间
0 小时
发表于 2017-4-7 08:47:42 | 显示全部楼层
学习一下!!!!!
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
10
金钱
10
注册时间
2017-5-11
在线时间
1 小时
发表于 2017-5-11 10:35:10 | 显示全部楼层
想问问编码器楼主是怎么鉴相的
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
2
金钱
2
注册时间
2017-7-11
在线时间
0 小时
发表于 2017-7-11 15:06:03 | 显示全部楼层
你好,那个l298n怎么接的呢,我接了in1~4不管用
回复 支持 反对

使用道具 举报

  离线 

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-10
在线时间
12 小时
发表于 2017-7-27 17:06:47 | 显示全部楼层
mark字数不够
回复 支持 反对

使用道具 举报

  离线 

3

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2017-7-29
在线时间
18 小时
发表于 2017-7-29 15:44:53 | 显示全部楼层
强,学习了, 不错
回复 支持 反对

使用道具 举报

  离线 

3

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1440
金钱
1440
注册时间
2016-9-22
在线时间
29 小时
发表于 2017-10-28 22:06:58 | 显示全部楼层
正好最近在学平衡小车
回复 支持 反对

使用道具 举报

  在线 

6

主题

175

帖子

0

精华

高级会员

Rank: 4

积分
666
金钱
666
注册时间
2015-5-8
在线时间
116 小时
发表于 7 天前 | 显示全部楼层
坐等视频
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-21 16:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */