搜索
bottom↓
回复: 315

正在研发中的电动独轮车

  [复制链接]

出0入0汤圆

发表于 2011-7-6 09:42:22 | 显示全部楼层 |阅读模式
前几天注_册了一个帐号laugh168,可惜赶在论坛新审核规定实施中,没什么技术含量也不见有人围观,就也没有发帖的积极性,直接被无法挽回地删除了。
这是我正在研发中的电动独轮车,其实有关技术的问题还是可以说很多的,毕竟会碰到很多事先想不到的问题,解决了,就是一个经验。

(原文件名:SNC00087_2.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2011-7-6 09:54:02 | 显示全部楼层
硬件部分,是5月中旬开始采购的,包括轮毂电机、锂电池、电池盒、电动车通用控制器、加速度传感器、可折叠脚踏,鞍座是原有脚踏独轮车的,车架是自行设计,委托激光切割后拿到五金加工店焊接的。

出0入0汤圆

 楼主| 发表于 2011-7-6 10:02:55 | 显示全部楼层
上面还说漏了,内外胎也是单独买的,内胎要弯嘴的,是在网上淘的,外胎就在本地修理店买的,好像买的这个外胎不怎么均匀,转动起来外圆比较晃。
硬件置办齐后就开始拼接,虽有一定困难,咬牙也就过去了,碰到困难时,就静一下心,不去多想困难,只看现在能干什么,能干什么就先干着,并不赶时间,只要做,事情就能做完。于是轮子装好了,车座装上了,电路连接通了,打开开关通电测试,电动车控制器的学习线搭上,车轮就能转动了,说明硬件基本就位。

出0入0汤圆

 楼主| 发表于 2011-7-6 10:13:59 | 显示全部楼层
在这同时,我还在阅读电动车驱动有关知识,学习相关微控制器stm8s的编程,学习姿态传感器的应用。研究了现有控制器的电路后,将加速度传感器输出焊到了微控制器ADC输入端口,尝试编程驱动,计算求得非倾斜时的水平轴0g时的采集数值应当是337,再配合指示灯,对这一数值进行确认,使得偏过来灯亮、偏过去灯灭,不久就能让电机根据偏转程度快慢转动了,但问题仍然多多。

出0入0汤圆

 楼主| 发表于 2011-7-6 10:51:23 | 显示全部楼层
首先是ST的BLDC库很庞杂,信息量很大,短时间内难以理清,终于实现随传感器的前后倾斜正反快慢转以后,还是发现电机一旦停转就必须断电重启,同时电机抖动、打顿明显,在对传感器信号做滤波时,又碰到了新问题。上次发帖内容已经见不到了,这里就简单说一下,就是unsign的数据相减以后得到的还是unsign数据,如果前一个数比后一个数小,得到的符号位会成为高权值的数,使总体结果成为一个“大数”,而不是一个负数。

出0入0汤圆

 楼主| 发表于 2011-7-6 11:12:44 | 显示全部楼层
滤波基本成功以后,电机还是讨厌地打顿,对霍尔信号做基本的滤波,问题还是依旧,很伤脑筋。改改歇歇,锲而不舍,怀疑电连接不稳定,打开接插件,单独的插接,仔细地观察,怀疑电机里面信号不稳定,敲打、震动,编程观察指示灯的变化,不到不得已还是不要打开电机。
    后来多管齐下,效果得以明显改善:
    1、霍尔信号符合预期顺序的,直接采信,正常驱动
    2、霍尔信号不符合预期顺序的,立即终止当前相序的驱动,让电机惯性运转
    3、连续5次相同的新信号被采信,开始新的驱动
    4、修改简化换相触发方式
目前看来基本够用了,如无新的认识和发现,估计电机的驱动就这样了。

出0入0汤圆

 楼主| 发表于 2011-7-7 10:11:44 | 显示全部楼层
今天早上,我让独轮车站起来了,只在一个方向的加速度传感器支持下工作,确实对于震动和车体加速摆动缺乏抵抗力,另外也还没有为平衡能力做优化,比如随加速变化或者较大倾斜角度时加大车轮运转速度等。目前,手扶车座,车子可以自动保持接近直立状态,如果向前推,它会跟过来,向后倒,它会退过来,现阶段目的基本达到,进一步的工作是做平衡优化,然后考虑加进单轴陀螺仪,自行设计电路板。

出0入0汤圆

发表于 2011-7-7 10:16:54 | 显示全部楼层
呵呵,楼主出套件么?订购一套

出0入0汤圆

发表于 2011-7-7 10:53:52 | 显示全部楼层
这个真是只能玩玩了.
算法难很多的,转动的时候有个倾斜角,3轴都要修正.表面看容易,其实对应控制变化要多非常多,就算是做出来,但老是摔,玩2下就没兴趣.而且这个最大难度还不在于平衡算法,驱动国内就做不好.先玩好2轮,然后上单轮重心自摆自动平衡车,最后才上这个.

出0入0汤圆

发表于 2011-7-7 10:58:12 | 显示全部楼层
不容易,支持顶一下。

出0入0汤圆

 楼主| 发表于 2011-7-7 11:41:35 | 显示全部楼层
谢谢楼上同学关注。
    俺这就是练兵,一边开发一边报告,只要走下去,就会越走越远,没准能碰到点啥。道路肯定是崎岖的,不过曲径通幽,还是希望就在不远处等着我。俺都练成脚踏独轮车了,又有机械、电子、程序方面的经验,先试制试骑这个,将来越做越好,在这看好的电动自平衡独轮车领域说不定有我一席之地。

出0入0汤圆

发表于 2011-7-7 11:46:45 | 显示全部楼层
有个性,期待大作

出0入0汤圆

发表于 2011-7-7 11:50:57 | 显示全部楼层
【8楼】robotkid
这个真是只能玩玩了.
算法难很多的,转动的时候有个倾斜角,3轴都要修正.表面看容易,其实对应控制变化要多非常多,就算是做出来,但老是摔,玩2下就没兴趣.而且这个最大难度还不在于平衡算法,驱动国内就做不好.先玩好2轮,然后上单轮重心自摆自动平衡车,最后才上这个.
-----------------------------------------------------------------------
驱动指的是什么,硬件软件?


laugh同学很好很强大。

出0入0汤圆

发表于 2011-7-7 16:37:10 | 显示全部楼层
太牛逼了

出0入0汤圆

 楼主| 发表于 2011-7-9 11:07:59 | 显示全部楼层
robotkid 同学的说法很有价值,在进一步增加传感器完善姿态计算之前,要先把驱动做好,就是指“速度环”,要首先搞透速度的控制与实现,然后才能通过姿态分析来随心所欲的行动,不然,问题都混在一起,哪一样也难以搞好。
    昨天尝试让转速随倾角的二次方变化,即采样值与中心值差的1/4,平方后再除以8,可以见到加速的效果,但可以想见的是开环直接调控PWM占空比的算法导致输出能量的跳动较大,应当配合测速采用PID算法平滑能量的变化,减少抖动。这几天要把测速闭环控制搞通。
    另外,今天第一次用笔式示波器测量了较低转速下霍尔信号的变化,发现1ms的采样速率勉强够用,说不定还得提高采样速率。

出500入0汤圆

发表于 2011-7-9 12:02:10 | 显示全部楼层
加油……

出0入0汤圆

发表于 2011-7-9 13:08:39 | 显示全部楼层
想知道是如何平衡的

出0入0汤圆

发表于 2011-7-9 15:54:51 | 显示全部楼层
厉害啊,加油

出0入0汤圆

 楼主| 发表于 2011-7-10 10:23:10 | 显示全部楼层
回复【16楼】ccbbhzgg
想知道是如何平衡的
-----------------------------------------------------------------------

还没有做好,但努力方向是知道的。通过传感器感知车体的倾角及瞬时角速度,得到调整方向和调整量,控制电机的运转,使车体保持动态的平衡,大的原理不外如是吧,具体实现上好像方方面面问题多多,一般知道的,震动、干扰、刚度、可靠性都是问题,这还只是大的方面文字上的东西,实际上的问题碰到才知道,见过才清楚,现在已经烧过3次6只驱动管了,防转垫片换过3只了,居然都在震动中把方孔都磨圆了,车轴也有一定程度的磨损。

出0入0汤圆

 楼主| 发表于 2011-7-10 11:13:19 | 显示全部楼层
这几天进一步分析st的BLDC驱动,说实在的,搞得真是复杂,比我想象中的直奔主题差得很多,他们编得很绕,看看我就得休息一下,不然头太大。今天我把他们的换相完全精简替换掉了,还没用上闭环控制,也没有用上我预想中的惯性预测,试验驱动竟然异常平稳,呵呵,简直是一种享受。立车实验,单一的加速度传感器在低通滤波的作用下显得过于迟滞,是时候加上陀螺仪了。回来再报告。

出0入0汤圆

发表于 2011-7-10 11:26:30 | 显示全部楼层
这个技术含量很高

出0入0汤圆

发表于 2011-7-10 11:30:27 | 显示全部楼层
话说,我认为它只能前后平衡,左右能自己平衡?我不大相信呢。

出0入0汤圆

发表于 2011-7-10 11:48:43 | 显示全部楼层
左右两边是如何的平衡的?

8楼的意见很中肯.
独轮的难度相当大.比武_警站的那个双轮难多了.  
动手前先要有规划. 预测一下可行性,  摸石头过河不合算的.

出0入0汤圆

 楼主| 发表于 2011-7-10 14:24:00 | 显示全部楼层
将陀螺仪芯片焊到加速度传感器模块上了,借用它提供的3.3V电源,因为没有专门设计PCB,外围电路就简化了,直接没有使用锁相环电路,这个可能关系不大,把Cact和Cload两个电容也省了,目前测量静态模拟输出是0.68V,这可比标称的1.65V低了不少,是什么影响这一数值的呢?

出0入0汤圆

 楼主| 发表于 2011-7-10 15:40:56 | 显示全部楼层
再次检查焊接,也没有发现更多问题,再次查看文档,那些不接的也不过是些低通滤波之用的,该不至于造成这样的结果,比较主板上的另一通道,对地电阻都是差不多的6.7k左右,说明也没有其它电路的串扰,这次准确记得输出电压是0.667V,刚粗略地编程也没能检测到它对角速度的反应。

出0入0汤圆

 楼主| 发表于 2011-7-10 16:38:41 | 显示全部楼层
又在网上查找资料,或许那个PLL锁相环是不可缺少的,寻求进一步的方案。不就两个电容一个电阻嘛,找到元件也不难焊上。

出0入0汤圆

发表于 2011-7-10 16:48:25 | 显示全部楼层
好像是左右靠自己平衡(像自行车一样),前后平衡就交给算法了,LZ继续加油,然后多来点图片,呵呵

发个视频大家看看
http://video.sina.com.cn/v/b/40278275-1232685954.html

出0入0汤圆

发表于 2011-7-10 17:41:55 | 显示全部楼层
看了视频,口水

出0入0汤圆

发表于 2011-7-10 17:48:12 | 显示全部楼层
关键是安全吗  安全问题怎们解决  如果在运行过程中失控 会导致非常严重的后果。
实现功能不难  难的是怎么做到安全

出0入0汤圆

发表于 2011-7-10 18:35:07 | 显示全部楼层
急刹车怎么办?总不能紧急情况的时候不刹车把。

出0入0汤圆

发表于 2011-7-10 21:51:01 | 显示全部楼层
急刹车还不是最严重的,那是反向,还好处理,人向后仰,最多刹得慢一点.

要是正向前跑得飞快时,路上又不小心碾到一桃核,或小石子.这脚下受阻,人必然向前仆,
这种条件下,电机本来己出力了,再要跳过桃核,超越人体倾倒的速度,.....这个暴发力就不是一点点.
如果这是1:1的直驱电机,扭力要是不够.就得准备啃泥地了.  

左右平衡就不说了,反正有思想准备,先接受培训.

出0入0汤圆

发表于 2011-7-10 22:24:31 | 显示全部楼层
高难度的东西...帮顶

出0入0汤圆

发表于 2011-7-10 23:50:40 | 显示全部楼层

出90入4汤圆

发表于 2011-7-11 08:12:12 | 显示全部楼层
先用在舞台表演啊
然后再推广...

这个比那个双轮的更有挑战

出0入0汤圆

 楼主| 发表于 2011-7-11 08:52:35 | 显示全部楼层
回复【28楼】stm32_boy
关键是安全吗  安全问题怎们解决  如果在运行过程中失控 会导致非常严重的后果。
实现功能不难  难的是怎么做到安全
-----------------------------------------------------------------------

    看名字,您应该是stm芯片的行家了,请多指教。

出0入0汤圆

 楼主| 发表于 2011-7-11 08:54:24 | 显示全部楼层
回复【26楼】trent5145
好像是左右靠自己平衡(像自行车一样),前后平衡就交给算法了,lz继续加油,然后多来点图片,呵呵
发个视频大家看看
http://video.sina.com.cn/v/b/40278275-1232685954.html
-----------------------------------------------------------------------

     做成这样是我的前期目标,我希望还能超越他。

出0入0汤圆

 楼主| 发表于 2011-7-11 08:55:53 | 显示全部楼层
回复【30楼】shsyf
急刹车还不是最严重的,那是反向,还好处理,人向后仰,最多刹得慢一点.
要是正向前跑得飞快时,路上又不小心碾到一桃核,或小石子.这脚下受阻,人必然向前仆,
这种条件下,电机本来己出力了,再要跳过桃核,超越人体倾倒的速度,.....这个暴发力就不是一点点.
如果这是1:1的直驱电机,扭力要是不够.就得准备啃泥地了.   
左右平衡就不说了,反正有思想准备,先接受培训.
-----------------------------------------------------------------------

    之所以选择做独轮的,除了其它原因以外,方便跳车也是其实用性原因之一。

出0入0汤圆

 楼主| 发表于 2011-7-11 10:36:09 | 显示全部楼层
回复【22楼】shsyf
左右两边是如何的平衡的?
8楼的意见很中肯.  
独轮的难度相当大.比武_警站的那个双轮难多了.   
动手前先要有规划. 预测一下可行性,  摸石头过河不合算的.
-----------------------------------------------------------------------

欢迎拍砖。

在嵌入式系统我是个新兵,在电机驱动和系统控制方面我也是个新兵,我必须参加新兵训练,然后成长为将军。我不为单位开发项目,不赶进度,不去采购别人的成品去解密模仿,从原理到实践,就是摸石头过河,这样过河才踏实。

出0入0汤圆

发表于 2011-7-11 10:42:12 | 显示全部楼层
很看好你这个项目,楼主加油,本来我也想做的,现在有人在先了,估计我得再找别的了

出0入0汤圆

 楼主| 发表于 2011-7-12 09:46:07 | 显示全部楼层
回复【38楼】wjhwpp
很看好你这个项目,楼主加油,本来我也想做的,现在有人在先了,估计我得再找别的了
-----------------------------------------------------------------------

这么看得起我,我不过是练练手罢了,不定得做多久做成什么样子呢,大家一起做一起切磋嘛。

飞线焊接小元件很不好操作,眼神也不好,手也不利索,好不容易连在一起试试强度就又断开了,还不说焊坏了没有。元件也难配到Datasheet中要求的,我用的陀螺仪是LY530ALH,哪位同学帮忙看看?我用10K电阻代替要求的9.5K,用103代替要求的9n电容,用两只105串联代替要求的450n电容,实在难以焊成,就自以为是的简化为用1只103电容飞线跨接在两个PLL引脚上,可惜测试结果还跟以前一样。

出0入0汤圆

 楼主| 发表于 2011-7-12 13:32:20 | 显示全部楼层
今天淘了一台热风枪、焊台合体的组合工具,原来使用的电烙铁该退役了——有了它,再拆换零件就该顺手多了,完全只能SMT的也应该可以用热风焊接了,去了我一个心病。另外近期可能需要先打样个传感器板,可以SMT我就少了许多顾忌。

出0入0汤圆

发表于 2011-7-12 17:21:22 | 显示全部楼层
这个东西还是不用软件来平衡的好,还是靠人比较灵活

出0入0汤圆

发表于 2011-7-12 17:36:19 | 显示全部楼层
真佩服lz的毅力和坚韧
在这个浮躁的社会里 希望lz一直坚持下去@ 支持你

出0入0汤圆

发表于 2011-7-12 19:43:55 | 显示全部楼层
左右靠人自己平衡的话,会不会和耍杂技的难度一样的呢?反正我是无法在静止的情况下骑稳两轮自行车的。

出0入0汤圆

发表于 2011-7-12 20:21:29 | 显示全部楼层
我还以为是全向的,球轮的..

出0入0汤圆

发表于 2011-7-12 23:08:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-13 00:00:14 | 显示全部楼层
玩电子的太烧钱啊

出0入0汤圆

发表于 2011-7-13 08:48:23 | 显示全部楼层
这个和成品的思维车是一样的,可以参考一下嘛

(原文件名:20090907201838800.jpg)

出0入0汤圆

 楼主| 发表于 2011-7-13 11:25:02 | 显示全部楼层
也不算太烧钱吧,2000元以内够玩很久的,呵呵。
    俺也认为跟思维车差不多,原理上完全可以借鉴,只是俺手头既没有那玩艺儿,也没有那资料。

    今天早上把昨天看到的锁相环知识再试一下,把103电容换成47K与104串联到PLL引脚,结果依然如故。难以相信是否ST脚直接接地的结果,难道它该是悬空的?我是没有严格按照要求去接,大不了得不到应有的稳定性,别直接连定性的东西都没有啊,也怀疑焊坏了,虽然也没有怎么烫太久。就这么旁枝末节的事,要否接着采购、画板,同时先编着程序?时间象流水...

出0入0汤圆

 楼主| 发表于 2011-7-13 13:54:28 | 显示全部楼层
正在准备驱动板和传感器板的原理图库,中间又看到一款“提供原理图 芯片资料 软件方面提供模块的程序例程”的“六轴姿态模块 MPU-3000+ADXL345”,与我正开发使用的控制板芯片可以I2C通信,如果他们提供的结果已经是计算好的姿态,我这里只要再学习使用I2C通信就可以了,可以加快开发进程,也还多了一个学习的模版,研发阶段不在乎成本高一点,若做产品,掌握了姿态计算以后也可以自己组合,这个策略应该是对路的。

出0入0汤圆

发表于 2011-7-13 21:46:39 | 显示全部楼层
嘿嘿,很好很强大。

出0入0汤圆

发表于 2011-7-14 18:03:48 | 显示全部楼层
那个当然不是计算好的姿态,只是同步输出

出0入0汤圆

发表于 2011-7-14 19:46:11 | 显示全部楼层
顶一个,牛人!!

出0入0汤圆

 楼主| 发表于 2011-7-14 20:59:23 | 显示全部楼层
回复【52楼】robotkid
那个当然不是计算好的姿态,只是同步输出
-----------------------------------------------------------------------

卖家先发来资料了,看着也象是您说的这样。

我还是想先尝试用滤波后的倾角计算出角速度甚至加速度,然后控制电机。

出0入0汤圆

 楼主| 发表于 2011-7-15 08:37:01 | 显示全部楼层
昨晚看了有关卡尔曼滤波的通俗解释,原来根本义就是拟合预测值和测量值误差,具体到平衡车,我看也未必要用什么协方差,把惯性因素考虑进去就能改善响应速度。现阶段我把驱动基本做好了,考虑陀螺仪无非是看中了它的响应速度,其实我也在想,即使不用陀螺仪,仅仅使用一轴加速度计近似测量倾角,进而计算角速度,角加速度,理论上也是可行的,据此做平衡驱动计算与以后再加陀螺仪也并无冲突,后者不过是测量取样上的改进。还想参考一下其它同学的平衡车代码,到现在还没有看过一段呢!

出0入0汤圆

 楼主| 发表于 2011-7-15 17:44:03 | 显示全部楼层
我刚编了一段线性滤波程序
        New_Angle_Value = ((Angle_data.Angle_Value + Angle_data.Angle_Speed)+hZval)/2;
        New_Angle_speed = New_Angle_Value - Angle_data.Angle_Value;
        Angle_data.Angle_Acc = New_Angle_speed - Angle_data.Angle_Speed;
        Angle_data.Angle_Speed = New_Angle_speed;
        Angle_data.Angle_Value = New_Angle_Value;
    其中hZval是采样值,New打头的是临时变量,带.的是数据结构,含义应该是明白的。
点击此处下载 ourdev_658184H1OCIY.xls(文件大小:18K) (原文件名:线性拟合.xls)

(原文件名:线性拟合图.JPG)

出0入0汤圆

 楼主| 发表于 2011-7-15 17:54:59 | 显示全部楼层
有兴趣的可以下载那Excel文件自行测试效果,改变第3列Sample的数值就可以了。从测试图表效果看,滤波响应比较快,我测试了匀速、匀加速及变速,中间故意参入白噪声,这么好的滤波效果我是很满意的。

出0入0汤圆

发表于 2011-7-15 18:35:30 | 显示全部楼层
不知道有没有研究这方面稳定系统的人。把系统方案定义清楚了再做,会比较清晰些。不然,有些感觉做到哪算哪,有问题再改进,会绕不少弯。

楼主找的这个项目还是很不错的,关注一下。

最近也在想找个项目做做,但是没有楼主这么好的想法。

出0入0汤圆

 楼主| 发表于 2011-7-15 19:43:31 | 显示全部楼层
又做了个尝试,看看把加速度考虑进来会怎样影响拟合结果,结果,因为加速度是高阶微分,反而引入了抖动,而且反应还滞后,看来只能是“线性”一次方拟合了。有兴趣的可以自己添加一列计算以对比。

出0入0汤圆

发表于 2011-7-15 20:02:17 | 显示全部楼层
做这种应用,估计得DSP才行。

出0入0汤圆

 楼主| 发表于 2011-7-16 09:23:53 | 显示全部楼层
那是正统回复【60楼】hexenzhou
做这种应用,估计得dsp才行。
-----------------------------------------------------------------------

那是“正统”卡尔曼一类的吧,俺这几个运算很简单的,正在写基于单轴加计的控制代码。

出0入0汤圆

发表于 2011-7-16 10:48:51 | 显示全部楼层
这东西本来就不简单,在路上行驶的计算的因素多的很,倾角和加速度传感器的水深的很,用那些低级的传感器想搞出正确的数据不容易,一般单片机速度也不够,加上电机控制也不是那么简单.

出0入0汤圆

 楼主| 发表于 2011-7-16 11:49:33 | 显示全部楼层
回复【62楼】robotkid
-----------------------------------------------------------------------

    呵呵,谢谢!水有多深?现在不过是齐腰深吧,等我越长越大、越长越高,水就越变越浅了。我觉得这是我能力所及的值得一搞的地方,现在差什么?固件都有啦,程序也有谱啦,电机控制可以闭环了,给定60rpm测两分钟就是120圈,正反转,加减速都平稳了。我对上面提到的惯性预测线性滤波有信心,新买的陀螺仪模块在路上了——这不是天大的困难。
    BLDC_Set_Target_rotor_speed(K_TILT*Tilt+K_SPEED*Angle_data.Angle_Speed*g_pBLDC_Struct->pBLDC_Var->hMeasured_rotor_speed);        //目标速度随静态倾角乘一个系数,另外随角速度在当前速度基础上增加一个比例用于平衡
    这是才写的语句。原来的程序只是简单的启动、运转、停止,现在的问题要协调静态角度、动态速度、目标速度和转向、当前速度和当前转向,还不说参数比例,还真有点费脑筋,头疼。

出0入0汤圆

发表于 2011-7-16 15:42:08 | 显示全部楼层
继续关注

出0入0汤圆

 楼主| 发表于 2011-7-17 08:56:30 | 显示全部楼层
做好了车轮运动方向与速度测量。
    现在看,静态车速本来只是静态角度的函数,那么加速度其实也只是角速度的函数了,角加速度其实是没有意义的了,在车速基本对应倾角的情况下,临时的车速加减调整都是为了平抑倾角的变化,要求及时而不引起震荡,这与一般的控制要求是一样的,PID反馈原理应当是同样适用的。
    现在无所谓正反转了,车速和倾角都是带方向一维的。考虑倾角的变化,有如下情况:
  1:倾角较大,车速较低,甚至倾角有正速度,在PID正向调整范围内驱动车轮正向运转
  2: 倾角减小,PID计算的正向驱动输出降到下限,进一步的减速需要通过电磁刹车
  3:在刹车可调整的范围内调整车速,如需加速,刹车量减到零时重新回到1
  4:如刹车已达最大值,或者车速已经降为零,进一步的减速需要设置驱动反向,调整PID参数进行反向驱动的PID
  5:车速为负的情况下只做驱动反向的PID调节,输出降到下限时启动正向驱动回到1
    因为车速大多是正向运转的,反向只是短暂的为了平衡,所以正向时的电磁刹车有节能的作用。

出0入0汤圆

 楼主| 发表于 2011-7-17 20:12:20 | 显示全部楼层
晚上主要写了这两段程序,其一是高层控制部分:
                                switch(g_pMotorVar->bDrivingState)
                                {
                                        case FORWARD_DRIVING:
                                                outPid = PID_REG(hTargetSpeed,g_pMotorVar->hMeasured_rotor_speed ,g_pPID_Speed);
                                                if(outPid == g_pPID_Speed->pPID_Const->hLower_Limit_Output)        //调整已达下限
                                                {        //动用电磁刹车,如果达到100%再寻求反向驱动
                                                        g_pPID_Speed->pPID_Var->wIntegral = 0;        //更改驱动方式前积分相清零
                                                        g_pMotorVar->bDrivingState = MAGNETIC_BRAKING;
                                                }
                                                break;
                                        case MAGNETIC_BRAKING:
                                                outPid = PID_REG(-hTargetSpeed,-(g_pMotorVar->hMeasured_rotor_speed) ,g_pPID_Speed);
                                                if(outPid == g_pPID_Speed->pPID_Const->hLower_Limit_Output)        //刹车调整已达下限
                                                {        //恢复使用正向调整
                                                        g_pPID_Speed->pPID_Var->wIntegral = 0;        //更改驱动方式前积分相清零
                                                        g_pMotorVar->bDrivingState = FORWARD_DRIVING;
                                                }
                                                if(outPid >= hArrPwmVal)        //刹车调整已超过100%的占空比
                                                {        //刹车达到100%再寻求反向驱动
                                                        g_pPID_Speed->pPID_Var->wIntegral = 0;        //更改驱动方式前积分相清零
                                                        outPid = 0;                                                                                                                        //反向驱动前将调整值设为最小,以免冲击
                                                        g_pMotorVar->bDrivingState = BACKWARD_DRIVING;
                                                }
                                                break;
                                        case BACKWARD_DRIVING:
                                                outPid = PID_REG(-hTargetSpeed,-(g_pMotorVar->hMeasured_rotor_speed) ,g_pPID_Speed);
                                                if(outPid == g_pPID_Speed->pPID_Const->hLower_Limit_Output)        //调整已达下限
                                                {        //恢复使用正向调整
                                                        g_pPID_Speed->pPID_Var->wIntegral = 0;        //更改驱动方式前积分相清零
                                                        g_pMotorVar->bDrivingState = FORWARD_DRIVING;
                                                }
                                                break;
                                        default:
                                                        g_pMotorVar->bDrivingState = FORWARD_DRIVING;
                                                break;
另一段是底层执行部分:
                        //不管正反转还是刹车,都更新控制量,具体应用由后续程序处理
                        g_pBLDC_Struct->pBLDC_Var->hDuty_cycle = Set_Duty(*pDutyCycleCounts_reg);
                        switch(g_pMotorVar->bDrivingState)
                        {        //这里与MC_BLDC_DRIVE.C中的BLDC_Drive配合,这里是底层驱动,那里是高层计算
                                case FORWARD_DRIVING:
                                        PhaseSteps = PhaseSteps_CW;
                                        bHallSteps = bHallSteps_CW;
                                        break;
                                case MAGNETIC_BRAKING:
                                        PhaseSteps = PhaseSteps_BRK;        //不管霍尔状态,只管让使用刹车专用struct
                                        break;
                                case BACKWARD_DRIVING:
                                        PhaseSteps = PhaseSteps_CCW;
                                        bHallSteps = bHallSteps_CCW;
                                        break;
                                default:
                                        break;
                        }
编译通过了但还没经过烧写验证,不过应该有个差不多,呵呵。

出0入0汤圆

 楼主| 发表于 2011-7-18 10:35:36 | 显示全部楼层
烧了一试——呵呵,好事多磨,没那么简单就成功,想不出具体的问题了,就是有没有想到的问题。刚烧完就响声大作,初步判断,以前还把滤波后的角度值除以4再用,现在居然还乘了一个正整数放大,其它算法上可能是成立的,但参数可能离合理还差很远,这几天程序改动较大,中间都没有烧写验证,查错还得费点功夫,仅仅靠一只灯的指示排查难度较大,渴望有个“上位机”了。
    原来也看论坛中的一些帖子,看得似懂非懂,抓不住要点,经过反复研究实践再回去看,理解得就又不一样了,“螺旋上升”,这是至上哲理,计划赶不上变化,大的方向要坚持,小的细节要摸索,这样的成功经历是常有的。

出0入0汤圆

发表于 2011-7-18 10:42:50 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-7-18 11:03:47 | 显示全部楼层
看看这段,我原来也是读过的,竟然没有丝毫印象,自己费劲想到,竟与他人也不谋而合。
Motor Output = Kp × (Angle) + Kd × (Angular Velocity)

What exactly Motor Output does is another story. But the general idea is that this control setup
can be tuned with Kp and Kd to give stability and smooth performance. It is less likely to
overshoot the horizontal point than a proportional-only controller. (If angle is positive but angular
velocity is negative, i.e. it is heading back toward being horizontal, the motors are slowed in
advance.)
    只是,我还不是简单的平衡车,不是仅仅正反转动维系平衡就行了,我要考虑骑行的情况,当然在差不多的情况下,人的自主平衡性对骑行也是有帮助的,这也是我看好电动独轮车的原因。
    单轴加计的动态性能肯定是不够的了,尤其模拟输出信号的,更是容易受到电源电压波动及无线电干扰,震动的干扰对数字输出的都一样,就不说了,只是对AD采样容易理解,好上手,所以就先采用了模拟输出的方式。昨天检测通过加计计算的角速度,发现波动大于4,即使正向偏转中也可能测到反向超过4的角速度,反之亦然,这叫我不好接受。
    接下来的工作主要放在I2C通信编程上,把将要到货的6轴姿态传感器用上。

出0入0汤圆

发表于 2011-7-19 10:54:16 | 显示全部楼层
看样子楼主没做过双轮的,还是先做好那个再说了,单是调电机按想像中的速度就不容易了.我和你的用料差不多,也是STM32,6轴的板.6轴板的那位卖家从来都没分析过数据的,以前买过他一个LPR550AL板,加速和角速设计位置完全错的,电路也不过关.我也暂时用一用,以后还是要自己做板,画好定位框,机器贴片才准.想用那个板做成品单轮车简直是做梦.

出0入0汤圆

 楼主| 发表于 2011-7-19 15:34:40 | 显示全部楼层
回复【70楼】robotkid
-----------------------------------------------------------------------

    哈哈,我一直没有拜读您的大作。
    那个6轴板到了,真是匪夷所思,陀螺仪和加计的方位不一致,当然这个还可以自定义,只不过总要多费脑筋,什么VDD、VS没有连接,两个芯片间也要我另外搭线,给的文档也不关联,这是我碰到的第二个二把刀卖家了,第一个是BLDC的无霍尔驱动DEMO,那板子上的MOS管正好被我拆下来修复烧坏的控制板,那上面的插针也正好被我拆下来连接SWIM,总算没有一无是处。不知道那两位泡不泡这个论坛。
    我是手上有stm8s105,就用这个了,反正他们的外设什么的是方便移植的,能用就行了。今天正在搞中断I2C,据说ST的硬件I2C挺难调的,我还没有完成。

出0入0汤圆

 楼主| 发表于 2011-7-19 20:14:56 | 显示全部楼层
好奇怪呀,ST的I2C详细文档及库例程都没有反映MASTER模式下送出对SLAVE的接收数据寄存器地址。
呵呵,念着不怎么通顺,反正就是它居然直接少描述一个过程。

出0入0汤圆

 楼主| 发表于 2011-7-20 09:10:11 | 显示全部楼层
直接看来,ST的硬件I2C不好与那个传感器板通信,ST的10位地址描述比较接近,但是所谓的Header是否要求必须是那些位,并没有明说,如果自己去读状态位分析还要不少费事。弹ST。

出0入0汤圆

发表于 2011-7-20 09:25:26 | 显示全部楼层
希望楼主尽快做出产品来,加油。小弟向你学习

出0入0汤圆

发表于 2011-7-20 10:25:58 | 显示全部楼层
那个MPU3K模块的只为了赚钱,从来就没分析过自己板的数据.哪像我们真正用家,我准备按评估板的电路,直接机器贴一批出来,只要这样一做基本上是市面少有的好模块了,那些为了赚钱的从来没考虑过从主控板上拿电(多是AM1117),电源上就开始抖动了,手工焊接物理上又有误差,根本就不能拿到准确的数据,后面就更不用说.

出0入0汤圆

 楼主| 发表于 2011-7-20 10:30:16 | 显示全部楼层
术有专攻,咱们研究咱们的,他们作为上家应该做好他们的。
刚才找到了较新的stm8系列的I2C详细编程资料,加以甄别移植后,应该不久就可成功通信了,期待中,呵呵。

出0入0汤圆

发表于 2011-7-20 12:01:51 | 显示全部楼层
STM32只能用的软件I2C,和加速度简单闭环做好了,朋友的电机驱动还不错,基本和理论值对应,还要用多些小电机测试中.

出0入0汤圆

发表于 2011-7-20 12:11:19 | 显示全部楼层
我很关注他…… lz

出0入0汤圆

 楼主| 发表于 2011-7-20 16:36:18 | 显示全部楼层
今天对还算比较好的ST的I2C中断例程库做了大量的勘误修补,看来他们的文档整理还需要多下点功夫,说明文档也是错漏不完整的,难怪说功能那么强,价格却比较便宜,便宜也是有道理的呀。还没实测,希望不要辜负我的一场辛苦。

出0入0汤圆

发表于 2011-7-20 16:47:41 | 显示全部楼层
厉害

出0入0汤圆

 楼主| 发表于 2011-7-20 18:24:46 | 显示全部楼层
还得修补,中断方式还是没有包含寄存器地址访问,需要从包含该功能的轮询方式嫁接过来,唉,真不容易!

出0入0汤圆

发表于 2011-7-20 18:37:21 | 显示全部楼层
老师提到过这类控制和驱动系统的设计要点是:首先保证采样率。其次具体的控制的参数选用和形式不要拘泥课本,要考虑单片机的负荷和实际的效果,但是一定要经过实践检验,即使能在一般条件下平稳工作的算法,也要在电脑上建模之后模拟各种极端情况来测试,实际测试可能会是破坏性的。仅供参考

出0入0汤圆

发表于 2011-7-20 19:38:53 | 显示全部楼层
楼上的有点像大话西游的唐僧啊,电机上有编码器,我也开始做速度环和位置环了,其实这个的关键是电流环,但那些深奥的慢慢来了.

出0入0汤圆

发表于 2011-7-21 01:22:51 | 显示全部楼层
回复【83楼】robotkid  
-----------------------------------------------------------------------

我只是想起来说两句,如果有错误请 指出,谢谢

出0入0汤圆

发表于 2011-7-21 08:55:41 | 显示全部楼层
这个项目必须整一个上位机程序,把各种状态参数用数值和曲线的方式显示出来。

出0入0汤圆

 楼主| 发表于 2011-7-21 09:46:58 | 显示全部楼层
楼上各位讲得都有道理,受教了,理论与实践相结合,研发与探讨相结合。
昨天晚上开始调试I2C,一开始总不见数据传输跑起来,先是发现程序有个赋值语句错成判断句,继而发现那6轴板的一个地址定义管脚应当接恒定电平的却悬空着,导致无应答,修正之后,可以进行到写控制字节了,但是送出读命令之后还是没有得到反馈,只偶尔一次,好像见到接收缓冲区数据有改变,余下时间都只能写,读命令没能完全执行。再说明一下,包含寄存器地址访问的程序我还没有嫁接,因为对I2C的协议内容我并不清楚,只是看收发器件的表述,好像这样应该也可以:先对从设备写一个内容为寄存器地址的单字节(之前包含方向为写的设备地址),然后重新发送起始位,对从设备写一个方向为读的设备地址就可以等待接收数据了。

出0入0汤圆

发表于 2011-7-21 10:35:16 | 显示全部楼层
mark!

出0入0汤圆

 楼主| 发表于 2011-7-21 16:28:16 | 显示全部楼层
根据ST的Errata sheet(勘误表,还是第一次接触这个东西,呵呵,都商业应用了!),把I2C中断处理程序不可延时的地方前后加了关、开中断的语句,一时也想不出会有什么问题了,稳定不稳定的也先给个结果看看吧。ST的程序框架还是值得肯定的,有模有样,还比较严谨,有些纰漏还让人惊讶了。

出0入0汤圆

发表于 2011-7-21 21:49:25 | 显示全部楼层
我也刚拿到那个6轴的,不是第一次帮那家伙买东西了,想不到这次更差,楼主还是先用模拟的I2C试试吧,我是暂时还读不出来,没技术支持谁还要那个板,问2下那家伙就下线了.

出0入0汤圆

 楼主| 发表于 2011-7-22 10:07:32 | 显示全部楼层
回复【89楼】robotkid
-----------------------------------------------------------------------

是,有时是别人代答他不在,就算在也够呛,看看我另外搭的线

(原文件名:SNC00102_2.JPG)

早上才把MPU3000的VL线接VDD,把仿真板CPU电源调成3.3V后也没见改善,这两项没动之前写个字节还有ACK,现在连写地址也没有反馈了,有点用脑过度,不得不停一下,也应该这样,休息一下还明白些,不然总在乱摸索。

出0入0汤圆

发表于 2011-7-22 12:09:53 | 显示全部楼层
原来也调过他的旧板,以为这个一拿回来就直接上算法了,现在也调的头晕,不知道楼主是不是也差不多年纪?下午花点钱给别人搞算了.
等朋友探亲回来直接按评估板来打几片板先,这个直接用主控板上的AM1117,抖动很大,迟点还要上电机驱动,电源更不稳定.

出0入0汤圆

 楼主| 发表于 2011-7-22 13:49:43 | 显示全部楼层
回复【91楼】robotkid
原来也调过他的旧板,以为这个一拿回来就直接上算法了,现在也调的头晕,不知道楼主是不是也差不多年纪?下午花点钱给别人搞算了.
等朋友探亲回来直接按评估板来打几片板先,这个直接用主控板上的am1117,抖动很大,迟点还要上电机驱动,电源更不稳定.
-----------------------------------------------------------------------

老兄,我估计年长过你,哈哈。

这个不管多大困难我都要自己搞,求帮助也好,找资料也好,我必亲自调好,首先这是积累的过程,实践出真知,其次我也不赶时间,总是厚积薄发,只要我功夫深,将来做什么还不都一样功夫傍身?!这歇一歇,我就又有主意了,即使那个MPU3000有困难,还有个ADXL345更简单也可以单独I2C通信的,也不妨试试。是需要花功夫的,累了就歇歇。

出0入0汤圆

发表于 2011-7-22 22:31:09 | 显示全部楼层
MPU3050读出来了,抖的很啊,我有IDG300和ADXRS300相比,好像比较差

出0入0汤圆

发表于 2011-7-23 15:17:59 | 显示全部楼层
我现在也正在弄这种小车,读了 laugh 拉夫和robotkid两位前辈的帖子,感觉受益良多。我现在正准备购置零件,一些欲购零件如下:
【姿态模块】:三轴陀螺仪+三轴加速度计=六轴姿态模块 MPU-3000+ADXL345 ,298元。【应该和两位楼主用的六轴板是同一种类型,甚至同一个卖家。但看两位楼主的意思,该六轴板好像不太规范。那怎么办呢?是分开买三轴陀螺仪和三轴加速度计然后再整合;还是就买这个六轴板,然后加以改进。但改进的话能改好吗?不要越改越坏。请两位楼主给我些意见。】
【主控板】:DFRduino nano 328控制板 (Arduino Nano Compatible) ,163元。【有的人说arduino nano的板子就行,但我不知道这一款的主控板能不能满足实际需要?也不知道它和刚才那个传感器之间的接口能不能对上?他们之间的通信有没有问题?还是用stm32好一些?】
【电机驱动器】:通用型直流电机伺服驱动器,470元。【楼主用的好像是电动车通用控制器,不知道你用的和我用的那个更好一些。请给我一些意见,我好去订购。】
电机轮毂:12寸一体式轮毂电机,383元。
还有就是锂电和电机方面,能不能多给些意见?谢谢!

出0入0汤圆

发表于 2011-7-23 18:02:31 | 显示全部楼层
楼主那个板的焊法基本是一厢情意,同步ADXL345到MPU3050中是不可能的,除非有厂家级对DMP的技术支持.那家伙选错了配对的IC,如果用MXC6202还有可能行,不过那是2轴的,ADXL345设置的比较多.准备自己做板了,淘宝上的真是没几个行的

出0入0汤圆

 楼主| 发表于 2011-7-23 18:12:41 | 显示全部楼层
不断摸索,总会越来越熟悉,在调试I2C的过程中,发现对DEBUG的程序按钮还有误解,导致有些调试操作是错误的,另外传感器芯片没有复位电路,有些通信到半路中止了,它也不知道,搞得状态不协调,这样在重新开始调试时就需要给它断电重启,稍稍麻烦的还有,那个芯片的说明着重强调了它的两个电源启动的时序要求,这是没把握满足的,它希望逻辑电源上电不能早于主电源,电压不能高于主电源,而且电压上升要单调上升,不能有抖动,不然可能就初始化不成功。
    还发现一个麻烦事,stm8s的I2C状态寄存器的清ADDR标志并不如他们所描述的那么样,读SR1以后读SR3就可以了,在步进调试中,就发现不用读SR3,那个ADDR标志就自动消失了,甚至连SR1都没有读,在Write操作中不停止程序,程序可以正常通过读SR1、读SR3的方式清除ADDR标志,但是在Read操作中,即使不停止程序,也没有等到程序来清零,导致流程错误,要命的是,在读操作中,程序还没来得及清标志准备接收数据,就能见到从设备不断发来数据,DR寄存器总在更新,奇也怪哉!

出0入0汤圆

 楼主| 发表于 2011-7-23 18:17:05 | 显示全部楼层
回复【95楼】robotkid
楼主那个板的焊法基本是一厢情意,同步adxl345到mpu3050中是不可能的,除非有厂家级对dmp的技术支持.那家伙选错了配对的ic,如果用mxc6202还有可能行,不过那是2轴的,adxl345设置的比较多.准备自己做板了,淘宝上的真是没几个行的
-----------------------------------------------------------------------

我也发现,ADXL345与MPU3000的高低字节顺序是反的,在前者的数据格式中可以设置左或右对齐,但高低顺序是固定的,MPU3000一厢情愿的认定的高低字节顺序是不能与ADXL345协调的。当然如果继续用它这个板子也没问题,就是打开MPU第二I2C的直通,直接读取加计中的数据就好了。

出0入0汤圆

发表于 2011-7-23 20:07:58 | 显示全部楼层
看到楼主的研究非常值得去做,现在已经很少人愿意从0开始,我也是个电子爱好者,我也在关注这方面的讯息,也做了些尝试,但基础薄弱,难以深究,我试图在不使用平衡系统的情况下使用这个小车,这需要些辅助工具,现在还在加工,希望能得到一些启发与大家分享。坚持

出0入0汤圆

发表于 2011-7-23 20:15:10 | 显示全部楼层
回复【8楼】robotkid  
这个真是只能玩玩了.
算法难很多的,转动的时候有个倾斜角,3轴都要修正.表面看容易,其实对应控制变化要多非常多,就算是做出来,但老是摔,玩2下就没兴趣.而且这个最大难度还不在于平衡算法,驱动国内就做不好.先玩好2轮,然后上单轮重心自摆自动平衡车,最后才上这个.
-----------------------------------------------------------------------
对于电机驱动器的话,我推荐武汉若比特机器人有限公司研发的通用型直流电机伺服驱动器,这种驱动器貌似很强大,但不知道能不能符合要求。

出0入0汤圆

发表于 2011-7-23 20:18:57 | 显示全部楼层
回复【5楼】laugh  拉夫
-----------------------------------------------------------------------
是不是你用的电动车通用控制器太简单了,导致驱动出问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 23:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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