野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20498|回复: 49

能用手机app简单装逼了,慢慢优化,加入电机调试,可与匿名上位机连接。11.18

[复制链接]
发表于 2016-9-11 17:19:52 | 显示全部楼层 |阅读模式
本帖最后由 望着你发槑 于 2016-11-18 11:36 编辑

SORRY火哥,上个月干其他事去了,现在继续弄小车。

重新写了一下程序,排版好了一点。

从原来的一阶互补滤波升级到卡尔曼滤波
X0R2GE2~M~Z2L5P]TN8%@MP.png
卡尔曼滤波我还不熟练,现在的参数还不是很好,有过冲,而且收敛不够快,先分享程序,然后继续调试
Z[90GE4DH6A]P)SE2({N9WD.png
但是比一阶互补滤波还是有一个好处,就是将陀螺仪的常值偏差也作为一个状态量,就不用自己去调整了。
一阶互补滤波不减这个常值偏差的话会有稳态误差,卡尔曼滤波没有。

65`]5IO9BYCMSB3NTS]Y}97.png
蓝绿色的线是加速度计直接算出来的角度,紫色的线是一阶互补滤波算出来的,黄色的线是卡尔曼滤波算出来的角度。
上位机用的匿名上位机。

8E%Z@AU`XYE9A_PPZR]_N[E.png
由于单片机没有矩阵运算,所以我自己在草稿纸上算了之后腾上来的。
但是在状态估计校正的最后一行,更新常值偏差的时候,按照我自己演算的应该是加等,但是这样就不收敛,常值偏差会越来越大,所以我尝试着变成减等,没想到就行了。
有没有大神能解答一下。
我参考的那篇论文在附件里面。

Bluetooth is coming
直接使用笔记本自带的蓝牙就行了
火哥这个蓝牙叫做SPP-CA,配对码是1234,使用蓝牙连接之后再设备管理器里面可以看到两个串口
`F9SMXPN1EMI[VPQO6C700B.png U~{@V_O%ITYI7JLILYPC0~R.png
虽然写着一个传出一个传入,不过上位机连接COM7还是能收到倾角信息
火哥的平衡车上蓝牙连接的UART4,没见过这个,就重映射到USART3上面啦,然后把上传倾角的串口由1改成3就OK了

  1. USART_SendData(USART3, (uint8_t)ch);
  2.         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
复制代码
就像这样,然后就不用连线了。正好我的笔记本年事已高,左边两个USB已经坏了一个,现在连着USB集线器在用,有蓝牙就再也不需要了。
对了,我还试过那个平衡小车的app,那个也挺不错的,后期用手机控制小车移动就靠它了。这个串口的波特率设置的9600,慢了一点,因为app是这么多,我又不会改手机app,就只有写程序将就一下他了。
现在看着上位机的画图能看得出一阶互补滤波比卡尔曼滤波要滞后一点点。

发现了一个了不得的问题,蓝牙连接小车不是产生了两个端口吗,我现在需要用一个串口调试助手连接传出的那个COM8口,在用上位机连接传入的COM7口才能正常工作。直接使用上位机连COM7,软件要死机,不是单片机死机,奇了怪了。

手机APP弄好了,通信协议上面把倾角和电量百分比的顺序搞反了。
]48VHS$V3DL%~%~@GZK)JXE.png

就是C和D反了,我们自己写的时候注意就行了。
Screenshot_2016-11-11-15-58-06-738_com.zl.appcar.png

单独开了一个定时器来测试现在就算倾角之类的花了多长时间,没想到还真发现问题了。
  1. TIM2->CNT=0;
  2.       TIM_Cmd(TIM2, ENABLE);

  3.                         TIM_Cmd(TIM2, DISABLE);
  4.             printf("\r\n %d",TIM2->CNT);
复制代码
就用四行程序可以测出他们之间的程序回花多少时间
现在就只有读取角度和解算角度和发送角度给上位机就花了6700多微妙,也就是6毫秒以上了,原来的5毫秒定时器就不合适。
我没有直接把程序写在定时器里面的原因其中之一就是这个。
简单验证了一下,如果进入定时器的时候flag依然等于1的话,说明主程序都还没跑完。
确实是,所以我把控制周期改成10ms了。

调了一下电机的PWM,由于MPU6050没有地磁计,不能精确判断偏航角,原来的小车由于左右轮的转速和力矩差别总是容易打转,所以花了点心思调这个。使用串口打出不同pwm对应的转速,然后拟合了一下,尽量把左右调的一样。
直接上图
原始.png 电机正方向拟合.png 电机负方向拟合.png
第一幅图是原始的数据,二三副图是正方向和负方向分开拟合的。
现在还有一个小瑕疵,就是正反转的时候略微有一点不对应,就是正负象限合起来还不是偶函数,以后再调。或者大家也可以调,现在效果应该比以前好了。
  1. void Dongqilai(int16_t pwm)
  2. {
  3.         uint16_t pwm_l,pwm_r;
  4.         if(pwm<0)
  5.         {
  6.                 MotorA_DirCtl(-1);
  7.                 MotorB_DirCtl(-1);
  8.                 pwm_l=300-pwm;
  9.                 pwm_r=pwm_l+70;
  10.                 if(pwm_l>6000)        pwm_l=6000;
  11.                 if(pwm_r>6000)        pwm_r=6000;
  12.                 TIM_SetCompare1(TIM1,pwm_r);//MOTOB
  13.                 TIM_SetCompare4(TIM1,pwm_l);//MOTOA
  14.         }
  15.         else if(pwm==0)
  16.         {
  17.                 MotorA_DirCtl(0);
  18.                 MotorB_DirCtl(0);
  19.                 TIM_SetCompare1(TIM1,0);//MOTOB
  20.                 TIM_SetCompare4(TIM1,0);//MOTOA
  21.         }
  22.         else
  23.         {
  24.                 MotorA_DirCtl(1);
  25.                 MotorB_DirCtl(1);
  26.                 pwm_l=pwm+300;
  27.                 pwm_r=pwm_l*1.06666f+35;
  28.                 if(pwm_l>6000)        pwm_l=6000;
  29.                 if(pwm_r>6000)        pwm_r=6000;
  30.                 TIM_SetCompare1(TIM1,pwm_r);//MOTOB
  31.                 TIM_SetCompare4(TIM1,pwm_l);//MOTOA
  32.         }
  33. }
复制代码
调参数简直是调的心累,不知道学习到更高层次这个pid有没有系统和理论的调试方法。直接上程序吧,收minibalancev3.5控制下车运动。可以动,但是不是特别完美。
把电机的线性化取消了,我准备用加速度积分来做,后面的转向可能会改成目标角度,现在用的是叠加pwm。
调试过程中一不小心把亚克力板摔坏了。。。。。。。。。。对了,主控的程序结构改了一下,我发现运算的时间其实只有一点几毫秒,什么串口和oled之类的会花大量时间,所以我把定时又改成5ms了,然后放在中断服务函数里面。原来有一些担心是多余的。嘿嘿嘿




平衡车.zip

362.16 KB, 下载次数: 147

11月10日

基于陀螺仪及加速度计信号融合的姿态角度测量.pdf

377.82 KB, 下载次数: 127

平衡车.zip

362.74 KB, 下载次数: 90

11月11日

平衡车.zip

365.07 KB, 下载次数: 132

可以在外行前面装逼

回复

使用道具 举报

发表于 2016-9-12 08:30:02 | 显示全部楼层
期待更新                             
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-12 13:37:22 | 显示全部楼层

火哥,为什么删掉这两句右轮不转,初始化这两句的话右轮定时器TIM1的通道1的pwm极性无法改变,而且和左轮相反
oled用的引脚没有冲突啊
80CZKAK9KMMR@W`U7WLF{ZE.png
回复 支持 反对

使用道具 举报

发表于 2016-9-12 22:23:03 来自手机 | 显示全部楼层
望着你发槑 发表于 2016-9-12 13:37
火哥,为什么删掉这两句右轮不转,初始化这两句的话右轮定时器TIM1的通道1的pwm极性无法改变,而且和左轮 ...

可以站两秒钟啦?程序完全自己写的?
回复 支持 反对

使用道具 举报

发表于 2016-9-12 22:26:00 来自手机 | 显示全部楼层
望着你发槑 发表于 2016-9-12 13:37
火哥,为什么删掉这两句右轮不转,初始化这两句的话右轮定时器TIM1的通道1的pwm极性无法改变,而且和左轮 ...

那进展最快的就是你了呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 09:42:20 | 显示全部楼层
fire 发表于 2016-9-12 22:23
可以站两秒钟啦?程序完全自己写的?

恩,但是定时器我感觉有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 09:42:52 | 显示全部楼层
fire 发表于 2016-9-12 22:26
那进展最快的就是你了呀

我主要是指写了控制的相关程序,oled之类的都还没优化,所以看起来快点
回复 支持 反对

使用道具 举报

发表于 2016-9-13 09:42:55 | 显示全部楼层
望着你发槑 发表于 2016-9-13 09:42
恩,但是定时器我感觉有问题

那就继续加油                     
回复 支持 反对

使用道具 举报

发表于 2016-9-13 12:23:24 | 显示全部楼层
fire 发表于 2016-9-12 22:23
可以站两秒钟啦?程序完全自己写的?

楼主进展好快,真是压力山大呀。不管进度如何,重在制作过程和相关知识的掌握。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 16:14:10 | 显示全部楼层
李小龙 发表于 2016-9-13 12:23
楼主进展好快,真是压力山大呀。不管进度如何,重在制作过程和相关知识的掌握。

YES!!!              
回复 支持 反对

使用道具 举报

发表于 2016-9-13 20:59:03 | 显示全部楼层

楼主真厉害。
回复 支持 反对

使用道具 举报

发表于 2016-9-14 08:44:28 | 显示全部楼层
很厉害啊,这么快
回复 支持 反对

使用道具 举报

发表于 2016-9-14 09:07:10 | 显示全部楼层
不错不错,进展挺快的。
回复 支持 反对

使用道具 举报

发表于 2016-9-14 09:08:38 | 显示全部楼层
好厉害!!!
回复

使用道具 举报

发表于 2016-9-14 09:24:12 | 显示全部楼层
你应该是驱动最快的了,支持
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-14 11:16:35 | 显示全部楼层
thanks 各位
最近有点忙,缓慢更新其他驱动
回复 支持 反对

使用道具 举报

发表于 2016-9-14 11:19:09 | 显示全部楼层
东来东往 发表于 2016-9-14 09:24
你应该是驱动最快的了,支持

我看你还没啥进展啊
回复 支持 反对

使用道具 举报

发表于 2016-9-14 11:28:36 | 显示全部楼层
fire 发表于 2016-9-14 11:19
我看你还没啥进展啊

正在进展中,等待电机,快速跟上,时刻关注论坛,O(∩_∩)O哈哈~
回复 支持 反对

使用道具 举报

发表于 2016-9-14 14:46:40 | 显示全部楼层
凶滴很            
回复 支持 反对

使用道具 举报

发表于 2016-9-18 12:11:34 | 显示全部楼层
望着你发槑 发表于 2016-9-12 13:37
火哥,为什么删掉这两句右轮不转,初始化这两句的话右轮定时器TIM1的通道1的pwm极性无法改变,而且和左轮 ...

楼主,继续更新啊,期待中
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-18 18:59:28 | 显示全部楼层
大哥大雷神 发表于 2016-9-18 12:11
楼主,继续更新啊,期待中

会更得,只不过最近进度可能要慢一点
回复 支持 反对

使用道具 举报

发表于 2016-9-18 23:03:20 来自手机 | 显示全部楼层
oled显示电压的图在哪里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 13:26:33 | 显示全部楼层
fire 发表于 2016-9-18 23:03
oled显示电压的图在哪里

最后一张图的第二行,11.89025
我再加个v上去吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 14:00:40 | 显示全部楼层
fire 发表于 2016-9-18 23:03
oled显示电压的图在哪里

如果板子上面再有个蜂鸣器就可以电压过低报警了
回复 支持 反对

使用道具 举报

发表于 2016-9-21 11:54:05 | 显示全部楼层
我想请问一下您的OLED是用硬件I2C还是软件I2C完成的,还有你是怎么会的?是移植还是自己写??
回复 支持 反对

使用道具 举报

发表于 2016-9-21 13:49:13 | 显示全部楼层
空大大 发表于 2016-9-21 11:54
我想请问一下您的OLED是用硬件I2C还是软件I2C完成的,还有你是怎么会的?是移植还是自己写??

方法在这里

一个头发发白的老程序员教你写程序,你们后生仔还要好好学下才行,字字珠玑啊。
http://www.firebbs.cn/forum.php? ... 14315&fromuid=1
(出处: 野火论坛)
回复 支持 反对

使用道具 举报

发表于 2016-9-21 14:08:20 | 显示全部楼层
fire 发表于 2016-9-21 13:49
方法在这里

一个头发发白的老程序员教你写程序,你们后生仔还要好好学下才行,字字珠玑啊。

行吧,6爆了,这样确实节省时间精力的哟
回复 支持 反对

使用道具 举报

发表于 2016-9-21 14:46:00 | 显示全部楼层
空大大 发表于 2016-9-21 14:08
行吧,6爆了,这样确实节省时间精力的哟

我能说我刚网上荡了一个程序,移植过去立马OLED就已经成功了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-21 14:57:41 | 显示全部楼层
空大大 发表于 2016-9-21 11:54
我想请问一下您的OLED是用硬件I2C还是软件I2C完成的,还有你是怎么会的?是移植还是自己写??

硬件i2c,移植火哥的程序
回复 支持 反对

使用道具 举报

发表于 2016-9-21 15:55:38 | 显示全部楼层
望着你发槑 发表于 2016-9-21 14:57
硬件i2c,移植火哥的程序

OLED的驱动呢,火哥好像没做这个驱动
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-21 16:22:40 | 显示全部楼层
空大大 发表于 2016-9-21 15:55
OLED的驱动呢,火哥好像没做这个驱动

电压显示里面就有oled驱动
火哥写了的在那个第三方资料合辑里面
回复 支持 反对

使用道具 举报

发表于 2016-9-21 16:35:06 | 显示全部楼层
望着你发槑 发表于 2016-9-21 16:22
电压显示里面就有oled驱动
火哥写了的在那个第三方资料合辑里面

没看到。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2016-9-21 16:35:34 | 显示全部楼层
空大大 发表于 2016-9-21 16:35
没看到。。。。。。。。。。。。。。。。

看到了,有的
回复 支持 反对

使用道具 举报

发表于 2016-9-21 19:15:34 | 显示全部楼层
楼主头像是谁啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 09:47:25 | 显示全部楼层

陈意涵               
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-10 16:46:08 | 显示全部楼层

蓝牙的问题还要请教你那
回复 支持 反对

使用道具 举报

发表于 2016-11-10 21:56:59 | 显示全部楼层
等楼主很久了.............................
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 14:40:47 | 显示全部楼层
cxchenxingcool 发表于 2016-11-10 21:56
等楼主很久了.............................

。。。。周末可能不更,回家练车
回复 支持 反对

使用道具 举报

发表于 2016-11-14 19:15:07 | 显示全部楼层
望着你发槑 发表于 2016-9-12 13:37
火哥,为什么删掉这两句右轮不转,初始化这两句的话右轮定时器TIM1的通道1的pwm极性无法改变,而且和左轮 ...

我的也有这个情况,楼主知道为啥了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 20:34:47 | 显示全部楼层
smtudou 发表于 2016-11-14 19:15
我的也有这个情况,楼主知道为啥了吗?

不知道,我现在重新写的程序又没有这个问题了。
但是有时候串口不会发送数据,程序也没有卡住。
有时候加一句点个led就可以发了,有时候要把点led去掉
回复 支持 反对

使用道具 举报

发表于 2016-11-14 21:45:45 | 显示全部楼层
望着你发槑 发表于 2016-11-14 20:34
不知道,我现在重新写的程序又没有这个问题了。
但是有时候串口不会发送数据,程序也没有卡住。
有时候 ...

我试了下楼主的程序,示波器看了下,一路pwm输出占空比为14%左右,另一路为86%左右,但是看你的配置都是pwm1模式,且设置两者的TIM1_OCConfig.TIM_Pulse = 1000     
那为何产生了两种占空比的pwm信号????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 15:13:13 | 显示全部楼层
smtudou 发表于 2016-11-14 21:45
我试了下楼主的程序,示波器看了下,一路pwm输出占空比为14%左右,另一路为86%左右,但是看你的配置都是p ...

哪一个程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-18 11:34:37 | 显示全部楼层
大神们可以帮着调一下参数
回复 支持 反对

使用道具 举报

发表于 2016-11-28 20:46:14 | 显示全部楼层
楼主现在平衡车调的怎么样了??我现在也加上了蓝牙遥控,但是小车走直线的能力很弱,我的转向环用的是简单的对陀螺仪Z轴输出的一个比例作用,感觉这个转向环的负反馈很弱的样子,去掉直立和速度控制,单独调试转向环时,当把比例系数的极性改变后,把车子放在地下,转动他,感觉像是一个正反馈一样(无论Kp极性如何),根本没有想要抑制你转动的那个趋势,,,
回复 支持 反对

使用道具 举报

发表于 2016-11-29 10:38:54 来自手机 | 显示全部楼层
漂亮
回复

使用道具 举报

 楼主| 发表于 2016-11-29 18:31:18 | 显示全部楼层
smtudou 发表于 2016-11-28 20:46
楼主现在平衡车调的怎么样了??我现在也加上了蓝牙遥控,但是小车走直线的能力很弱,我的转向环用的是简单 ...

现在走直线地能力我感觉还可以,还没有加转向相关的东西。
按照平衡小车之家的那个调试过程,把比例系数加大一点看效果确定是不是极性反了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 18:32:43 | 显示全部楼层

这两周有考试,还有我的驾照还没过
下次更新可能要等到12月中至1月了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-29 18:35:47 | 显示全部楼层

火哥,我还是想问一下这块板子上的两个按键能不能挂在同一条中断线上?
我在群里面问了,有一个师兄说在硬件上要线与,线与是不是要有高阻态才行
回复 支持 反对

使用道具 举报

发表于 2016-11-29 22:44:04 | 显示全部楼层
望着你发槑 发表于 2016-11-29 18:31
现在走直线地能力我感觉还可以,还没有加转向相关的东西。
按照平衡小车之家的那个调试过程,把比例系数 ...

嗯,现在参数调了,变得好些了~~
回复 支持 反对

使用道具 举报

发表于 2017-2-14 16:01:20 | 显示全部楼层
期待更新!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 16:26 , Processed in 0.080667 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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