智能车制作

标题: 电机控制程序,增量式的疑问~ [打印本页]

作者: 玩意Tc    时间: 2015-1-30 20:38
标题: 电机控制程序,增量式的疑问~
PWM_set = (int)(PWM_set + P_BMQ*(BMQ_e-BMQ_e1) + I_BMQ * BMQ_e + D_BMQ*(BMQ_e-2*BMQ_e1+BMQ_e2));

PWM_set   电机的PWM输出;
BMQ_e= speed_set - speed_read;  speed_set 速度的设定 speed_read 编码器读取值
相当于~ PWM_set +=  P_BMQ*(BMQ_e-BMQ_e1) + I_BMQ * BMQ_e + D_BMQ*(BMQ_e-2*BMQ_e1+BMQ_e2)

真心醉了~是我对增量式理解不透彻还是什么的~·~

每次调  都快把7971烧了~我的是B车模~哎·~
而且编码器读取值和设定的速度跟不上~不知道哪里不对。。。

作者: 玩意Tc    时间: 2015-1-30 22:53
:'(:'(:'(
作者: 玩意Tc    时间: 2015-1-31 00:21
大神都说先调P  可是P 项不是相当于 位置式的 D  也就是偏差化  车子在起跑的时候  偏差率不是都是零嘛 再怎么调P也没有啊~·哎。。。
作者: 玩意Tc    时间: 2015-1-31 00:37
顶~~~
作者: li523    时间: 2015-1-31 00:43
同求

作者: cjn    时间: 2015-1-31 08:22
玩意Tc 发表于 2015-1-31 00:21
大神都说先调P  可是P 项不是相当于 位置式的 D  也就是偏差化  车子在起跑的时候  偏差率不是都是零嘛 再怎 ...

先调I

作者: luckner    时间: 2015-1-31 10:09
烧的话 是因为BTN内阻比较大 带不动B车
作者: Greece    时间: 2015-1-31 12:53
我特喵的就是把PID换成位置式的调的
作者: LRB    时间: 2015-1-31 13:59
同求
作者: LRB    时间: 2015-1-31 14:01
luckner 发表于 2015-1-31 10:09
烧的话 是因为BTN内阻比较大 带不动B车

可是参数调好的话,几圈下来,7971并不是很烫,温的。他的意思是一圈下来就非常的烫,要烧了一样

作者: lm342794214    时间: 2015-1-31 14:06
位置式的本次输出和上一次输出作差,得到的就是增量。列两公式推导一下就明白了
作者: 半丿城    时间: 2015-1-31 15:10
同感。。
作者: LRB    时间: 2015-1-31 16:36
:):):):):):)
作者: 极速漩涡    时间: 2015-1-31 16:39
:lol:lol
作者: 玩意Tc    时间: 2015-1-31 17:30
cjn 发表于 2015-1-31 08:22
先调I

昨天改了下 调P之后  小车速度会慢慢加上去 难道真的就要先调I了。。。

作者: 玩意Tc    时间: 2015-1-31 17:39
luckner 发表于 2015-1-31 10:09
烧的话 是因为BTN内阻比较大 带不动B车

PWM满偏3800左右  给了3000就烫了。。。

作者: 玩意Tc    时间: 2015-1-31 17:41
lm342794214 发表于 2015-1-31 14:06
位置式的本次输出和上一次输出作差,得到的就是增量。列两公式推导一下就明白了

参数整定  我查了很多资料 都是先调P   可是P相当于之前位置试的 D  也就是偏差率 可是 我调的时候 小车是平稳不动的 偏差率 应该都是零啊~~~   那样光调P有啥用  ,,,不理解~

作者: 玩意Tc    时间: 2015-1-31 17:42
Greece 发表于 2015-1-31 12:53
我特喵的就是把PID换成位置式的调的

你们电机用位置式的哈~???

作者: Quixote    时间: 2015-1-31 18:02
:D:D
作者: 安安安然。    时间: 2015-1-31 18:07
电流大了 自然就烫  PID调软了 就不烫 但效果不一定好 B车还是换驱动吧
作者: 玩意Tc    时间: 2015-1-31 18:07
Quixote 发表于 2015-1-31 18:02

元老~求指点

作者: 玩意Tc    时间: 2015-1-31 18:08
安安安然。 发表于 2015-1-31 18:07
电流大了 自然就烫  PID调软了 就不烫 但效果不一定好 B车还是换驱动吧

我那个增量式PID应该没错吧~~是没调好吧~:'(:'(  

作者: Quixote    时间: 2015-1-31 18:17
玩意Tc 发表于 2015-1-31 18:07
元老~求指点

你的调节是在中断里进行的么

作者: 玩意Tc    时间: 2015-1-31 18:22
Quixote 发表于 2015-1-31 18:17
你的调节是在中断里进行的么

5ms 的中断~  我先只给P    可是~调不出那种震荡的效果 就是跟不上 然后速度就自己加上去了。。。

作者: luckner    时间: 2015-1-31 19:42
玩意Tc 发表于 2015-1-31 17:39
PWM满偏3800左右  给了3000就烫了。。。

BTN带B车很吃力的 并联一下也许会有所改善一点 但不是根本解决的办法

作者: luckner    时间: 2015-1-31 19:43
LRB 发表于 2015-1-31 14:01
可是参数调好的话,几圈下来,7971并不是很烫,温的。他的意思是一圈下来就非常的烫,要烧了一样

频繁调速 肯定会热的  本身BTN驱动B车就吃力  也许就进入热保护了

作者: 玩意Tc    时间: 2015-1-31 19:50
luckner 发表于 2015-1-31 19:42
BTN带B车很吃力的 并联一下也许会有所改善一点 但不是根本解决的办法

闭环调参数的时候 还要调的比较柔~

作者: luckner    时间: 2015-1-31 19:52
玩意Tc 发表于 2015-1-31 19:50
闭环调参数的时候 还要调的比较柔~

恩  但是B车的性能在那儿呢  不用给给力点儿的驱动  对吧

作者: 玩意Tc    时间: 2015-1-31 20:21
luckner 发表于 2015-1-31 19:52
恩  但是B车的性能在那儿呢  不用给给力点儿的驱动  对吧

对a~ ~现在调PID  网上说先调 P  可是我P调不出效果 先调I  不知道对不对~

作者: 尽头时开始    时间: 2015-1-31 20:22
我只是看看
作者: luckner    时间: 2015-1-31 20:38
玩意Tc 发表于 2015-1-31 20:21
对a~ ~现在调PID  网上说先调 P  可是我P调不出效果 先调I  不知道对不对~

应该是先来P  上来就用I的是流程工艺那帮老师傅
作者: 玩意Tc    时间: 2015-1-31 21:00
luckner 发表于 2015-1-31 20:38
应该是先来P  上来就用I的是流程工艺那帮老师傅

主要是给P 效果不明显 还会超调   范围给不定。。。

P = (float)P_BMQ*(BMQ_e-BMQ_e1);
  I = (float)I_BMQ*BMQ_e;
  D = (float)D_BMQ*(BMQ_e-2*BMQ_e1+BMQ_e2);

  PWM_set = (int)(PWM_old + P + I + D)
  PWM_old = (int)PWM_set;


都不知道哪里错

作者: eternal_sy    时间: 2015-1-31 21:00
学长建议先调P 但是如果想要让预期转速和实际转速拟合的话 需要加一个I  电机发热是因为P项引起的震荡频率太高 增量式的P不等于位置式的D吧。。。-------个人想法
作者: 玩意Tc    时间: 2015-1-31 21:03
eternal_sy 发表于 2015-1-31 21:00
学长建议先调P 但是如果想要让预期转速和实际转速拟合的话 需要加一个I  电机发热是因为P项引起的震荡频率太 ...

  BMQ_e =  speed_set - speed_read ;

  P = (float)P_BMQ*(BMQ_e-BMQ_e1);
  I = (float)I_BMQ*BMQ_e;
  D = (float)D_BMQ*(BMQ_e-2*BMQ_e1+BMQ_e2);

  PWM_set = (int)(PWM_old + P + I + D);
  if(PWM_set>=3749)
      PWM_set = 3749;
  if(PWM_set<-100)
      PWM_set = -100;
  PWM_old =  (int)PWM_set;

  BMQ_e2 = BMQ_e1;
  BMQ_e1 = BMQ_e;

增量式的  P  好像位置式的 D  而 I 就好像 位置式的P   
我一直纠结 这个  PWM_set += P + I + D ;


作者: 玩意Tc    时间: 2015-1-31 22:41
:Q:Q:Q:Q
作者: 活雷锋    时间: 2015-2-1 00:39
位置式的什么意思 不太懂  刚看增量式还没理解明白呢。哪位大神简单讲讲
作者: Quixote    时间: 2015-2-1 02:26
玩意Tc 发表于 2015-1-31 18:22
5ms 的中断~  我先只给P    可是~调不出那种震荡的效果 就是跟不上 然后速度就自己加上去了。。。

不是所有的系统都能调成左对称极点的。你发下图吧。看看图更好说清楚。

作者: 玩意Tc    时间: 2015-2-1 05:13
Quixote 发表于 2015-2-1 02:26
不是所有的系统都能调成左对称极点的。你发下图吧。看看图更好说清楚。

我用oled 看数据的。。。

作者: luckner    时间: 2015-2-1 12:35
玩意Tc 发表于 2015-1-31 21:00
主要是给P 效果不明显 还会超调   范围给不定。。。

P = (float)P_BMQ*(BMQ_e-BMQ_e1);

BMQ_e1是给定吗?

作者: luckner    时间: 2015-2-1 12:35
eternal_sy 发表于 2015-1-31 21:00
学长建议先调P 但是如果想要让预期转速和实际转速拟合的话 需要加一个I  电机发热是因为P项引起的震荡频率太 ...

其实是一样的

作者: 玩意Tc    时间: 2015-2-1 14:43
luckner 发表于 2015-2-1 12:35
BMQ_e1是给定吗?

这个是上次偏差哈~

作者: luckner    时间: 2015-2-1 14:51
玩意Tc 发表于 2015-2-1 14:43
这个是上次偏差哈~

哦哦 刚才没看到完整的程序

作者: 玩意Tc    时间: 2015-2-1 15:00
luckner 发表于 2015-2-1 14:51
哦哦 刚才没看到完整的程序

这可如何是好~
作者: luckner    时间: 2015-2-1 15:11
玩意Tc 发表于 2015-2-1 15:00
这可如何是好~

你算到最后都是位置式的PID  增量式是输出增量的  你电机输出的可不是增量
作者: 玩意Tc    时间: 2015-2-1 15:18
意思是我的公式错了嘛~我看了好多学校的技术报告:'(:'(:'(求指点
作者: 玩意Tc    时间: 2015-2-1 15:19
luckner 发表于 2015-2-1 15:11
你算到最后都是位置式的PID  增量式是输出增量的  你电机输出的可不是增量

意思是说 把 PWM 上次值去掉就可以了嘛~:'(

作者: Quixote    时间: 2015-2-1 18:42
玩意Tc 发表于 2015-2-1 05:13
我用oled 看数据的。。。

还是用上位机

作者: 玩意Tc    时间: 2015-2-1 18:52
Quixote 发表于 2015-2-1 18:42
还是用上位机

今天改成这种方式#define Kpp Kp * ( 1 + (T / Ti) + (Td / T) )
#define Ki (-Kp) * ( 1 + (2 * Td / T ) )
#define Kd Kp * Td / T

好像好点了 但是在调P的时候  Ti置零,,,那不是不成立了 (T / Ti)

作者: Quixote    时间: 2015-2-1 18:55
玩意Tc 发表于 2015-2-1 18:52
今天改成这种方式#define Kpp Kp * ( 1 + (T / Ti) + (Td / T) ) ...

你用的归一化,跟我以前发的一个汇编写的一模一样。其实表述形式都是外在。

作者: 玩意Tc    时间: 2015-2-1 18:59
Quixote 发表于 2015-2-1 18:55
你用的归一化,跟我以前发的一个汇编写的一模一样。其实表述形式都是外在。

求链接

作者: 2862356756    时间: 2016-7-13 02:44
学长,我也觉得先调P不对,刚开始当前误差减上次误差肯定是0.
我们先调P不懂,调I动,然后现在用的PI,但是车子刚起步的时候明显超调,刚开始速度快,然后会降下来,基本保持稳定了,不懂这是什么原因,调了很多组PI一直刚开始超调。如果学长明白的话还请指教一下。先谢过了




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