智能车制作

标题: 舵机的PID控制输出 [打印本页]

作者: justing88    时间: 2010-4-15 18:18
标题: 舵机的PID控制输出
//位置式 PID 控制设计
unsigned int LocPIDCalc(int NextPoint)
{
    register int  iError,dError;
  
  iError = sptr->SetPoint - NextPoint;       //偏差
  sptr->SumError += iError;       //积分
  dError = iError - sptr->LastError;     //微分
  sptr->LastError = iError;
      
  return(sptr->Proportion * iError            //比例项
           + sptr->Integral * sptr->SumError   //积分项
           + sptr->Derivative * dError);        //微分项
}

第一:以上的是位置式PID 算法,输入的是从CCD中读取过来的黑线的中点,setpoint的值是舵机位置。按照凌阳公司的PID解说,好像这个函数的返回值是具体的位置,而不是增量。其实PID的程序,比如说要偏差啦,积分了,微分了,这些设置我是懂的,我也看了好多大学的报告,也包括他们的程序,程序也很少。感觉还是有点云里雾里的。这个返回值到底是什么东西,是舵机角度的增量吗??还是PWM的增量,还是直接是具体位置(比如采集40个点,正中是20)?我知道增量式PID算出来是增量的,最后要实现控制的话还得加上原来的PWM数值。这个位置式是什么情况。
看过whut_wj的一个回答,输出的是PWM的增量。但是,他回答的是增量式的,而不是位置式的。
作者: justing88    时间: 2010-4-15 18:24
谢谢回答!!!!
作者: 632693521    时间: 2010-4-15 20:24
好东西,不知道还有 电机控制PID么 急需???
作者: 50833713    时间: 2010-4-15 20:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: justing88    时间: 2010-4-15 21:56
回复 3# 632693521


    PID控制电流的很多啊,论坛上发的也都是控制电流的,因为控制电流的通常用的是增量式的,我给你一个PDF吧,里面应该有你想要的东西,哎弄不上去,我复制黏贴下,程序如下:
//数据结构
typedef struct PID
{
  int  SetPoint;     //设定目标 Desired Value
  long SumError;                //误差累计  

  double  Proportion;         //比例常数 Proportional Const
  double  Integral;           //积分常数 Integral Const
  double  Derivative;         //微分常数 Derivative Const

  int LastError;               //Error[-1]
  int PrevError;               //Error[-2]
} PID;


//增量式 PID 控制设计
int IncPIDCalc(int NextPoint)
{
  register int iError, iIncpid;
   //当前误差
  iError = sptr->SetPoint - NextPoint;
   //增量计算
  iIncpid = sptr->Proportion * iError               //E[k]项
            - sptr->Integral   * sptr->LastError     //E[k-1]项
            + sptr->Derivative * sptr->PrevError;   //E[k-2]项
   //存储误差,用于下次计算
  sptr->PrevError = sptr->LastError;
  sptr->LastError = iError;
   //返回增量值
return(iIncpid);
}
作者: justing88    时间: 2010-4-15 21:58
回复 4# 50833713


    谢谢你的简单明了的回答。我可以确定下,这个位置式的PID控制,直接输给(比如我是用6.7级联的)PWMDTY6,控制舵机的转角??
作者: 50833713    时间: 2010-4-16 09:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: justing88    时间: 2010-4-16 14:16
回复 7# 50833713


    十分感谢你的耐心回答,哈哈,终于有点知道了。。。
作者: cyd360    时间: 2010-4-16 15:55
路过~~~~
作者: 吉人天相    时间: 2010-4-16 18:16
guo
作者: aren3    时间: 2010-4-17 12:59

作者: junjianjunjian    时间: 2010-4-17 14:47
十分感谢你的解惑
作者: danyili    时间: 2010-9-6 13:12
有实例,就好办了
作者: confident    时间: 2010-9-14 11:03
用舵机来控制方面? 这个能转过来吗?
作者: kufeng    时间: 2011-3-22 16:17
谁知道摄像头组的 舵机PID里给定值和测量值是什么啊?
会不会是赛道的角度,然后测量值是不是占空比对应的角度呢?
作者: chenyongjie830    时间: 2011-4-16 23:17
学习
作者: shao1505    时间: 2011-5-30 18:05
好。                        。
作者: cuiyulian    时间: 2011-6-21 17:57
怎么才能让舵机减少抖动呢   希望不吝赐教啊
作者: weichuiweicao    时间: 2011-7-3 11:44
头疼啊,我想用PD控制舵机,但不知道怎么写啊,谁能救救我?
作者: 王关军    时间: 2012-3-29 20:07
不错!
作者: 海彬    时间: 2012-4-8 14:40
路过
作者: 一毛钱~~~~~~    时间: 2012-4-19 21:43
mark
作者: 田丰    时间: 2012-5-3 22:23
good
作者: gzhcontent    时间: 2012-5-19 13:06
50833713 发表于 2010-4-16 09:07
级联了是给7,可以直接给,但是有个问题要考虑,就是PWM的分频系数那,如果时钟太大,那么为了保证1.5MS的高 ...

谢谢解释 不过 不是很明白 云里雾里
作者: zjl3369    时间: 2012-5-19 13:41
楼主我也是有这么的疑问~~本来以为位置式的话是直接就是输出了,但是想了下不太对
现在还好疑惑~

作者: 习遦孒等沵    时间: 2012-7-12 20:22
50833713 发表于 2010-4-16 09:07
级联了是给7,可以直接给,但是有个问题要考虑,就是PWM的分频系数那,如果时钟太大,那么为了保证1.5MS的高 ...

高手,能和我说说增量式PID的一些步骤吗?最好带程序

作者: 习遦孒等沵    时间: 2012-7-12 20:25
cuiyulian 发表于 2011-6-21 17:57
怎么才能让舵机减少抖动呢   希望不吝赐教啊

你好!你的抖动问题解决了吗?

作者: 张文祥    时间: 2013-8-6 11:04
给舵机独立供电可以有效防止舵机抖动的问题。
作者: ly150616    时间: 2013-10-21 18:21
借鉴一下
作者: 中华旺仔    时间: 2013-10-21 22:24

作者: WMB吴茂彬    时间: 2015-2-7 15:24
请问楼主如果用PID来控制舵机,我不知不懂怎么算那个偏差值,都没有可测量的输出量




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