搜索
bottom↓
回复: 22

大神快进来!自平衡小车直立环求救求救

[复制链接]

出0入0汤圆

发表于 2015-11-12 16:02:52 | 显示全部楼层 |阅读模式
断断续续的自平衡车搞了一个月了,最近在调直立环,驱动用的L298N,
每5MS一次中断处理,
L298N频率设为不分频率psc=0(72Mhz),周期arr设为255,
比例系数各种都试过了(调节直立环只用P参数就可以立起来),
但是我试过了各个P值,发现车子最多只会大幅度摇摆几下之后就朝一边加速倒下
一开始我以为重心不对,就换了下电池的位置,问题依旧
接着又调了下角度的0点,问题依旧
所以现在我有点怀疑是不是L298N的5MS响应速度不够,(电机应该是没问题的)
在此有没有用L298N的大神指点下啊,小弟在此谢了!!!!!!!

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

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

出0入0汤圆

发表于 2015-11-12 17:31:33 | 显示全部楼层
没有搞过平衡小车的飘过

出0入0汤圆

发表于 2015-11-12 19:04:01 | 显示全部楼层
搞个1KHz位置环,调节方向有没有搞错?没有直立环的这个说法的吧。

出0入0汤圆

发表于 2015-11-12 19:09:30 | 显示全部楼层
上代码先

出0入0汤圆

 楼主| 发表于 2015-11-12 23:57:01 | 显示全部楼层
芯片使用的是STM32
其中通过
tim3_pwm(7199,0);         
设置PWM的频率此时为72*10的6次方/7200=10000HZ
我说的直立环就是只改变P参数(先设置微分PD为0,就只有P参数了)
但是我发现当PWM的频率为10000HZ的时候,在角度0度的附近拿起车子摇晃感觉不到明显的高频震动,反而
把频率设置为很低(50HZ)的时候却可以感觉到高频震动,但是还是不能直立起来
到底L298N此时应该怎么设置才对呢

下面是代码
float Get_angle()
{
        Accel_Z=getAccZ();
        Accel_X=getAccX();
        Angle_ax=atan2(Accel_X,Accel_Z)*180/PI;
        Angle_ax=Angle_ax;
  Gyro_Y1 = getGyroY()+8;
  Gyro_Y2 = (Gyro_Y1 )/16.4;
  Yijielvbo( Angle_ax,  -Gyro_Y2);
       
        return angle;       
}
int balance(float Angle,float Gyro)
{  
   float Bias,kp=400,kd=0,a;
         int balance;
         Bias=Angle;           
         a=kp*Bias+Gyro*kd; //KP就是P参数 KD==0;
         balance=(int)a;
         return balance;
}

出0入0汤圆

 楼主| 发表于 2015-11-12 23:57:29 | 显示全部楼层
mandylion2008 发表于 2015-11-12 19:04
搞个1KHz位置环,调节方向有没有搞错?没有直立环的这个说法的吧。

大神请看看我的代码吧

出0入0汤圆

 楼主| 发表于 2015-11-12 23:58:00 | 显示全部楼层
mandylion2008 发表于 2015-11-12 19:04
搞个1KHz位置环,调节方向有没有搞错?没有直立环的这个说法的吧。

请您看看代码

出0入0汤圆

发表于 2015-11-13 00:07:53 | 显示全部楼层
先把你的小车(反馈机制)发上来看看

出0入0汤圆

 楼主| 发表于 2015-11-13 00:47:48 | 显示全部楼层
yick 发表于 2015-11-13 00:07
先把你的小车(反馈机制)发上来看看

你好,现在调的只是怎么站起来(直立环) 并不是速度环, 不需要用到编码器反馈调节。

出0入0汤圆

发表于 2015-11-13 08:05:04 | 显示全部楼层
本帖最后由 mandylion2008 于 2015-11-13 08:06 编辑

对于PID控制,其实可以解决90%以上的问题,现代控制理论基本就是然并卵。
首先应该考虑你的角度测量稳不稳定,再NB的控制器也没法体现性能。你观察过你的角度输出吗?
采样周期对控制系统的性能影响极大。

出0入0汤圆

发表于 2016-1-14 13:57:17 | 显示全部楼层
楼主这个问题解决了吗
我现在也碰到了类似的问题了

出0入0汤圆

发表于 2016-1-14 13:58:02 | 显示全部楼层
楼主解决这个问题了没
我也碰到类似的问题了

出0入0汤圆

发表于 2016-1-14 19:43:41 | 显示全部楼层
飞思卡尔直立方案里,P和D是一块儿调的。

出0入0汤圆

发表于 2016-1-29 12:34:29 | 显示全部楼层
tcscy 发表于 2016-1-14 13:58
楼主解决这个问题了没
我也碰到类似的问题了

你好,我现在也在做平衡小车,用的也是L298N,也出现了往一边倒的情况,请问你的问题解决没,到底是哪里出了问题,我都快奔溃了,我QQ2368249089,希望能加你,可以交流一下吗,看到后望回复,谢谢你了。

出0入0汤圆

发表于 2016-1-29 22:28:17 | 显示全部楼层
暮秋之子 发表于 2016-1-29 12:34
你好,我现在也在做平衡小车,用的也是L298N,也出现了往一边倒的情况,请问你的问题解决没,到底是哪里 ...

我的问题  已经解决了
首先把MPU6050 调好,左右摆动小车 Pitch能跟随变化,就说明mpu6050调好了
然后就是慢慢调直立环的参数了,调节平衡车直立环不需要用到电机编码器的数据
小车加速向一边倒去,估计是读MPU6050的数据  读的不对,Pitch数据不对

出0入0汤圆

发表于 2016-2-1 20:15:47 | 显示全部楼层
tcscy 发表于 2016-1-29 22:28
我的问题  已经解决了
首先把MPU6050 调好,左右摆动小车 Pitch能跟随变化,就说明mpu6050调好了
然后就 ...

怎么判断数据对不对呢,我的数据有跟随啊,你在调参数时是根据什么原则来调的?我QQ2368249089,方便加我,我想请教一下。

出0入0汤圆

发表于 2016-2-1 20:34:33 | 显示全部楼层
    我之前做过自平衡小车,我说一下我的怎么做的哈:
    1、我用的mpu6050的dmp库,当然返回的是欧拉角,也就是pitch和roll还有raw,虽然最高处理速率是200HZ,对付自平衡小车足够了,就没有用其他的算法;
    2、一共用了两层嵌套的PID和一层叠加的PID(可以说是伪三层?),第一层就是利用mpu6050的返回的roll或pitch(看你小车摆放位置)来保持小车的直立,第二层是利用电机的编码器返回值来确定小车的位置,使小车保持不动,第三层是利用mpu6050返回的yaw角来使小车不会自旋(raw会飘不过影响不大);
    3、我用的驱动也是l298n,这个驱动做自平衡就足够了;
    大概就这些吧,看了楼主的问题,我想说一下我当时调PID时候调整频率是25ms一次,就足够了,太快了板子负担会有点大,至于小车会向一边倒,调过零角度点,其他没问题,应该就是参数没调好的问题吧。。,光调节P小车不容易站住的,时间稍长肯定会朝一边倒,楼主单独调完P再调I和D吧,调完和一起,说不定就站起来了!
    希望我的经验能帮助你哦。

出0入0汤圆

发表于 2016-2-17 11:12:10 | 显示全部楼层
北大实验室606 发表于 2016-2-1 20:34
我之前做过自平衡小车,我说一下我的怎么做的哈:
    1、我用的mpu6050的dmp库,当然返回的是欧拉角, ...

看了你写的,很有启发,打算再折腾一下,我QQ2368249089,望大神加加,有问题请教。

出0入0汤圆

发表于 2016-2-17 11:28:57 | 显示全部楼层
北大实验室606 发表于 2016-2-1 20:34
我之前做过自平衡小车,我说一下我的怎么做的哈:
    1、我用的mpu6050的dmp库,当然返回的是欧拉角, ...

还有一个问题我想问一下,就是PWM的占空比的问题,我给的自动重装载值是7200,可当占空比比较小的时候电机根本不动,也就造成了小车的反应很慢。在网上查了说是有死区电压,所以我在给定PWM时加了一个基值,我加了3500,这样小车的反应的确很快,只要有个小偏角,占空比就变为百分之百了(我现在还没加限幅),这样小车调节时很剧烈,想问问你是怎么解决的,你有加基值吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-2-18 12:35:12 | 显示全部楼层
       我QQ2368249089,关于你提到的PWM低频时调试时有低频抖动,高频时没有抖动,个人理解如下:
       今天针对L298N高频时效率较低的问题自己做了实验,我将原来10KHZ的频率降至200HZ,这时小车的反应变快了,这是因为L298N的效率变高了,输出的电压值变大了,所以在小角度时高频PWM电机不动,可低频PWM时电机会动。可与此同时出现了另外一个问题,就是电机在低频PWM时会发出吱吱的响声。由于PWM频率太低了,小车小角度偏离平衡位置时,PWM占空比较小,电机能量太低无法启动,电能被转换成声能了。我觉得频率低的话,你把能量看成一块块的,低频低占空比的话,就相当于给电机的送能量的值小且慢,不足以驱动电机,如果高频的话,能量小,不过送的快的话电机一样能动。
      现在我的小车低频时电机会吱吱响,调试时小车还是不能很好的平衡,希望能加楼主交流一下。

出0入0汤圆

发表于 2016-2-21 17:21:56 | 显示全部楼层
暮秋之子 发表于 2016-2-17 11:28
还有一个问题我想问一下,就是PWM的占空比的问题,我给的自动重装载值是7200,可当占空比比较小的时候电 ...

占空比分7500档,然后基值就3500? 好高啊 我当初是1000档 死区电压是40 这个可以大概测出来

出0入0汤圆

发表于 2016-2-24 11:15:41 | 显示全部楼层
北大实验室606 发表于 2016-2-21 17:21
占空比分7500档,然后基值就3500? 好高啊 我当初是1000档 死区电压是40 这个可以大概测出来  ...

现在我把L298N的频率降低到100HZ,它的频率明显提高了,现在我用的自动重装载值还是7200,基值现在改为1000左右就可以了,这种状态下下车的响应就很快可,现在想问问你你当时40这个值是怎么确定的?

出0入0汤圆

发表于 2016-3-12 13:26:09 | 显示全部楼层
暮秋之子 发表于 2016-2-24 11:15
现在我把L298N的频率降低到100HZ,它的频率明显提高了,现在我用的自动重装载值还是7200,基值现在改为10 ...

电压死区就是电压上升到电机转动的那一刻,然后比那个电压值稍微低点就行了,我们当时是写了个简单的程序算法测电压死区的平均值,然后再减去经验值就行了,依据经验值调整小车的灵敏度,大概就是这样吧。。不知道正不正统,不过效果还不错。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 06:58

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

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