野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16272|回复: 104

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

[复制链接]
发表于 2016-9-10 13:02:04 | 显示全部楼层 |阅读模式
本帖最后由 李小龙 于 2016-10-26 16:42 编辑

首先要谢谢火哥的赞助,一定尽力去做好小车的。

注意:1:用数据线串口通信时,要另外5v供电才能实现通信。
3C634EB873A042049BCA6BC0BB0F9C51.jpg
29DF1C4EF82C447C9CEEEB31816E6360.jpg
587FC2A5B09E5BF90C35A50E07FA1596.jpg
26A23A0E67B45399A14366689175FD20.jpg
BE42B76A0669506FA611B199435E50FA.jpg
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:09:31 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-11 13:40 编辑

昨晚想把小车蓝牙与我的主从一体蓝牙模块串口通信,为了正常连接,我还把小车上面的蓝牙取下来,进行了AT指令设置,后来蓝牙正常连接了,但是没有发生数据传输。因为小车蓝牙串口4,我进行了相关配置,在小车上就是没有数据传输,但在我的zet6开发板上是可以正常通信的。配置应该是正确的。晚上搞到1点多,没弄好。早上6点就起床,一直搞到现在,终于搞好了。我的解决办法是把串口3部分重映射到串口4的引脚,然后完美解决。我的两个蓝牙终于可以正常通信了。以后直接在电脑上位机就可以无线调试小车了。(早上有个小插曲,就是在上起来链接蓝牙时,一直连不上,非常郁闷,蓝牙都配置好了,就是连不上,然后又重新设置蓝牙AT指令,搞了好长时间,还没弄好。还以为蓝牙坏了。后来突然想到是不是别人的手机连上了我的蓝牙?然后我打看开手机蓝牙,还真搜索到一个手机蓝牙,一看,气死我了,是我室友的蓝牙。然后把他的手机蓝牙关了后,就行了)              真是好事多磨呀。  接下来搞mpu6050.     顺便附上串口3通信程序。
26A23A0E67B45399A14366689175FD20.jpg
BE42B76A0669506FA611B199435E50FA.jpg

Balance_code_5.zip

331.22 KB, 下载次数: 290

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-12 18:04:20 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-12 18:05 编辑

下午上课回来,把oled和ad电压采集显示搞好了。昨天大半天都在宿舍补作业。上课期间时间进度有些慢别见怪呀。
842A7ADFE01347E17407EC0BC0C692D0.jpg
AA8FA31820438E772225410FA58213C5.jpg

Balance_code_8.zip

321 KB, 下载次数: 228

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-17 15:55:03 | 显示全部楼层
姿态角输出,用的是mpu6050自带的DMP.
988086A141A6CFA84DE3499EE32FFB88.jpg
D2165E7647DDEDC5937552CCDF96C70D.jpg

Balance_code_姿态角OLED显示.zip

386.74 KB, 下载次数: 227

回复 支持 反对

使用道具 举报

 楼主| 发表于 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, 下载次数: 262

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 13:11:00 | 显示全部楼层
试了试自带的程序,上电后,按了K3, 车子一直向一边加速。应该是pid没调好。板子应该没问题。
回复 支持 反对

使用道具 举报

发表于 2016-9-10 14:13:28 | 显示全部楼层
你的车子搞好了啊
回复 支持 反对

使用道具 举报

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

出厂程序是能平衡的,确保接线没有问题,顺着液晶看,左边电机接左边的端子,右边电机接右边端子
回复 支持 反对

使用道具 举报

发表于 2016-9-10 14:25:25 | 显示全部楼层
应该可以平衡啊,把车子竖着放,然后上电,按K3,里面就平衡了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 14:32:01 | 显示全部楼层
fire 发表于 2016-9-10 14:25
应该可以平衡啊,把车子竖着放,然后上电,按K3,里面就平衡了。

可是我把出厂程序擦了,把串口,led测试了下,都好用.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 14:45:25 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-10 14:52 编辑
fire 发表于 2016-9-10 14:25
应该可以平衡啊,把车子竖着放,然后上电,按K3,里面就平衡了。

肯定是车子没竖着放,导致机械中值初始化出现偏差。没事,自己把它立起来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 14:50:14 | 显示全部楼层
cancore 发表于 2016-9-10 14:13
出厂程序是能平衡的,确保接线没有问题,顺着液晶看,左边电机接左边的端子,右边电机接右边端子

打开开关时,应该是车子没有竖着放,导致初始化机械中值出现偏差,当时没想到。
回复 支持 反对

使用道具 举报

发表于 2016-9-10 16:41:28 | 显示全部楼层
围观来!!
回复

使用道具 举报

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

不错不错!开个好头
回复 支持 反对

使用道具 举报

发表于 2016-9-11 14:51:53 | 显示全部楼层
围观中,期待。。。。。。。。。
回复 支持 反对

使用道具 举报

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

进展不错啊
回复 支持 反对

使用道具 举报

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

把你室友的菊花爆了,这么紧要的关头掉链子。
回复 支持 反对

使用道具 举报

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

用电池供电之后,串口就不需要另外5v供电。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 09:17:09 | 显示全部楼层
fire 发表于 2016-9-13 08:00
把你室友的菊花爆了,这么紧要的关头掉链子。

爆菊花!!!!!!哈哈哈  好恐怖
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-13 09:19:13 | 显示全部楼层
楼主的速度好快,真的是高手啊。
回复 支持 反对

使用道具 举报

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

我用AD(MDA)的方式采集电池电压,怎么出不来呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 12:09:30 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 11:11
我用AD(MDA)的方式采集电池电压,怎么出不来呢

我现在只用了ad采集,等把小车立起来再试着用DMA方式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 12:12:35 | 显示全部楼层
fire 发表于 2016-9-13 08:00
用电池供电之后,串口就不需要另外5v供电。

这样也可以。只要给芯片供电就行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 12:14:08 | 显示全部楼层
fire 发表于 2016-9-13 08:00
把你室友的菊花爆了,这么紧要的关头掉链子。

太污了,不敢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 12:30:08 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 09:17
爆菊花!!!!!!哈哈哈  好恐怖

我是不敢的
回复 支持 反对

使用道具 举报

发表于 2016-9-13 12:34:50 | 显示全部楼层
给楼主一些建议,车身不要搞那么高,重心越低越好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 12:37:03 | 显示全部楼层
koenlee93 发表于 2016-9-13 12:34
给楼主一些建议,车身不要搞那么高,重心越低越好

好的,谢谢建议,第一次做车,没什么经验。多谢提醒
回复 支持 反对

使用道具 举报

发表于 2016-9-13 14:09:02 | 显示全部楼层
本帖最后由 奋斗的蜗牛 于 2016-9-13 14:11 编辑
李小龙 发表于 2016-9-13 12:09
我现在只用了ad采集,等把小车立起来再试着用DMA方式

    OLED_ShowStr(0, 3, (u8*)"VOL: ", 6);
    OLED_ShowNum(30, 3, adcx, 2, 6);
    OLED_ShowStr(42, 3, (u8*)".", 6);
    OLED_ShowNum(48, 3, temp, 6, 6);
    OLED_ShowStr(84, 3, (u8*)" V", 6);


我参考你的代码做修改,TextSize=1才能正常显示格式
ADC.jpg
回复 支持 反对

使用道具 举报

发表于 2016-9-13 14:11:50 | 显示全部楼层
但是现在的电压值出不来,调了半天了,不知道哪里问题
回复 支持 反对

使用道具 举报

发表于 2016-9-13 14:20:43 | 显示全部楼层
你这个算法怎么理解,我没有看明白,希望赐教!!!谢谢
suanfa.png
回复 支持 反对

使用道具 举报

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

你那个OLED_ShowNum()函数是不是有问题   我参考你写的怎么没有电压值输出
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 18:18:17 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 14:09
OLED_ShowStr(0, 3, (u8*)"VOL: ", 6);
    OLED_ShowNum(30, 3, adcx, 2, 6);
    OLED_ShowStr(4 ...

我把TextSize带入参数
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{
        switch(TextSize)
        {
                case1://改为了case:6
                {
                       
                }break;
                case 2://改为了case:8
                {
                       
                }break;
        }
}
        
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 18:24:20 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-13 18:35 编辑
奋斗的蜗牛 发表于 2016-9-13 14:20
你这个算法怎么理解,我没有看明白,希望赐教!!!谢谢

这个写的有点绕,我后面又改了,更简单的了。你用的这个,我是把整数和小数分离了,小数部分乘以1000000转换成了整数(方便显示)。还是用我新改的吧。新改的函数,入口参数num可以直接带入数字,也可以是变量了。然后就是ad采集的电压,我没有进行整数小数部分分离了,直接把采集的电压乘以100(具体大小看你保留的有效位,我这里是保留小数后两位,所以乘以100,)然后直接取整,然后通过Voltage/100,Voltage%100,  分离整数和小数部分。
int Get_battery_voltage(void)
{       
        int Volt;
        Volt=Get_Adc_Average(ADC_Channel_10,10);
        Volt=((float)Volt*(3.3/4096)*115.0/15.0)*100;//Volt是整型
  return Volt;       
}



                Voltage=Get_battery_voltage();//因为
                OLED_ShowStr(0,  3, (u8*)"VOL: ", 6);
                OLED_ShowNum(30, 3, Voltage/100, 2, 6);//
                OLED_ShowStr(42, 3, (u8*)".", 6);
                OLED_ShowNum(48, 3, Voltage%100, 2, 6);
                OLED_ShowStr(60, 3, (u8*)" V", 6);

Balance_code_10.zip

322.31 KB, 下载次数: 90

回复 支持 反对

使用道具 举报

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

我用AD(MDA)的方式采集电池电压,用你写的OLED_ShowNum()不显示电压值

平衡车AD电压采集显示 OLED显示.zip

5.97 MB, 下载次数: 98

回复 支持 反对

使用道具 举报

发表于 2016-9-13 18:28:16 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 18:27
我用AD(MDA)的方式采集电池电压,用你写的OLED_ShowNum()不显示电压值

你看看我哪里需要修改一下呢,麻烦你了!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 18:37:12 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 18:27
我用AD(MDA)的方式采集电池电压,用你写的OLED_ShowNum()不显示电压值

我先去吃饭去,等下回来帮你看
回复 支持 反对

使用道具 举报

发表于 2016-9-13 18:59:03 | 显示全部楼层
李小龙 发表于 2016-9-13 18:37
我先去吃饭去,等下回来帮你看

cool,该帖已被我置为精华。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 18:59:17 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 18:27
我用AD(MDA)的方式采集电池电压,用你写的OLED_ShowNum()不显示电压值

你们两个好好交流讨论。年底给你们两个发年终奖。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 18:59:56 | 显示全部楼层
进展好快啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 19:38:48 | 显示全部楼层
fire 发表于 2016-9-13 18:59
cool,该帖已被我置为精华。

谢谢火哥的支持。在论坛中得到你们的肯定,我很高兴
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 19:41:00 | 显示全部楼层
fire 发表于 2016-9-13 18:59
你们两个好好交流讨论。年底给你们两个发年终奖。

我不要钱的,但是可以是别的东西,只要不是钱的都可以的。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 20:03:59 | 显示全部楼层
fire 发表于 2016-9-13 18:59
你们两个好好交流讨论。年底给你们两个发年终奖。

OK,非常感谢火哥!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 20:11:22 | 显示全部楼层
本帖最后由 李小龙 于 2016-9-13 20:23 编辑
奋斗的蜗牛 发表于 2016-9-13 18:28
你看看我哪里需要修改一下呢,麻烦你了!!!

知道原因了,因为我在oled_shownum()中调用了oled_showstr(),所以必须把textsize搞一致,因为我都用6和8,而你oled_showstr()用1和2,oled_shownum()中用6和8.所以参数从oled_shownum()传入oled_showstr()就不一致了,只要统一一下就可以了我帮你统一了。都用1 和 2.@奋斗的蜗牛
AD3220F287D2C0EC85DF206DDB2BD8B9.jpg

平衡车AD电压采集显示 OLED显示.zip

377.13 KB, 下载次数: 69

回复 支持 反对

使用道具 举报

发表于 2016-9-13 20:27:41 | 显示全部楼层
李小龙 发表于 2016-9-13 20:11
知道原因了,因为我在oled_shownum()中调用了oled_showstr(),所以必须把textsize搞一致,因为我都用6和8 ...

我参考你发上来的我的那个工程,重新编译果然好了,谢谢你!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 20:52:53 | 显示全部楼层
奋斗的蜗牛 发表于 2016-9-13 20:27
我参考你发上来的我的那个工程,重新编译果然好了,谢谢你!!!

没事,互相帮助嘛。那个oled_ShowNum()是我自己写的,因为原oled.c文件中没有这个函数,用着不方便。所以写了个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 20:55:00 | 显示全部楼层

这还快?感觉慢的很。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 21:18:14 | 显示全部楼层
李小龙 发表于 2016-9-13 20:52
没事,互相帮助嘛。那个oled_ShowNum()是我自己写的,因为原oled.c文件中没有这个函数,用着不方便。所以 ...

喔  你的C基础很强啊  厉害
回复 支持 反对

使用道具 举报

发表于 2016-9-14 10:03:07 | 显示全部楼层
有讨论,进步最快了
回复 支持 反对

使用道具 举报

发表于 2016-9-14 10:43:12 | 显示全部楼层
版主很赞。昨晚也在搞ADC,看了你俩的讨论,启发很大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-17 10:26:28 | 显示全部楼层
楼主在中秋假期内没更新了,现在开始继续搞。假期中,楼主也没闲着,在制作一个好玩的东西送人,结果还没有搞好,缺元件,还没到。等制作好了,肯定开源分享。
回复 支持 反对

使用道具 举报

发表于 2016-9-18 10:37:08 | 显示全部楼层
李小龙 发表于 2016-9-17 10:26
楼主在中秋假期内没更新了,现在开始继续搞。假期中,楼主也没闲着,在制作一个好玩的东西送人,结果还没有 ...

好                        
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-5-31 12:43 , Processed in 0.467313 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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