野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 李小龙

【该帖被火哥确定为精华帖】更新平衡小车制作,2016-10-26

[复制链接]
 楼主| 发表于 2016-9-19 16:30:27 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-19 16:39 编辑

不打算用mpu6050自带的DMP,准备用卡尔曼滤波和四元数算法去获得姿态角。主要是来学习的,不想用dmp. 刚刚把上位机协议搞好了,现在上传的是原始数据,接下来在搞卡尔曼滤波。有了蓝牙上传姿态数据给电脑上位机,真是爽歪歪呀。没有了数据线的束缚就是不一样。。上位机用的是匿名的,功能很强大,足以满足我们的需求了。

匿名上位机百度云链接: http://pan.baidu.com/s/1kVlTvcN
8B5ADDC88ADC1849D7D8440748979BB4.jpg
AA051E903A687334405AE22DF6EBB669.jpg
D3277C6212BD7CE38985AD58676FABFF.jpg
QQ截图20160919155819.png

Balance_code_原始数据_上位机显示.zip

370.6 KB, 下载次数: 343

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 17:22:53 | 显示全部楼层
在写协议时,又遇到了一个老问题,       
for(u8 i=0;i<cnt;i++)
          sum += data_to_send;
在for表达式中定义u8 i ,编译时总出现错误,说i 未定义。
没办法,每次遇到这种情况,就把 i 在for外面定义。这样就没问题。
这种写法在c中是对的,不知道是不是keil的bug. 火哥,知道怎么回事吗?@fire
回复 支持 反对

使用道具 举报

发表于 2016-9-19 18:32:09 | 显示全部楼层
李小龙 发表于 2016-9-19 17:22
在写协议时,又遇到了一个老问题,       
for(u8 i=0;i

把C99模式选上,C89模式不支持这样定义变量。
1.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 22:11:05 | 显示全部楼层
fire 发表于 2016-9-19 18:32
把C99模式选上,C89模式不支持这样定义变量。

谢谢火哥,可以了。
回复 支持 反对

使用道具 举报

发表于 2016-9-20 13:38:07 | 显示全部楼层
本帖最后由 东来东往 于 2016-9-20 14:41 编辑

你好,我的MPU6050一直调试不通,我直接把你的Balance_code_姿态角OLED显示.zip程序,下载到我这里面,还是不行,一直提示“MPU6050 Error”,我现在怀疑我的6050坏了,下面是我的程序,请你下载到你硬件里,验证一下,谢谢。有可能硬件坏了,折腾了好久,一直不成功。
OpenSourceBalanceCar - DMP.rar (1.05 MB, 下载次数: 39)
在此先谢谢了。


问题已解决,是MPU6050有的引脚虚焊了,重新焊接了一遍,就好了,不过还是谢谢了,参考了你的程序计算出了欧拉角
回复 支持 反对

使用道具 举报

发表于 2016-9-20 17:28:48 | 显示全部楼层
东来东往 发表于 2016-9-20 13:38
你好,我的MPU6050一直调试不通,我直接把你的Balance_code_姿态角OLED显示.zip程序,下载到我这里面,还是 ...

你们要多多交流。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-20 18:54:54 | 显示全部楼层
东来东往 发表于 2016-9-20 13:38
你好,我的MPU6050一直调试不通,我直接把你的Balance_code_姿态角OLED显示.zip程序,下载到我这里面,还是 ...

不好意思,上课,没看到。
回复 支持 反对

使用道具 举报

发表于 2016-9-21 23:44:54 | 显示全部楼层
好帖学习了
回复 支持 反对

使用道具 举报

发表于 2016-9-22 14:26:25 | 显示全部楼层
OLED用硬件I2C死在这里 while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
回复 支持 反对

使用道具 举报

发表于 2016-9-22 17:12:01 | 显示全部楼层
李小龙 发表于 2016-9-13 18:24
这个写的有点绕,我后面又改了,更简单的了。你用的这个,我是把整数和小数分离了,小数部分乘以1000000 ...

请问这个公式哪里来的?Volt=((float)Volt*(3.3/4096)*115.0/15.0)*100;//Volt是整型
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 18:30:26 | 显示全部楼层
空大大 发表于 2016-9-22 17:12
请问这个公式哪里来的?Volt=((float)Volt*(3.3/4096)*115.0/15.0)*100;//Volt是整型

是根据原理图自己写的
回复 支持 反对

使用道具 举报

发表于 2016-9-22 18:36:42 | 显示全部楼层
李小龙 发表于 2016-9-22 18:30
是根据原理图自己写的

教下为什么这么写啊??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 20:16:05 | 显示全部楼层
空大大 发表于 2016-9-22 18:36
教下为什么这么写啊??

0v-3.3v对应的数字量为0-4096(因为芯片ADC是12位的),AD采集的是数字量volt(范围在0-4096),所以要把采集的电压数字量转换成模拟量(即Volt*(3.3/4096)),再根据原理图中电阻分压原理得到Volt*(3.3/4096)*115.0/15.0,后面的100是我把结果放大了100 倍。就这样。
回复 支持 反对

使用道具 举报

发表于 2016-9-22 22:11:29 | 显示全部楼层
李小龙 发表于 2016-9-22 20:16
0v-3.3v对应的数字量为0-4096(因为芯片ADC是12位的),AD采集的是数字量volt(范围在0-4096),所以要把 ...

我明白了,没接电池是2.几V吧,我想确认下我的采集是否正确
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 22:50:55 | 显示全部楼层
空大大 发表于 2016-9-22 22:11
我明白了,没接电池是2.几V吧,我想确认下我的采集是否正确

没接电池,数据是无效的。不用管
回复 支持 反对

使用道具 举报

发表于 2016-9-23 09:48:08 | 显示全部楼层
李小龙 发表于 2016-9-22 22:50
没接电池,数据是无效的。不用管

是啊,没接电池显示的电压采集电路和接电池的采集电路不一样的。
回复 支持 反对

使用道具 举报

发表于 2016-9-24 11:29:07 | 显示全部楼层
李小龙 发表于 2016-9-10 13:11
试了试自带的程序,上电后,按了K3, 车子一直向一边加速。应该是pid没调好。板子应该没问题。

我当时也是上电按下K3车子一直往前冲,后来把电机的两个5P的排线互换接插,结果平衡了
回复 支持 反对

使用道具 举报

发表于 2016-9-24 11:37:44 | 显示全部楼层
李小龙 发表于 2016-9-19 16:30
不打算用mpu6050自带的DMP,准备用卡尔曼滤波和四元数算法去获得姿态角。主要是来学习的,不想用dmp. 刚刚 ...

你还没有搞蓝牙啊,我也想通过蓝牙,把MPU6050的数据丢到串口上面去,但是调试不来,你怎么搞的啊,我看你的代码里面没有蓝牙的内容
回复 支持 反对

使用道具 举报

发表于 2016-9-24 12:01:41 | 显示全部楼层
蓝牙连电脑usb口,用的是哪个模块?,,ch340吗?
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:16:02 | 显示全部楼层
之前程序被擦除了,我想问下单个hex怎样下载到板子里?论坛有相关帖子吗?
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:56:45 | 显示全部楼层
named 发表于 2016-9-24 14:16
之前程序被擦除了,我想问下单个hex怎样下载到板子里?论坛有相关帖子吗?

用MCUISP这个串口烧写软件
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:57:04 | 显示全部楼层
雪花微风 发表于 2016-9-24 12:01
蓝牙连电脑usb口,用的是哪个模块?,,ch340吗?

是的
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:57:38 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-24 11:29
我当时也是上电按下K3车子一直往前冲,后来把电机的两个5P的排线互换接插,结果平衡了

先放在地上,再按KEY3
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:57:50 | 显示全部楼层
666666666666666666
回复 支持 反对

使用道具 举报

发表于 2016-9-24 14:58:07 | 显示全部楼层
进度很快,不错,支持
回复 支持 反对

使用道具 举报

发表于 2016-9-24 15:16:11 | 显示全部楼层
开拖拉机的孩子 发表于 2016-9-24 14:56
用MCUISP这个串口烧写软件

火哥发的平衡车的板子可以串口下载?
回复 支持 反对

使用道具 举报

发表于 2016-9-25 11:30:06 | 显示全部楼层
李小龙 发表于 2016-9-17 15:55
姿态角输出,用的是mpu6050自带的DMP.
  1. u8 MPU_Init(void)
  2. {
  3.         u8 res;
  4.   GPIO_InitTypeDef  GPIO_InitStructure;
  5.        
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ê1&#196;üAFIOê±&#214;ó
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//&#207;èê1&#196;üíaéèIO PORTAê±&#214;ó
  8.        
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;         // &#182;&#203;&#191;ú&#197;&#228;&#214;&#195;
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //í&#198;íìê&#228;3&#246;
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO&#191;ú&#203;ù&#182;è&#206;a50MHz
  12.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //&#184;ù&#190;Yéè&#182;¨2&#206;êy3&#245;ê&#188;&#187;ˉGPIOA

  13.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//&#189;&#251;&#214;1JTAG,′ó&#182;&#248;PA15&#191;éò&#212;×&#246;&#198;&#213;í¨IOê1ó&#195;,·&#241;&#212;òPA152&#187;&#196;ü×&#246;&#198;&#213;í¨IO!!!
复制代码



这个脚不是PD2吗,楼主怎么写PA15,而且我移植楼主程序居然可以用,咋回事??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-25 13:17:00 | 显示全部楼层
雪花微风 发表于 2016-9-24 12:01
蓝牙连电脑usb口,用的是哪个模块?,,ch340吗?

是的





回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-25 13:20:26 | 显示全部楼层
空大大 发表于 2016-9-25 11:30
这个脚不是PD2吗,楼主怎么写PA15,而且我移植楼主程序居然可以用,咋回事??

这个不是mpu6050引脚初始化,可以去掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-25 13:22:00 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-24 11:37
你还没有搞蓝牙啊,我也想通过蓝牙,把MPU6050的数据丢到串口上面去,但是调试不来,你怎么搞的啊,我看 ...

蓝牙就是串口通信呀,写串口通信程序就行了
回复 支持 反对

使用道具 举报

发表于 2016-9-25 13:28:54 | 显示全部楼层
李小龙 发表于 2016-9-25 13:20
这个不是mpu6050引脚初始化,可以去掉。

我看了下,应该是中断引脚,其实好像没用到这个。你觉得呢?
回复 支持 反对

使用道具 举报

发表于 2016-9-25 18:40:52 | 显示全部楼层
李小龙 发表于 2016-9-17 15:55
姿态角输出,用的是mpu6050自带的DMP.

这个程序你怎么知道调用那几个DMP文件的???
回复 支持 反对

使用道具 举报

发表于 2016-9-25 21:27:03 | 显示全部楼层
代码有没有上传到SVN什么的啊,这样方便一点啊
回复 支持 反对

使用道具 举报

发表于 2016-9-28 21:58:42 | 显示全部楼层
蓝牙驱动怎么搞的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-10 10:40:17 | 显示全部楼层
最近有事(帮同学做东西参加比赛)耽误了,现在没什么事了,会天天来论坛的。现在在弄卡尔曼滤波
回复 支持 反对

使用道具 举报

发表于 2016-10-12 16:11:19 | 显示全部楼层
李小龙 发表于 2016-10-10 10:40
最近有事(帮同学做东西参加比赛)耽误了,现在没什么事了,会天天来论坛的。现在在弄卡尔曼滤波

等你好消息
回复 支持 反对

使用道具 举报

发表于 2016-10-12 17:37:33 | 显示全部楼层
李小龙 发表于 2016-9-11 11:09
昨晚想把小车蓝牙与我的主从一体蓝牙模块串口通信,为了正常连接,我还把小车上面的蓝牙取下来,进行了AT指 ...

这插曲也是666
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-16 00:03:54 | 显示全部楼层
本帖最后由 李小龙 于 2016-10-22 10:04 编辑

我取了10000组数据导入excel,取平均值。对原始数据进行了偏差矫正。然后用了卡尔曼滤波算法。测试了下,滤波效果还行,能滤掉大部分杂波,但跟随性差。目前参数还没调好,动态响应有点延迟,还需要调参。
图中粉红的曲线是滤波后的线。
QQ截图20161015234558.png
QQ截图20161015234744.png
QQ截图20161015234841.png

Balance_code_数据矫正偏差_卡尔曼滤波.zip

376.81 KB, 下载次数: 72

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-19 18:00:24 | 显示全部楼层
本帖最后由 李小龙 于 2016-10-22 15:18 编辑

卡尔曼滤波后的角度显示,参数基本调好,并非最佳。

Balance_code_2另一个卡尔曼滤波--Y轴角度.zip

383.06 KB, 下载次数: 75

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 22:35:41 | 显示全部楼层
用定时器测试了下编码器,用蓝牙串口上传数据,正常。
QQ截图20161020223110.png

Balance_code__编码器_卡尔曼--角度.zip

392.35 KB, 下载次数: 101

回复 支持 反对

使用道具 举报

发表于 2016-10-26 14:20:43 | 显示全部楼层
漂亮                          
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-26 16:40:38 | 显示全部楼层
本帖最后由 李小龙 于 2016-10-26 16:48 编辑

最佳的卡尔曼滤波图形给大家看看,做做参考。只要能达到我这个效果,基本上完美了。这个得自己慢慢调参数。还有一段滤波程序。

最近一些课要结课考试了,之前太浪了,得靠考前突击了。最近学校又搞什么 挑战杯比赛,还面试进了一家公司在学校开的培训班。事太多,想静下心学下,都要顾及许多事。

不过,要做的事情,还是会一直会坚持下去的。


QQ截图20161023162343.png
QQ截图20161023195956.png
QQ截图20161023200315.png

滤波子程序.zip

3.3 KB, 下载次数: 112

回复 支持 反对

使用道具 举报

发表于 2016-10-27 15:19:52 | 显示全部楼层
李小龙 发表于 2016-10-26 16:40
最佳的卡尔曼滤波图形给大家看看,做做参考。只要能达到我这个效果,基本上完美了。这个得自己慢慢调参数。 ...

完美的波形啊,加油。
回复 支持 反对

使用道具 举报

发表于 2016-10-27 15:20:20 | 显示全部楼层
李小龙 发表于 2016-10-26 16:40
最佳的卡尔曼滤波图形给大家看看,做做参考。只要能达到我这个效果,基本上完美了。这个得自己慢慢调参数。 ...

参加这么多活动能搞的定?                     
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 18:55:29 | 显示全部楼层
fire 发表于 2016-10-27 15:19
完美的波形啊,加油。

一定尽力,谢谢火哥支持。挑战杯的作品已经想好了,正在建模和准备制作实物了。绝对有信心能拿奖。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 18:57:36 | 显示全部楼层
与孤独和好 发表于 2016-10-27 15:20
参加这么多活动能搞的定?

都是为了提高能力。
回复 支持 反对

使用道具 举报

发表于 2016-10-27 19:06:22 | 显示全部楼层
李小龙 发表于 2016-10-26 16:40
最佳的卡尔曼滤波图形给大家看看,做做参考。只要能达到我这个效果,基本上完美了。这个得自己慢慢调参数。 ...

大神用的是什么软件 ??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 21:10:14 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-10-27 19:06
大神用的是什么软件 ??

我不是大神,用的是匿名上位机
回复 支持 反对

使用道具 举报

发表于 2016-11-1 09:14:42 | 显示全部楼层
李小龙 发表于 2016-10-27 18:55
一定尽力,谢谢火哥支持。挑战杯的作品已经想好了,正在建模和准备制作实物了。绝对有信心能拿奖。

透露下?
回复 支持 反对

使用道具 举报

发表于 2017-2-11 13:25:35 | 显示全部楼层
李小龙 发表于 2016-9-12 18:04
下午上课回来,把oled和ad电压采集显示搞好了。昨天大半天都在宿舍补作业。上课期间时间进度有些慢别见怪呀 ...

temp=(float)adcx*(3.3/4096)*115.0/15.0;这个公式实在没看明白特别是115.0/15.0    想能解释一下,谢谢!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 00:03 , Processed in 0.056072 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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