一是利用数字PID控制算法调节直流电机的速度,方案是采用光电开关来获得电机的转动产生的脉冲信号,单片机(MSP430G2553)通过测量脉冲信号的频率来计算电机的转速(具体测量频率的算法是采用直接测量法,定时1s测量脉冲有多少个,本身的测量误差可以有0.5转加减),测量的转速同给定的转速进行比较产生误差信号,来产生控制信号,控制信号是通过PWM调整占空比也就是调整输出模拟电压来控制的(相当于1位的DA,如果用10位的DA来进行模拟调整呢?效果会不会好很多?),这个实验控制能力有一定的范围,只能在30转/秒和150转/秒之间进行控制,当给定值(程序中给定的速度)高于150时,实际速度只能保持在150转,这也就是此系统的Zui大控制能力,当给定值低于30转时,直流电机转轴实际是不转动的,但由于误差值过大,转速会迅速变高,又会停止转动,就这样循环往复,不能达到控制效果。
根据实测,转速稳态精度在正负3转以内,控制时间为4到5秒。实验只进行到这种程度,思考和分析也只停留在这种深度。
二是利用数字PID控制算法调节直流减速电机的位置,方案是采用与电机同轴转动的精密电位器来测量电机转动的位置和角度,通过测量得到的角度和位置与给定的位置进行比较产生误差信号,位置误差信号通过一定关系(此关系纯属根据想象和实验现象来拟定和改善的)转换成PWM信号,作为控制信号的PWM信号是先产生对直流减速电机的模拟电压U,U来控制直流减速电机的力矩(不太清楚),力矩产生加速度,加速度产生速度,速度改变位置,输出量是位置信号,之间应该对直流减速电机进行系统建模分析,仿真出直流减速电机的近似系统传递函数,根据此函数便可以对PID的参数进行整定了。
两次体会都不是特别清楚PID参数是如何整定的,没有特别清晰的理论指导和实验步骤,对结果的整理和分析也不够及时,导致实验深度和程度都不能达到理想效果。
小明接到这样一个任务:
有一个水缸点漏水(漏水的速度还不一定固定不变)要求水面高度维持在某个位置一旦发现水面高度低于要求位置,就要往水缸里加水。
小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。
几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。
开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,
但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
小明又发现水不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,
每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。
于是他试着变换不同大小口径的漏斗来控制加水的速度,Zui后终于找到了满意的漏斗。漏斗的时间就称为积分时间。
小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,不能高出太多,否则不给工钱。
小明又为难了!于是他又开动脑筋,终于让他想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。
他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。
拿一个水池水位来说,我们 可以制定一个规则:
把水位分为超高、高、较高、中、较低、低、超低几个区段;
如上所述,我们需要制定一个控制规则表,制定参数判断水位区段的界值、波动趋势的界值、输出幅度的界值。
比例带与比例控制(P)输出的关系如图所示。用MVp运算式的设定举例
稳态误差(Off set)
仅用比例控制的时候,根据负载的变动及设备的固有特性不同,会出现不同的稳态误差。
负载特性与控制特性曲线的交点和设定值不一致是产生稳态误差的原因。
比例带小时不会产生。为消除稳态误差,我们设定手动复位值--manualreset值(MR),以消除控制误差。
手动复位(Manual reset)
如前所述,仅用比例控制不能消除稳态误差。
为此,将MR(manualreset值)设为可变,则可自由整定(即调整)调节器的输出。只要手动操作输出相当于offset的量,就能与目标值一致。
这就叫做手动复位(manual reset),通常比例调节器上配有此功能。
在实际的自动控制中,每次发生offset时以手动进行reset的话,这样并不实用。在后面将叙述的积分控制功能,能自动消除稳态误差。
这就叫做手动复位(manual reset),通常比例调节器上配有此功能。
在实际的自动控制中,每次发生offset时以手动进行reset的话,这样并不实用。在后面将叙述的积分控制功能,能自动消除稳态误差。
所谓积分控制(I),就是在出现稳态误差时自动的改变输出量,使其与手动复位动作的输出量相同,达到消除稳态误差的目的。
当积分项和比例项对于控制器的输出的贡献相同,即积分作用重复了一次比例作用时所花费的时间,就是积分时间。
微分控制(D)的功能是通过误差的变化率预报误差信号的未来变化趋势。
通过提供超前控制作用,微分控制能使被控过程趋于稳定。
它经常用来抵消积分控制产生的不稳定趋势。
它经常用来抵消积分控制产生的不稳定趋势。
当输入量持续的以一定速率变化时,微分项和比例项对于控制器的输出的贡献相同,即微分作用重复了一次比例作用时所花费的时间,就是微分时间。
我们看一个生活例子,冬天洗热水澡,需要先放掉一段时间的冷水,因为水管里有一段冷水,热水器也需要一个加热过程,等过了这段时间之后水温有些接近目标值后,开始调节水龙头来调节冷、热水之间的比例及出水量,之后再慢慢的微调,在洗浴过程中感觉温度不合适,再一点点的调节。这个过程,其实就是PID算法过程。我们之微调,是因为水温的变化速度与我调节的速度不相匹配,存在一个滞后效应,我们需要调节一点点,等一下再感觉一下温度,不够再调节一点点,再感觉,这个过程就叫PID算法,也可以说,滞后效应是引入PID的原因。
失去的能否找回来?能!只是我找回了纽扣,却发现衣服已经不再了。这个就是滞后效应。
负反馈系统,都有滞后效应,但为什么运放、电源这类的却从来不提PID算法呢?这是因为这类系统的滞后延时时间非常短,若考虑这个延时,负反馈引入180度相位,延时恰好引入180度相位,则完全可能引起振荡。问题在于这个延时时间足够短,它的谐振频率点比较高,以运放为例,加入延时加上负反馈引起的谐振点为10MHz,但这片运放的频率响应是1MHz,则在10MHz下完全不可能导致振荡,因为这个芯片的频响特性只有1MHz。我们常用的线性电源IC,比如SOT23封装的LDO,假如输出不加电容,就会输出一个振荡的波形,相对来说电源IC的滞后效应比运放要大,因为电源一般后面都要接大电容的,它的频响特性很低,接近直流0Hz,当有电容时候,就无法振荡了。
而工业控制领域,比如温度等,都是滞后效应很严重的,往往都是mS,甚至是10mS级别的,若直接用负反馈,因为激励与反馈的不同步,必然导致强烈的振荡,为了解决这个问题,我们需要引入PID算法,来实现这类滞后效应严重系统的负反馈控制,我们以高频感应加热设备加热工件,从常温25度加热到700度为例做说明:
1、25~600度,的全功率加热工件,这是因为温差太大,前期要全功率,先加热到靠近目标温度。之考虑在600度,是因为滞后效应,若设定太高,当发现接近700度再停下来,但实际上,温度会冲过700度。当然,600度是一个经验值,以下几个温度点都是经验值,根据实际情况而来。
2、600以上,开启P算法,P就是根据测量值与目标值的误差来决定负反馈的大小。P算法公式:反馈=P*(当前温度-目标温度)。但因为负反馈是基于存在误差为前提的,P算法导致一个问题,永远到不了想要的值:700度。因为到了700度,反馈值就没有了。P算法的开启,逼近了目标温度,假设稳态下可以达到650度,这样就算因为滞后效应导致的延时,也不会超过700度太多。
3、当达到P算法的稳态极限650度附近的时候,比如640度,就应该开启一个算法解决P算法引起的极限误差,那就是I算法。I算法就是为了消除这个P算法导致的误差值,毕竟我们想要的是700度,而不是650度。I算法,本质上讲就是获取一个700度下对应的一个驱动值,之后用这个驱动值来取代P算法,那么我们怎么得到这个驱动值呢,唯一的手段就是把之前的误差都累加起来,Zui后得到一个期望值,这个期望值就是我们想要的驱动值。因为只要与目标值存在误差,那么把这些误差值积累起来再去反馈控制,就能一步步的逼近目标值,这如同水温不够高,再加一点点热水,不够高再加,这样总能达到想要的水温。I算法不能接入太高,必须要在P算法的后期介入,不然很容易积累过大。这个时候可以引入一个误差门限,比如误差为60,当作6来处理,误差为50,当作5来处理,消除大的误差值,具体根据项目情况决定。
4、当I算法把工件温度加热到很接近目标温度后,那么可以调节的范围就很小了,Zui后一点点的微动,让调节的每一次的变化,不要太大,这就是D算法。D算法本质上讲就是反对剧烈的变化,适用于达到目标温度的时候。
PID算法其实不复杂,但从目前看,很多人都是因为对这三者的使用条件不了解导致的问题,都是从加热一开始,三个要素都上,结果可想而知。P算法是温度接近目标值的时候用,I算法是在P算法到稳态极限的时候用,D算法是达到目标值附近的时候用。实际项目中,D算法一般不用,效果不大。假如非要找一个现实中对应的实物,那么以开关电源为例,TL431基准电源比较器可以认为是P,输出滤波电容C是I,输出滤波电感是D,两者完全等价。它们各自的应用工作点可以认为:假设目标温度700度,600~800度:P算法;640~760度:I算法;690~710度:D算法。具体值,以实验为准,数据仅供参考。
Zui后给出一个PIDZui通俗的解读:我们设计一样东西,一般都是先打个样,这个样跟我们想要的接近,但细节没到位,这就是P,样有差异,就要修改,拟合逼近,这就是I,到了定稿,就不允许随便修改了,就算要修改,也是有限制的修改,这就是D。