智能车制作

标题: 疯狂的电机 [打印本页]

作者: imaxaioxi    时间: 2018-3-22 23:38
标题: 疯狂的电机
本帖最后由 imaxaioxi 于 2018-3-22 23:40 编辑
各位车友,本小菜向各位大佬问声好!无事不登智能车论坛,本菜菜在智能车制作过程中又遇到了新问题,还请各位大佬帮忙
话说本菜菜最近在做电机闭环,在调节pid的时候遇到了一些问题,不是很明白.
首先,本菜菜放在赛道上之前,使用虚拟示波器观察其速度曲线,调了一个很好看的波峰,只有一个峰哟,[attach]92307[/attach]
如图,还不错吧,于是本菜菜强忍着内心的愉悦,迫不及待的把车子放在赛道上试了试(考虑到赛道的摩擦力,要想输出同样的速度,应该需要更大的占空比吧,要输出更大的占空比的话,电机pi系数也应该增大吧,于是本菜菜增大了相应的系数,比如ki原来是0.2,本菜菜增加到了0.22,就是这个样子),但是把车子放到赛道上以后,车子的疯狂的跑了起来,根本不像我设定的速度,而且直道一会快,一会慢,明显震荡,当时我的心是奔溃的,于是想使用虚拟示波器查看曲线,无奈发送函数时间太长,影响了控制周期,结果图像就看不成了,于是本菜菜从0.01从头开始调,一直调到0.20,也没觉得电机很乖巧,ki小的时候,电机启动贼慢,大的时候吧,电机又不稳定,
想问下各位大佬是怎么做电机闭环的?(对了,本菜菜使用的是增量式pid)
对了,本菜菜在车子跑的时候感觉到车子启动时在赛道会有打滑的现象,这会不会影响呀?
希望各位大佬能够为本菜菜指点一下,不用太细,本菜菜知道有些学校是不会外传的,所以各位大佬只需提点一下,剩下的就让本菜菜去悟吧!
附增量式电机pid代码:
  1. void Speed_deal(void)
  2. {
  3.     error_speed_left = (double)(speed_left_set - speed_left_real);
  4.     d_speed_left_out = (int) ( Kp_speed * (error_speed_left-error_speed_left_last) +  
  5.     Ki_speed * error_speed_left +
  6.     Kd_speed *  (error_speed_left-2*error_speed_left_last + error_speed_left_pre));
  7.     error_speed_right = (double)(speed_right_set - speed_right_real );                       
  8.     d_speed_right_out = (int) ( Kp_speed * (error_speed_right-error_speed_right_last)+
  9.     Ki_speed * error_speed_right +
  10.     Kd_speed * (error_speed_right-2*error_speed_right_last + error_speed_right_pre));
  11.    
  12.     error_speed_left_pre=error_speed_left_last;
  13.     error_speed_left_last=error_speed_left;
  14.     error_speed_right_pre=error_speed_right_last;
  15.     error_speed_right_last=error_speed_right;
  16.    
  17.     if(speed_left_real==0)
  18.     {
  19.         speed_left_out=d_speed_left_out;
  20.     }
  21.     else
  22.     {
  23.         speed_left_out += d_speed_left_out;
  24.     }
  25.     if(speed_left_real == 0)
  26.     {
  27.         speed_right_out = d_speed_right_out;
  28.     }
  29.     else
  30.     {
  31.         speed_right_out += d_speed_right_out;
  32.     }
  33.    duty_left=(int)(speed_left_out/kr_left)+duty_death;
  34.    duty_right=(int)(speed_right_out/kr_right)+duty_death;
复制代码




补充内容 (2018-3-24 22:10):
感谢各位大佬提点,目前本菜菜在不识别圆环的情况下轻松上两米,哈哈
作者: 蒙哥马利    时间: 2018-3-23 00:37
顶一顶,我也有这种疑问
作者: aytc100    时间: 2018-3-23 01:39
先调KP到临界振荡,然后KP减到大概80%调ki。电机系统KD可以不用调
作者: lzw12138    时间: 2018-3-23 03:33
一直有个疑问 Kp乘偏差变化率 但是一开始转速为0,无论p多大都不可能有数值的吧,增量式应该先调ki吧
作者: lzw12138    时间: 2018-3-23 03:34
aytc100 发表于 2018-3-23 01:39
先调KP到临界振荡,然后KP减到大概80%调ki。电机系统KD可以不用调

就是kp是乘偏差变化率 一开始变化率是0的 无论p多大都无法输出,增量式不应该先KI吗 这个问题我很困扰

作者: じ~凝眸处    时间: 2018-3-23 07:37
http://www.znczz.com/forum.php?m ... d=264685&extra=
作者: imaxaioxi    时间: 2018-3-23 08:50
じ~凝眸处 发表于 2018-3-23 07:37
http://www.znczz.com/forum.php?mod=viewthread&tid=264685&extra=

大佬,大佬,我看了你的帖子,帖子中详细说明了空载时如何调参,但是我弱弱的问下,您说的放在路上微调指的是往上调还是往下调呢?
作者: imaxaioxi    时间: 2018-3-23 08:52
aytc100 发表于 2018-3-23 01:39
先调KP到临界振荡,然后KP减到大概80%调ki。电机系统KD可以不用调

我试试呀,大佬,谢谢大佬提点!

作者: imaxaioxi    时间: 2018-3-23 09:33
aytc100 发表于 2018-3-23 01:39
先调KP到临界振荡,然后KP减到大概80%调ki。电机系统KD可以不用调

大佬,大佬,两点疑惑1.您说的调节是直接放到赛道上调吗?
2.p临界稳定是通过虚拟示波器看的,还是通过车子运行的状态来观察得到的
作者: aytc100    时间: 2018-3-23 09:44
1、直接放到赛道上调
2、听声音就行了
作者: luckner    时间: 2018-3-23 10:00
积分量做个限幅
作者: alexyzhov    时间: 2018-3-23 10:13
要注意给积分限幅,有符号数据类型,数值溢出会变号的。

带载时的PID参数要比空载大很多。注意检查定时中断的间隔,不要嵌套了
作者: imaxaioxi    时间: 2018-3-23 11:33
aytc100 发表于 2018-3-23 09:44
1、直接放到赛道上调
2、听声音就行了
谢谢北科大佬

作者: imaxaioxi    时间: 2018-3-23 11:37
luckner 发表于 2018-3-23 10:00
积分量做个限幅

大佬,积分限幅可否理解为积分分离呢

作者: imaxaioxi    时间: 2018-3-23 11:39
alexyzhov 发表于 2018-3-23 10:13
要注意给积分限幅,有符号数据类型,数值溢出会变号的。

带载时的PID参数要比空载大很多。注意检查定时 ...

大佬,“检查定时中断的间隔”这个怎么理解呢

作者: alexyzhov    时间: 2018-3-23 11:41
imaxaioxi 发表于 2018-3-23 11:39
大佬,“检查定时中断的间隔”这个怎么理解呢

执行超时

作者: imaxaioxi    时间: 2018-3-23 12:23
alexyzhov 发表于 2018-3-23 11:41
执行超时

谢大佬

作者: dxa572862121    时间: 2018-3-23 12:38
按照书上的资料写出来的增量式PI,加一些其他的东西,先调P,p能够达到比输出理想速度小一部分就行,具体多少可以自己试试,然后再调i,就酱紫
作者: 东方斗魂    时间: 2018-3-23 12:50
调闭环好像直接在赛道上调合适吧
作者: imaxaioxi    时间: 2018-3-23 14:02
aytc100 发表于 2018-3-23 01:39
先调KP到临界振荡,然后KP减到大概80%调ki。电机系统KD可以不用调

大佬,我按你的方法,先挑kp,ki置零,发现小车跑的很慢,达不到预期速度,kp给很大还是这个现象

作者: luckner    时间: 2018-3-23 15:13
imaxaioxi 发表于 2018-3-23 11:37
大佬,积分限幅可否理解为积分分离呢

不太一样

作者: 闻风丧胆    时间: 2018-3-23 15:27
直接在赛道上调,该加的能加起来,该减的能减下来就很好,多试机组参数,看看参数的大小会对加速减速起步产生怎样影响。
作者: metoyoulife    时间: 2018-3-24 11:25
lzw12138 发表于 2018-3-23 03:34
就是kp是乘偏差变化率 一开始变化率是0的 无论p多大都无法输出,增量式不应该先KI吗 这个问题我很困扰

初始化的时候,current_error为现在的偏差,但是last_error 并没有赋值所以是 0,它们相减是很大的。

作者: 星空_xALOC    时间: 2018-3-24 17:17
东方斗魂 发表于 2018-3-23 12:50
调闭环好像直接在赛道上调合适吧

放在赛道上,车一输出,跑了,怎么看波形?我的理解是直接空载,然后看电机输出的占空比。

作者: 那兔    时间: 2018-3-25 17:56
星空_xALOC 发表于 2018-3-24 17:17
放在赛道上,车一输出,跑了,怎么看波形?我的理解是直接空载,然后看电机输出的占空比。

借助无线设备看呗!

作者: 来一杯烈酒    时间: 2018-3-26 14:42
我觉得火钳刘明大神的帖子上的调法见效特别快
作者: imaxaioxi    时间: 2018-3-26 22:44
来一杯烈酒 发表于 2018-3-26 14:42
我觉得火钳刘明大神的帖子上的调法见效特别快

敢问这位大佬在论坛的昵称是什么

作者: 来一杯烈酒    时间: 2018-3-26 22:53
imaxaioxi 发表于 2018-3-26 22:44
敢问这位大佬在论坛的昵称是什么

六楼发链接的大神就是

作者: imaxaioxi    时间: 2018-3-26 22:59
来一杯烈酒 发表于 2018-3-26 22:53
六楼发链接的大神就是

6楼的确很666





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