亿加合和智能车制作

标题: 电磁直立程序分享,开源攒人品 [打印本页]

作者: 萌萌晨    时间: 2016-4-2 10:31
标题: 电磁直立程序分享,开源攒人品

    大二上学期期末到现在做车5个多月了,从当初什么都不懂的小渣渣到现在略知皮毛的大渣渣,我收获了不少知识,认识了很多朋友,其中很多资料都是来自论坛或者QQ群的大神们,从小车站起来,到跑起来,再到逐渐加速,高兴的同时,不能忘记当初帮助我的论坛里的大神们。过了校赛,想着回馈论坛,发个程序,开源攒人品,如果省赛能取得好成绩,继续开源(是不是想的有点早了)。
    个人认为,世界本来就该是“开源”的,共同交流,取长补短,才能共同进步。再想想自己的学校,三个系还争来争去,什么事都那么保密,呵呵。
    开源,不是为了炫耀我的车跑的多快,我的程序有多好,毕竟我作为一个机械系的学生,程序完全从0自学的。开源,只是想让没有思路的同学们可以参考一下我的思路,取长补短;比我牛逼的同学,能够批评指正我的不足,让我做的更好。
    一直特别佩服在论坛发自己原创资料的学长大神们,佩服的不仅仅是他们的技术,更是胸怀。
    我的程序也不能说是完全原创,只是结合官方程序,往届的光电直立,摄像头直立,电磁等等程序,加上自己的一些思想,拼凑起来的。程序基于野火5.0版本库,核心部分就是 control.c,tiaocan.c,main.c。控制,是直立,速度,方向的整合,方向控制用两个水平电感,差比和计算偏差,静态PD(之前试过动态PD,二次偏差,可能参数没调好,效果不太好,有想法的可以在评论区交流),速度闭环(野火低版本库正交解码有bug,修改方法见下图),直立控制用的清华方案。电感采集函数添加冲出赛道自动停车,保护小车。大体思路和官方程序差不多,但是最一开始我参考的那个官方程序不知道哪个坏人给改过,缺东西,坑了我好久。tiaocan是按键调参以及oled显示,为了解决模拟陀螺仪温漂,本渣渣用擦写Flash的方法,一键读取并保存陀螺仪静态值,可选择按键微调并保存静态值;按键设置速度、方向P、方向D,挡数比拨码开关更多,设置更灵活;一键归一化电感并保存入Flash,每次开机自己决定是否需要归一化。思路仅供参考,如有不足以及错误,欢迎批评指正。
    机械结构不算太好,待以后优化,硬件也不是我做的,不能开源,程序嘛,就算是我一个人写的吧。视频见以下链接,过了校赛,以后打算改机械结构,优化方向控制算法。本渣渣抛砖引玉,有两个想法:1,两水平两竖直,竖直电感更灵敏,及时判断入弯,并判断弯道大小,水平电感计算偏差;2,4水平,通过寻找最大电感,并结合4个电感值,计算近似跑道斜率。不知道哪个更好一些,也希望有好方法的大神们能多多交流,共同进步
  [attach]84679[/attach][attach]84680[/attach][attach]84681[/attach][attach]84682[/attach]



补充内容 (2016-4-3 10:35):
电感滤波程序是参考一些别人的程序之后拼凑起来的,改来改去,好像有点问题,请不要参考此段,感谢某神提出
作者: 萌萌晨    时间: 2016-4-2 10:32
视频请戳http://www.znczz.com/thread-241352-1-1.html
作者: 填坑少年    时间: 2016-4-2 10:44
谢谢大神分享 雪中送炭

作者: 填坑少年    时间: 2016-4-2 10:44
再占一楼

作者: TG小平民    时间: 2016-4-2 10:58
与楼主相比,我的程序简陋了些



作者: yypeng1995    时间: 2016-4-2 11:05
你们的电感有专门调节吗。我们不管怎样两边采集的数据就是不一样
作者: zj995048235    时间: 2016-4-2 11:28
yypeng1995 发表于 2016-4-2 11:05
你们的电感有专门调节吗。我们不管怎样两边采集的数据就是不一样

重新换电感

作者: 萌萌晨    时间: 2016-4-2 11:36
yypeng1995 发表于 2016-4-2 11:05
你们的电感有专门调节吗。我们不管怎样两边采集的数据就是不一样

我们运放有加滑动变阻器,再不行就换电感,电感质量不一,不可能完全对称

作者: ???-    时间: 2016-4-2 14:07
大神!
作者: zj995048235    时间: 2016-4-2 14:35
Star_flag  此参数只给了个定值呀
作者: 361369499    时间: 2016-4-2 15:43
感谢分享!
作者: 唯欣雨林    时间: 2016-4-2 17:29
谢谢分享,看看
作者: 杨先生    时间: 2016-4-2 17:49
顶。。。。。。。。。。。
作者: 萌萌晨    时间: 2016-4-2 18:30
zj995048235 发表于 2016-4-2 14:35
Star_flag  此参数只给了个定值呀

启动计数标志位初始化为50,KEY_B_flag==7时中断计数让它递减,通过标志位数值控制小车起步时预期速度以及电机是否转动,控制.c里面的速度控制部分和电机pwm输出部分用到了此标志位

作者: little_sun    时间: 2016-4-2 19:57
谢大神分享
作者: 进击的生菜    时间: 2016-4-2 20:05
楼主好人    希望楼主调车顺利
作者: little_sun    时间: 2016-4-2 20:07
楼主在调参方面可以分享一下经验吗?:lol
作者: yangjiahui    时间: 2016-4-2 22:48
方向也加死区》》????
作者: Golem.    时间: 2016-4-3 01:29
谢谢大神分享
作者: zj995048235    时间: 2016-4-3 08:34
萌萌晨 发表于 2016-4-2 18:30
启动计数标志位初始化为50,KEY_B_flag==7时中断计数让它递减,通过标志位数值控制小车起步时预期速度以 ...

楼主好人 我借鉴借鉴
常交流



作者: luckner    时间: 2016-4-3 10:25
加个电感归一化
作者: 萌萌晨    时间: 2016-4-3 10:29
luckner 发表于 2016-4-3 10:25
加个电感归一化

电感归一化在tiaocan.c的void Date_analyse(void)函数里

作者: 萌萌晨    时间: 2016-4-3 10:32
yangjiahui 发表于 2016-4-2 22:48
方向也加死区》》????

这个不是必须的,虽然方向控制程序里加了,但是定义死区是0,我在void MotorSpeedOut(void)里面加了总的死区

作者: 牧奎山谷    时间: 2016-4-4 14:18
楼主,我参考你的电感处理那块,但是采集回来的值都是100.。。咋回事

作者: 萌萌晨    时间: 2016-4-4 16:38
牧奎山谷 发表于 2016-4-4 14:18
楼主,我参考你的电感处理那块,但是采集回来的值都是100.。。咋回事

可能归一化没归好吧,归一化数值为0到100

作者: yangjiahui    时间: 2016-4-5 19:48
luckner 发表于 2016-4-3 10:25
加个电感归一化

直立车的电感归一化???采集不同高度对应的最大电流值???试了一下感觉效果不大啊、、、、

作者: qq1243237574    时间: 2016-4-6 15:45
哎,,,,,速度问题怎么解决啊,大神们
作者: YELE960    时间: 2016-4-6 20:05
大一新人,能分享一下完整工程吗~感觉我的野火库有问题~
作者: 逍遥行    时间: 2016-4-9 00:45
楼主能分享一下库吗,我的没有正交解码
作者: 萌萌晨    时间: 2016-4-9 12:41
逍遥行 发表于 2016-4-9 00:45
楼主能分享一下库吗,我的没有正交解码

我用的是野火5.0库,有正交解码,在ftm.c里面

作者: takethisway    时间: 2016-4-9 16:30
O(∩_∩)O谢谢分享
作者: youshujian    时间: 2016-4-11 20:08
先谢谢楼主分享
作者: 甚好丶    时间: 2016-4-11 22:46
厉害厉害,崇拜中
作者: 阿狸远翔    时间: 2016-4-14 19:48
好好学习
作者: mako    时间: 2016-4-14 19:59
楼主有没有考虑过你的代码里归一化的问题。开机检测电感最大最小值,你是怎么确定检测时候车的倾角就是你跑的时候倾角呢?  毕竟最大最小确定后对归一化线性是有影响的,也就是对方向的P有影响。。楼主这个怎么解决的? 我是用官方的哪两个电感  效果并不理想。
作者: 萌萌晨    时间: 2016-4-14 20:39
mako 发表于 2016-4-14 19:59
楼主有没有考虑过你的代码里归一化的问题。开机检测电感最大最小值,你是怎么确定检测时候车的倾角就是你跑 ...

归一化在tiaocan.c里面,归一化时,电感高度大概是直立高度就行,没有那么精确。我也是官方两电感的方案,感觉还可以

作者: mako    时间: 2016-4-15 23:58
萌萌晨 发表于 2016-4-14 20:39
归一化在tiaocan.c里面,归一化时,电感高度大概是直立高度就行,没有那么精确。我也是官方两电感的方案 ...

谢谢楼主的回答,我们准备用三个电感,参考了去年北科电磁组的那个,以中间那个电感为比较点。   
  还有我想问下楼主,车在跑的时候是会前倾一点是吧?  那这样跑的时候角度应该就不是平衡点了吧?  我是把速度控制调大一点,让他不在平衡点跑。。。但是速度控制的没你的好。有时走走停停。请问楼主怎么解决的。

作者: 萌萌晨    时间: 2016-4-16 16:27
mako 发表于 2016-4-15 23:58
谢谢楼主的回答,我们准备用三个电感,参考了去年北科电磁组的那个,以中间那个电感为比较点。   
  还 ...

其实不必在意他前倾不前倾,比如你程序里设置了一个阈值,他和电感数值有关对吧,但是有一天你赛道电流变了,阈值是不是就不能正常判断了?归一化,就是把当时赛道电感最值保存起来用,理论上最大值应该是电感在导线上方,但直立高度是不确定的,因此,只要保证你每次归一的高度一样就行,原则就是最大值尽量大,最小值尽量小,如果采集的某个值比保存的最大值还大,那么归一化也就没意义了,你在你自己赛道上把车调好了,那么你去别人赛道上跑时,归一化就还是这个高度,毕竟直立车,不能特别精确,一般这点误差不会有影响的。

作者: 萌萌晨    时间: 2016-4-16 16:29
mako 发表于 2016-4-15 23:58
谢谢楼主的回答,我们准备用三个电感,参考了去年北科电磁组的那个,以中间那个电感为比较点。   
  还 ...

你说的走走停停,调PID吧,之前特别容易就调好了,前几天换了数字陀螺仪,到现在都跑不起来了,也是走走停停,还抖啊抖:'(:'(

作者: mako    时间: 2016-4-16 17:17
萌萌晨 发表于 2016-4-16 16:29
你说的走走停停,调PID吧,之前特别容易就调好了,前几天换了数字陀螺仪,到现在都跑不起来了,也是走走 ...

楼主换数字的啊? 确实模拟的飘的太厉害==,flash的作用都不明显,因为下个程序都有可能飘几十。 但是数字陀螺仪也会出现问题,就是iic等待时间问题。我以前是做四轴六轴的= = 数字用好确实还行。看楼主选择了。

作者: 天木明    时间: 2016-4-18 10:41
两竖直是咋放?垂直于地面向上吗?
作者: 萌萌晨    时间: 2016-4-18 16:08
天木明 发表于 2016-4-18 10:41
两竖直是咋放?垂直于地面向上吗?

没竖直啊,两水平电感

作者: enji    时间: 2016-4-18 22:48
想问问速度PI怎么调?
我调了3天了,没什么效果,每次状况都和我发车有关
该怎么调啊
作者: 361369499    时间: 2016-4-18 23:19
请教楼主前瞻多长,今天我们试着加长了前瞻,40出头,过小S很轻松(原来30的时候小S太痛苦了)
可是长前瞻转U型弯基本都直接漂移了,一些小弯也经常出现漂移,不知道楼主有没有相似问题

作者: 萌萌晨    时间: 2016-4-19 06:30
361369499 发表于 2016-4-18 23:19
请教楼主前瞻多长,今天我们试着加长了前瞻,40出头,过小S很轻松(原来30的时候小S太痛苦了)
可是长前瞻 ...

之前前瞻30,现在40和你问题一样,只能加电感,改算法了

作者: 孤行5201314    时间: 2016-4-22 18:54
你好,请问一下。你用的清华的滤波。效果怎么样。我这也是用的清华的滤波,陀螺仪漂的厉害。陀螺仪是模拟的


作者: 萌萌晨    时间: 2016-4-22 22:39
孤行5201314 发表于 2016-4-22 18:54
你好,请问一下。你用的清华的滤波。效果怎么样。我这也是用的清华的滤波,陀螺仪漂的厉害。陀螺仪是模拟的 ...

清华互补滤波挺好的,简单实用,我没用过别的,没法做比较,模拟陀螺仪温漂很正常,不能怪滤波的原因,每次开机读取零值就可以,你可以参考我的思路,按键手动调整,更精确,或者换数字陀螺仪,我试过了,数字时序不好搞,又换回模拟了,把零偏处理好,模拟还是挺好的

作者: mako    时间: 2016-4-24 17:51
哥们我换了一个陀螺仪。现在弯道加速。加完速到直道又减速停了,又慢慢加速跑。陀螺仪放平了,正反跑都一样。速度只用了p。求指点什么原因??

作者: 夏尔南    时间: 2016-4-25 16:37
电感滤波问题怎么说?
作者: 萌萌晨    时间: 2016-4-25 16:52
夏尔南 发表于 2016-4-25 16:37
电感滤波问题怎么说?

应该是滚动采集10个数,去掉最大最小之后取平均,我的取10个值有问题,还没来及改

作者: 夏尔南    时间: 2016-4-25 17:37
  for(j=0;j<N;j++)
    {
        AD_data[0][j]=adc_once(Induc_1,ADC_10bit);            //每个通道取N次数据
        AD_data[1][j]=adc_once(Induc_2,ADC_10bit);
        AD_data[2][j]=adc_once(Induc_3,ADC_10bit);
        AD_data[3][j]=adc_once(Induc_4,ADC_10bit);
        //AD_data[4][j]=adc_once(Induc_5,ADC_10bit);
    }这不是滚动采集吗
作者: 孤行5201314    时间: 2016-4-26 07:07
萌萌晨 发表于 2016-4-22 22:39
清华互补滤波挺好的,简单实用,我没用过别的,没法做比较,模拟陀螺仪温漂很正常,不能怪滤波的原因,每 ...

好的,谢谢


作者: 萌萌晨    时间: 2016-4-26 09:19
夏尔南 发表于 2016-4-25 17:37
for(j=0;j

这里没问题,上面采集10个数据那段程序有问题,我还没来及改

作者: srqqq    时间: 2016-4-27 15:32
感谢楼主分享
作者: 头上两只角    时间: 2016-4-28 17:10
萌萌晨 发表于 2016-4-2 11:36
我们运放有加滑动变阻器,再不行就换电感,电感质量不一,不可能完全对称

电感怎么归一,,跑的时候都不定高。
作者: dspd    时间: 2016-4-30 16:18
用了楼主的CX测试了一下,车没有动。。。,用在线调试了一下发现Star_flag一直是2.。。。
作者: 萌萌晨    时间: 2016-4-30 16:33
dspd 发表于 2016-4-30 16:18
用了楼主的CX测试了一下,车没有动。。。,用在线调试了一下发现Star_flag一直是2.。。。

底层库不一样,头文件不一样,你怎么试的?开源只是让大家参考我的思路,取精华,弃糟粕,哪能直接拿过来用?反正我这里用着正常,此标志位是启动时加速,能从50减到0

作者: ygn    时间: 2016-5-1 11:01
你们的车好快,大概多少m/s?
作者: 萌萌晨    时间: 2016-5-1 12:24
ygn 发表于 2016-5-1 11:01
你们的车好快,大概多少m/s?

大神别笑话我了,一点都不快,发挥好时接近2米

作者: butter-fly    时间: 2016-5-1 21:02
open和free,我挺你
作者: ygn    时间: 2016-5-6 22:36
萌萌晨 发表于 2016-5-1 12:24
大神别笑话我了,一点都不快,发挥好时接近2米

厉害,厉害,我们的车最快才1.2m,不知道是不是电感问题,一直提不起速度的,我们的电感采回来的电压才0.12v左右

作者: ygn    时间: 2016-5-6 22:38
ygn 发表于 2016-5-6 22:36
厉害,厉害,我们的车最快才1.2m,不知道是不是电感问题,一直提不起速度的,我们的电感采回来的电压才0. ...

被人撞了一下,现在都跑不了了

作者: 兜兜Same    时间: 2016-5-8 11:43
mako 发表于 2016-4-14 19:59
楼主有没有考虑过你的代码里归一化的问题。开机检测电感最大最小值,你是怎么确定检测时候车的倾角就是你跑 ...

我的问题跟你的一样,能分享下你怎么解决的吗

作者: 兜兜Same    时间: 2016-5-8 11:45
mako 发表于 2016-4-24 17:51
哥们我换了一个陀螺仪。现在弯道加速。加完速到直道又减速停了,又慢慢加速跑。陀螺仪放平了,正反跑都一样 ...

就是弯道加速直道又减速

作者: wyyy08211    时间: 2016-5-8 19:14
正交解码能判断方向吗
作者: 萌萌晨    时间: 2016-5-8 21:48
wyyy08211 发表于 2016-5-8 19:14
正交解码能判断方向吗

可以的

作者: wyyy08211    时间: 2016-5-12 20:24
萌萌晨 发表于 2016-5-8 21:48
可以的

好的,谢啦

作者: 学霸东    时间: 2016-5-16 18:49
必须好评
作者: wsj152251    时间: 2016-5-16 21:12
大神,我速度控制,用示波器看,达不到设定的值,什么问题
作者: 萌萌晨    时间: 2016-5-16 22:22
wsj152251 发表于 2016-5-16 21:12
大神,我速度控制,用示波器看,达不到设定的值,什么问题

大神好厉害,速度控制我都没用示波器,没看图像,都是瞎调的。你说的达不到设定值,可能是单位换算的不对,把脉冲换算成米,可没那么精确,我感觉只要能在短时间内稳定到某个值就行了;另外,也有可能是P太小,你可以看看PID有关的资料,再调调参数。

作者: 林兜兜    时间: 2016-6-1 17:57
多谢多谢多谢   佩服开源的人
作者: 1947259147    时间: 2017-2-21 21:44
谢谢大神
作者: Randle    时间: 2018-3-29 23:46
大佬,想问你个事情,怎么判断十字还是圆环
作者: 老根555    时间: 2018-4-5 14:20
啦啦啦

作者: panyuesheng    时间: 2018-4-22 19:09
敢问楼主是怎么采集归一化的最大值的
作者: SeekAndFindU    时间: 2018-5-1 20:28
请问tiaocan.txt里面的 Star_flag//启动计数是什么意思?

作者: Early    时间: 2018-5-10 17:04
感谢大佬分享
作者: Ts123    时间: 2018-5-30 17:44
下来看看,谢楼主
作者: Ts123    时间: 2018-6-1 17:16
谢谢了。楼主
作者: dxa572862121    时间: 2018-9-24 18:31
鸣人不说暗话,我喜欢你的头像(-_-)
作者: 萌萌晨    时间: 2018-9-28 15:21
dxa572862121 发表于 2018-9-24 18:31
鸣人不说暗话,我喜欢你的头像(-_-)

难道不喜欢我吗

作者: The-answer    时间: 2018-10-24 14:04
希望华航可以越来越重视智能车竞赛,能有一个更大的体系,希望有一天能三系合一,校内招收飞卡成员,从机械结构到板子到代码,都是各个系的同学们各发所长共同探索,希望华航智能车团队能成为一个大家庭。





欢迎光临 亿加合和智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2