搜索
bottom↓
楼主: tim4146

【分享】增量式PID的stm32实现,整定过程

  [复制链接]

出0入0汤圆

发表于 2014-11-27 09:56:33 | 显示全部楼层
需要好好学习

出0入0汤圆

发表于 2014-11-27 16:14:26 | 显示全部楼层
怎么会没有增量式PID。
U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )
用了这个公式很多年

出0入0汤圆

发表于 2014-12-17 10:35:16 | 显示全部楼层
oid TIM5_IRQHandler(void)
{
        {
                if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//捕获1发生捕获事件
                        {        
                                duty_TIM5    =   TIM_GetCapture1(TIM5);          //采集占空比               
                        if  (TIM_GetCapture2(TIM5)>600)         period_TIM5        =        TIM_GetCapture2(TIM5);
                                CollectFlag_TIM5 = 0;
                        }                        
        }        
                TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
}

楼主您好,想问一下您 if  (TIM_GetCapture2(TIM5)>600) 这里为什么是600

出0入0汤圆

发表于 2014-12-17 10:54:55 | 显示全部楼层
研究研究

出0入0汤圆

发表于 2014-12-17 11:29:37 | 显示全部楼层
很好很强大,感谢楼主分享

出5入4汤圆

 楼主| 发表于 2014-12-17 13:38:48 | 显示全部楼层
爬格子 发表于 2014-12-17 10:35
oid TIM5_IRQHandler(void)
{
        {

因为电机的转速是有上限的啊,那么反馈回来的增量式编码器的方波信号的频率也有上限,频率和周期是反比的,那么周期就会有最小值咯,这个600就是最小值,由于捕获的定时器是72分频的,那么600就是600us。
相当于做了个上限,因为我的电路并没有对反馈信号进行处理,容易产生干扰的,在软件里面首先做了捕获的滤波TIM2_ICInitStructure.TIM_ICFilter = 0x3;  然后就是你说的这句了...

出0入0汤圆

发表于 2014-12-17 15:20:19 | 显示全部楼层
tim4146 发表于 2014-12-17 13:38
因为电机的转速是有上限的啊,那么反馈回来的增量式编码器的方波信号的频率也有上限,频率和周期是反比的 ...

嗯。这样啊。 我是在做一个磁悬浮的东西。用ADC采样电压然后到PID公式里计算然后改变占空比。不知道输入捕获里面改写一些什么东西?

出5入4汤圆

 楼主| 发表于 2014-12-17 22:27:23 | 显示全部楼层
爬格子 发表于 2014-12-17 15:20
嗯。这样啊。 我是在做一个磁悬浮的东西。用ADC采样电压然后到PID公式里计算然后改变占空比。不知道输入 ...

等你会使用stm32的捕获功能再思考怎么改吧

出0入0汤圆

发表于 2014-12-18 12:09:04 | 显示全部楼层
很好的资料

出0入0汤圆

发表于 2014-12-18 13:00:34 | 显示全部楼层
学习了,理论要清晰才能为自己所用

出0入0汤圆

发表于 2014-12-18 22:19:17 | 显示全部楼层
tim4146 发表于 2014-12-17 22:27
等你会使用stm32的捕获功能再思考怎么改吧

嗯。受教了。我做的这个不需要输入捕获的。新手刚玩STM32~  楼主这篇帖子给我帮助非常的大~谢谢

出0入0汤圆

发表于 2014-12-19 08:30:09 | 显示全部楼层
楼主您好:
关于PID的用法,小弟有一些问题想请教。可以加您个Q或者Email交流下吗?
我的企鹅是835016072.你懂的。email:sun_dsp_text@126.com。期待回复

出0入0汤圆

发表于 2014-12-19 08:33:28 | 显示全部楼层

出0入270汤圆

发表于 2014-12-19 08:54:03 | 显示全部楼层
mark                              

出0入0汤圆

发表于 2014-12-19 09:07:38 | 显示全部楼层
真详细,先收藏了!

出0入0汤圆

发表于 2014-12-19 09:10:08 | 显示全部楼层
学习了,小玩意也挺复杂

出0入0汤圆

发表于 2014-12-19 11:24:07 | 显示全部楼层
学习中

出5入4汤圆

 楼主| 发表于 2014-12-19 15:15:53 | 显示全部楼层
打酱油要专业 发表于 2014-12-19 08:30
楼主您好:
关于PID的用法,小弟有一些问题想请教。可以加您个Q或者Email交流下吗?
我的企鹅是835016072. ...

tim4146@qq.com
能力有限,尽力回答

出0入0汤圆

发表于 2014-12-19 16:29:32 | 显示全部楼层
tim4146 发表于 2014-12-19 15:15
能力有限,尽力回答

感激不尽!

出0入0汤圆

发表于 2014-12-19 16:44:33 | 显示全部楼层
同学有个毕业设计要用到,学习

出0入0汤圆

发表于 2014-12-22 11:54:41 | 显示全部楼层
不错,这个完全而且经典的演绎了dU增量式的过程。我有一个疑问为什么使用DAC输出?本来就是控制电机采用PWM输出足以,PID计算出的ER可以直接对PWM进行修正,完全可以控制电机,DAC输出的用途不太明白。

出5入4汤圆

 楼主| 发表于 2014-12-22 12:33:10 | 显示全部楼层
bg8wj 发表于 2014-12-22 11:54
不错,这个完全而且经典的演绎了dU增量式的过程。我有一个疑问为什么使用DAC输出?本来就是控制电机采用PWM ...

ADC可以用来给示波器看波形啊

出5入4汤圆

 楼主| 发表于 2014-12-22 12:33:35 | 显示全部楼层
bg8wj 发表于 2014-12-22 11:54
不错,这个完全而且经典的演绎了dU增量式的过程。我有一个疑问为什么使用DAC输出?本来就是控制电机采用PWM ...

不好意思写错了,是DAC...

出0入0汤圆

发表于 2014-12-22 12:51:59 | 显示全部楼层
呵呵,明白了,我之前也是搞了好久才看明白PID的,现在很多的书籍抄的太厉害,其实适合数字系统的PID要想简单高效低成本只能采用增量法,(仅从实际应用的角度说)。
不过带上DAC部分真的对于新手很容易上手。

出0入0汤圆

发表于 2014-12-22 14:59:17 | 显示全部楼层
aming2046 发表于 2014-4-7 16:38
大哥,看了你的帖子收益很多 啊,我现在对pid的理解写给你看看,不知道对不对啊,假设我2v的电压---对应100 ...

你好。你也在做温度加热吗。
可以和您交流吗,Q:835016072

出0入0汤圆

发表于 2014-12-22 22:35:31 | 显示全部楼层
刘兄,在吗?
请教几个问题呢?

出5入4汤圆

 楼主| 发表于 2014-12-23 10:15:19 | 显示全部楼层
打酱油要专业 发表于 2014-12-22 22:35
刘兄,在吗?
请教几个问题呢?

温度加热没做过,你可以在坛子里搜索一下相关帖子

出0入0汤圆

发表于 2014-12-23 23:48:56 | 显示全部楼层
MAEK YI XIA1

出0入0汤圆

发表于 2014-12-24 13:51:56 | 显示全部楼层
mark                          

出0入0汤圆

发表于 2014-12-25 10:39:51 | 显示全部楼层
谢谢楼主分享,对于学习PID十分有帮助

出0入0汤圆

发表于 2014-12-26 15:55:04 | 显示全部楼层
不知道楼主做得怎么样了,能否赐教一下PID电机控制方面的经验 Q 248-555-6522

出0入0汤圆

发表于 2014-12-26 16:04:14 | 显示全部楼层
学习                                

出0入0汤圆

发表于 2015-1-22 19:55:45 | 显示全部楼层
mark++ ! 谢谢分享

出0入0汤圆

发表于 2015-1-23 04:45:53 | 显示全部楼层
控制效果不错呀,学习了

出0入0汤圆

发表于 2015-1-23 10:54:45 | 显示全部楼层
想问一下楼主,pid输出的是增量,但是输出的占空量却是绝对量,对于电机来说就是速度的绝对控制量,不是很明白,多少占空量就对应多大速度,这也对应的不对啊?如果pid输出增量,那么是不是在上次pid输出基础上加减这次pid增量,再输出,这样就是位置式了,我不是很明白,希望楼主和网友解答一下,高手见谅!!!

出5入4汤圆

 楼主| 发表于 2015-1-23 21:27:46 | 显示全部楼层
stm32f103f4 发表于 2015-1-23 10:54
想问一下楼主,pid输出的是增量,但是输出的占空量却是绝对量,对于电机来说就是速度的绝对控制量,不是很 ...

“多少占空量就对应多大速度,这也对应的不对啊?”
回答:占空比和速度确实不是完全的线性关系,但是这里就看成是线性系统,也就是说占空比和速度是线性关系,他们之间相差一个系数。否则还真不知道怎么把占空比和速度联系起来呢。
“如果pid输出增量,那么是不是在上次pid输出基础上加减这次pid增量,再输出,这样就是位置式了”
没错,输出增量之后在加上系统的控制量,变成调整之后的控制量。这里确实体现了位置式的特点

出0入0汤圆

发表于 2015-1-23 21:53:20 | 显示全部楼层
楼主您好,我说的不是线不线性的对应关系,而是pid的增量输出和电机的绝对控制量之间不对应,感觉物理意义不对,pid输出的是增量的累加和,而不是pid的决对输出,即不是pid的位置输出,我感觉应该是位置输出,即上次的输出加上本次的增量,这样的输出才对应电机的给定电压,才能调节转速,增量不能求和,如果是位置式,则是上次结果加本次增量,如果是增量式,则直接输出增量,也不是对增量求和,如果控制电机,用增量式,那么电机只会得到很小的增量电压,电机的转速就会很小,真是不明白,物理意义不太懂,

出5入4汤圆

 楼主| 发表于 2015-1-24 12:03:27 | 显示全部楼层
stm32f103f4 发表于 2015-1-23 21:53
楼主您好,我说的不是线不线性的对应关系,而是pid的增量输出和电机的绝对控制量之间不对应,感觉物理意义 ...

增量式的意思就是每次算出的是控制量的增量△u,那么问题来了,你用这个△u去做控制量,电机肯定转速很小很小啦。
正确的应该是u=u+△u,这样电机速度就累加上来了啊。你还是没看懂我前面的回复啊。再给你个资料看看吧。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2015-1-24 12:18:40 | 显示全部楼层
  mark !

出0入0汤圆

发表于 2015-1-24 22:00:03 | 显示全部楼层
真心谢谢楼主先!

出0入0汤圆

发表于 2015-1-24 23:01:52 | 显示全部楼层
小弟正想找一个PWM一个应用呢 。。。。。。。。。。。。。。

出0入0汤圆

发表于 2015-1-24 23:05:36 | 显示全部楼层
楼主能否贴一下硬件方案 我想搞个电机模型

出0入0汤圆

发表于 2015-2-11 09:06:06 | 显示全部楼层
我来学习一下PID,准备做烙铁

出0入0汤圆

发表于 2015-2-11 17:20:55 | 显示全部楼层

不错,回头在研究一下,mark 一下

出0入0汤圆

发表于 2015-2-11 20:24:58 | 显示全部楼层
这个将的真心不错!赞!

出0入0汤圆

发表于 2015-3-6 09:47:28 | 显示全部楼层
楼主还在么,我想问个问题,如果在整定PID是去掉积分微分,出比例控制的话会有一个问题,当前速度为0且目标速度为一个很小的值时PIDx->proportion*(iError-PIDx->last_error)比例部分的值很小,这时输出值也很小以至于不能使电机转动,这时(iError-PIDx->last_error)就会一直为0,输出也不会增加,导致输出还是那个很小的值,电机就会一直转不起来,这种情况怎么解决

出5入4汤圆

 楼主| 发表于 2015-3-6 10:37:13 | 显示全部楼层
zhangyh89 发表于 2015-3-6 09:47
楼主还在么,我想问个问题,如果在整定PID是去掉积分微分,出比例控制的话会有一个问题,当前速度为0且目标 ...

楼主还在
请看我这个函数
  1. int incPIDcalc(PIDtypedef *PIDx,u16 nextpoint)
  2. {
  3. int iError,iincpid;
  4. iError=PIDx->setpoint-nextpoint;  //当前误差
  5. /******下面是被注释的哦,看清楚******/
  6. /*iincpid=                                               //增量计算
  7. PIDx->proportion*iError                //e[k]项
  8. -PIDx->integral*PIDx->last_error          //e[k-1]
  9. +PIDx->derivative*PIDx->prev_error;//e[k-2]
  10. */

  11. iincpid=                                                          //增量计算
  12. PIDx->proportion*(iError-PIDx->last_error)
  13. +PIDx->integral*iError
  14. +PIDx->derivative*(iError-2*PIDx->last_error+PIDx->prev_error);

  15. PIDx->prev_error=PIDx->last_error; //存储误差,便于下次计算
  16. PIDx->last_error=iError;
  17. return(iincpid) ;
  18. }
复制代码

想必你是保留了这句:
  1. iincpid=                                                          //增量计算
  2. PIDx->proportion*(iError-PIDx->last_error)
复制代码

这个得到的iincpid确实很小,但是你忽视了 return(iincpid) ;这句话做了什么事情,请看:
  1. PID1.sum_error+=(incPIDcalc(&PID1,frequency1));         //计算增量并累加
复制代码

也就是说,这个很小的控制量会累加的,控制量因此越来越大,电机肯定会在一段时间后转动起来的哦。
你在看看增量PID的资料吧,会有收获的

出0入0汤圆

发表于 2015-3-6 11:49:16 | 显示全部楼层
tim4146 发表于 2015-3-6 10:37
楼主还在
请看我这个函数

PID1.sum_error+=(incPIDcalc(&PID1,frequency1)); 这个我看了,主要问题是这样如果在纯比例调节没有积分与微分的情况下,电机启动前速度为0,第一次PID计算后输出不足以启动电机,第二次PID计算时incPIDcalc(&PID1,frequency1)的值时0,也就是PID1.sum_error += 0,电机还是转不起来incPIDcalc(&PID1,frequency1)会一直是0

出5入4汤圆

 楼主| 发表于 2015-3-6 17:46:29 | 显示全部楼层
zhangyh89 发表于 2015-3-6 11:49
PID1.sum_error+=(incPIDcalc(&PID1,frequency1)); 这个我看了,主要问题是这样如果在纯比例调节没有积分 ...

不好意思,之前的回复粗心了,没发现(iError-PIDx->last_error)会恒等于零。我在整定的时候没出现你这个情况,可能是控制对象的关系吧。
我试着提供一个办法,估计是可行的:
继续增大kp值,确保电机能转起来,也就是说你之前的kp用的太小了。当然,你的电机目标转速也不能追求很低的速度,比如额定转速2000rpm,你非要控制在200rpm似乎不太合理。

出0入0汤圆

发表于 2015-3-7 06:41:50 | 显示全部楼层
tim4146 发表于 2015-3-6 17:46
不好意思,之前的回复粗心了,没发现(iError-PIDx->last_error)会恒等于零。我在整定的时候没出现你这个 ...

kp要提的很高才行,震荡的非常厉害,没法再调了,不过昨天后来找大学时候的老师聊了下,他说一般直流电机的控制要用位置式,如果要用增量式必须要加上积分环节,之后把程序改成了位置式,效果不错

出5入4汤圆

 楼主| 发表于 2015-3-7 12:00:26 | 显示全部楼层
zhangyh89 发表于 2015-3-7 06:41
kp要提的很高才行,震荡的非常厉害,没法再调了,不过昨天后来找大学时候的老师聊了下,他说一般直流电机 ...

这次我也学习了

出0入0汤圆

发表于 2015-3-7 14:16:05 | 显示全部楼层
好东西 多谢楼主分享

出0入0汤圆

发表于 2015-3-9 14:45:00 | 显示全部楼层
多谢分享,学习了。

出0入0汤圆

发表于 2015-3-9 17:48:14 | 显示全部楼层
楼主做过角度控制么,我想通过检测光栅计数来控制电机转角(不是绝对位置),而且转速还可调

出5入4汤圆

 楼主| 发表于 2015-3-9 19:58:48 | 显示全部楼层
zhangyh89 发表于 2015-3-9 17:48
楼主做过角度控制么,我想通过检测光栅计数来控制电机转角(不是绝对位置),而且转速还可调 ...

没做个哎,我都是一会儿做这个一会儿做那个,老板指哪打哪...但是都打的不精
角度控制的话是不是要用步进电机做比较好呢...

出0入0汤圆

发表于 2015-3-9 23:35:24 | 显示全部楼层
mark下~!PID这东西做控制用的很多啊~1

出0入0汤圆

发表于 2015-3-10 09:54:44 | 显示全部楼层
tim4146 发表于 2015-3-9 19:58
没做个哎,我都是一会儿做这个一会儿做那个,老板指哪打哪...但是都打的不精
角度控制的话是不是要用步进 ...

步进电机体积大,而且我这要求是速度模式,角度控制模式都要有,角度控制没设么思路

出5入4汤圆

 楼主| 发表于 2015-3-10 10:23:26 | 显示全部楼层
zhangyh89 发表于 2015-3-10 09:54
步进电机体积大,而且我这要求是速度模式,角度控制模式都要有,角度控制没设么思路  ...

你可以发个帖问问看,坛子里大神很多

出0入8汤圆

发表于 2015-3-10 10:46:43 | 显示全部楼层
学习下思路,谢谢楼主和大家的分享~~~

出0入0汤圆

发表于 2015-3-10 15:39:05 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2015-3-12 17:13:20 | 显示全部楼层
kaisfree 发表于 2014-9-11 10:44
谢谢LZ的回复,我的那个PID是这么写的:
/***********增量式PID设计***********/

因为你的PWM_out是局部变量啊。
楼主的是全局变量。

出0入0汤圆

发表于 2015-3-12 17:26:24 | 显示全部楼层
tim4146 发表于 2014-9-12 15:41
不累加也行?试想如果连续三次的误差值都是0,也就是error=0,lastrerror=0,prewerror=0,那么你PID计算 ...

楼主,增量式PID,增加量跟PI没有关系,跟PD有关。
比如我做温度控制,设置温度100;P = 0; D = 5; I = 0;
DEBUG:
实际温度90
Error 10 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  50 Uk  6765
Error 10 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  50 Uk  6815
Error 10 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  50 Uk  6865
Error 10 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  50 Uk  6915
Error 10 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  50 Uk  6965
实际温度91
Error 9 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  45 Uk- 5030
Error 9 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  45 Uk- 4985
Error 9 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  45 Uk- 4940
Error 9 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  45 Uk- 4895
Error 9 pError 0 dError 0 Proportion 0 Integral 5 Derivative 0 Incpid_out  45 Uk- 4850

Incpid_out一直是有输出的,刚刚那个朋友估计采用了他的增量,没有用控制量。

增量PID:
int incPIDCalc( struct PID *pp, unsigned int NextPoint )
{
  int dError,Error,pError;
  //增量法计算公式:
  //Pdt=Kp*[E(t)-E(t-1)]+Ki*E(t)+Kd*[E(t)-2*E(t-1)+E(t-2)]
  Error  = guiSetTMP - NextPoint;                               // 偏差E(t)
  pError = Error - pp->LastError;                                         //E(t)-E(t-1)
  dError = Error - 2*pp->LastError + pp->PrevError; //E(t)-2*E(t-1)+E(t-2)
#if 1
  PrintfASCII(" Error", Error);
  PrintfASCII(" pError", pError);
  PrintfASCII(" dError", dError);
  PrintfASCII(" Proportion", pp->Proportion);
  PrintfASCII(" Integral", pp->Integral);
  PrintfASCII(" Derivative", pp->Derivative);
#endif
  pp->PrevError = pp->LastError;
  pp->LastError = Error;
  
  return ( pp->Proportion * pError      //比例
         + pp->Integral   * Error                  //积分项
         + pp->Derivative * dError);          // 微分项
}

出0入0汤圆

发表于 2015-3-30 09:28:40 | 显示全部楼层
好东西,学习了,谢谢楼主

出0入0汤圆

发表于 2015-3-30 10:18:09 | 显示全部楼层
标记一下。

出0入0汤圆

发表于 2015-3-30 10:48:15 | 显示全部楼层
好文章,登记留名。

出0入0汤圆

发表于 2015-3-30 14:35:03 | 显示全部楼层
mark    pid

出0入0汤圆

发表于 2015-3-30 22:16:14 | 显示全部楼层
mark,学习了,好帖子。

出0入0汤圆

发表于 2015-4-2 13:07:24 | 显示全部楼层
标记一下,最近有个项目要用PID温控

出0入0汤圆

发表于 2015-4-5 16:27:36 | 显示全部楼层
我在做一个流量控制的项目,Fuzzy+PID,进来学习一下

出0入0汤圆

发表于 2015-4-18 15:20:44 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2015-4-18 16:12:19 | 显示全部楼层
标记一下,以备后查.

出0入0汤圆

发表于 2015-5-8 10:56:37 | 显示全部楼层
很好的东西,不错不错

出0入10汤圆

发表于 2015-5-18 10:46:12 | 显示全部楼层
MARK,有机会认真学习下,自动控制都忘光了

出0入0汤圆

发表于 2015-5-18 11:02:29 | 显示全部楼层
一直没搞懂,学习下。

出0入0汤圆

发表于 2015-5-18 11:09:29 | 显示全部楼层
漂亮,值得学些。MARK一下

出0入0汤圆

发表于 2015-5-18 16:02:59 | 显示全部楼层
谢谢。。。。。。。

出0入0汤圆

发表于 2015-5-18 16:10:49 | 显示全部楼层

出0入0汤圆

发表于 2015-5-22 23:54:31 | 显示全部楼层
mark......

出0入0汤圆

发表于 2015-5-23 06:57:55 来自手机 | 显示全部楼层
呵呵很好很好很好

出0入0汤圆

发表于 2015-5-26 17:50:32 | 显示全部楼层
最近做自平衡小车和倒立摆,感觉卡在PID这块了,想用增量式PID来调倒立摆,但是给P,I,D三个值好像效果都一样,感觉并没有位置式那种滞后超前直观的感觉,不知道楼主可否指点一下......

出0入0汤圆

发表于 2015-5-27 22:57:46 | 显示全部楼层
谢谢,分享

出0入0汤圆

发表于 2015-7-1 12:00:55 | 显示全部楼层
有没有调试无刷电机的

出0入0汤圆

发表于 2015-7-14 17:28:29 | 显示全部楼层
楼主,你这个PID计算会不会产生溢出?没明白算法上你是怎样控制PID的sum_error值不会产生溢出?
/********PID1处理**********/
        PID1.sum_error+=(incPIDcalc(&PID1,frequency1));         //计算增量并累加
       pwm1=PID1.sum_error*4.6875  ;   //pwm1 代表将要输出PWM的占空比

另外,想请教一下。我现在在做压力调节控制,通过PWM控制2个电磁阀去控制压力的增加和降低。PWM的频率是25Hz。输出应该也是占空比的问题,输入变成当前压力值。我现在是采集当前的压力值使用你的增量程序去计算。也是把结果累加到sum_error。但sum_error与25Hz的占空比之间的关系应该怎样计算不清楚,你有什么好的建议没有?谢谢!

出0入0汤圆

发表于 2015-7-14 19:01:52 | 显示全部楼层
多谢分享,学习了。

出5入4汤圆

 楼主| 发表于 2015-7-16 12:56:55 | 显示全部楼层
毛毛 发表于 2015-7-14 17:28
楼主,你这个PID计算会不会产生溢出?没明白算法上你是怎样控制PID的sum_error值不会产生溢出?
/********P ...

不用考虑里面的系数,直接整定就行

出5入4汤圆

 楼主| 发表于 2015-7-16 12:57:38 | 显示全部楼层
小乖 发表于 2015-7-1 12:00
有没有调试无刷电机的

把霍尔信号作为速度反馈,工作电流作为电流反馈即可

出0入0汤圆

发表于 2015-7-18 13:00:16 | 显示全部楼层
LZ 讲的非常好  我使用楼主的方法 成功控制了伺服电机 加减速 、精确定位 。

出0入0汤圆

发表于 2015-7-18 13:40:43 | 显示全部楼层
谢谢共享

出0入0汤圆

发表于 2015-7-22 11:27:52 | 显示全部楼层
MARK                                    

出5入4汤圆

 楼主| 发表于 2015-7-22 21:44:21 | 显示全部楼层
281229961 发表于 2015-7-18 13:00
LZ 讲的非常好  我使用楼主的方法 成功控制了伺服电机 加减速 、精确定位 。  ...

注意一下,里面讲到了几个系数,用于物理量的变换的,实际在整定过程中不必关心闭环环内的物料量是什么量纲的,直接整定就行了

出0入0汤圆

发表于 2015-7-22 23:06:36 | 显示全部楼层
tim4146 发表于 2015-7-22 21:44
注意一下,里面讲到了几个系数,用于物理量的变换的,实际在整定过程中不必关心闭环环内的物料量是什么量 ...

是的  我也是这么做的  感谢

出0入0汤圆

发表于 2015-7-28 21:50:04 | 显示全部楼层
tim4146 发表于 2014-10-22 09:10
我也在注意这个,上位机要绘图的话数据还是从下位机来的。本来我想尝试用matlab的串口接受stm32的数据的 ...

楼主,不明白你用ADC+示波器怎么看波形,你波形一出来,示波器不是一直在刷新吗?那超调瞬间的波形不就没有了?另外你输出的波动量也就是几个毫伏吧,你用示波器怎么看?

出0入0汤圆

发表于 2015-7-29 10:58:49 | 显示全部楼层
学习,谢谢

出5入4汤圆

 楼主| 发表于 2015-7-29 13:56:35 | 显示全部楼层
DZKJXHxcz 发表于 2015-7-28 21:50
楼主,不明白你用ADC+示波器怎么看波形,你波形一出来,示波器不是一直在刷新吗?那超调瞬间的波形不就没 ...

示波器有滚动模式的
从0v到3v左右代表转速0到设定值,这个区间还不够看?

出0入0汤圆

发表于 2015-7-29 14:36:17 | 显示全部楼层
mark一下,学习了

出0入0汤圆

发表于 2015-7-29 22:10:21 | 显示全部楼层
本帖最后由 DZKJXHxcz 于 2015-7-29 22:14 编辑
tim4146 发表于 2015-7-29 13:56
示波器有滚动模式的
从0v到3v左右代表转速0到设定值,这个区间还不够看? ...


假设我设定转速是3000转,那么我每1伏代表1000转,那么我相差10转的话才10毫伏,那这样怎么看出曲线变化

出5入4汤圆

 楼主| 发表于 2015-7-30 08:27:34 | 显示全部楼层
DZKJXHxcz 发表于 2015-7-29 22:10
假设我设定转速是3000转,那么我每1伏代表1000转,那么我相差10转的话才10毫伏,那这样怎么看出曲线变化 ...

整定过程比较关心的是动态响应的性能,因为加了积分之后理论上是没有稳态误差的,当然会存在小的波动。
用示波器+DAC是比较普遍的办法,能观察动态响应曲线,如果你非要看10毫伏这样的变化,你要先想想系统本身有没有这么高的精度先,如果反馈信号的精度不高看这个也没什么意义
当然你还是要看的话,就吧示波器的分辨率调节一下呗,电压和转速是严格成正比的,ADC肯定也是够精确的

出0入0汤圆

发表于 2015-7-30 08:35:33 | 显示全部楼层
增量式PID的stm32实现.收藏!

出0入0汤圆

发表于 2015-7-30 10:11:38 | 显示全部楼层
再看一遍,感觉收获很大~~

出0入0汤圆

发表于 2015-7-30 11:02:20 | 显示全部楼层
你好,看了你的PID算法整定之后,让我感觉我对PID算法又理解了一些,你看我这样理解理解对不对(http://www.amobbs.com/forum.php? ... =5628581&extra=
还有,如果我不用定时器的方法,用外设中断计数的方式来抓取脉冲的个数,用个数来代替时间,然后再用你的PID算法写进MCU里,可以吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 13:19

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

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