无刷直流电机(BLDC)双闭环调速系统在无刷直流电机双闭环调速系统中,双闭环分别是指速度闭环和电流闭环。对于PWM的无刷直流电机控制来说,无论是转速的变化还是由于负载的弯化引起的电枢电流的变化,可控量输出最终只有一个,那就是都必须通过改变PWM的占空比才能实现,因此其速度环和电流环必然为一个串级的系统,其中将速度环做为外环,电流环做为内环。调节过程如下所述:由给定速度减去反馈速度得到一个转速误差,此转速误差经过PID调节器,输出一个值给电流环做给定电流,再由给定电流减去反馈电流得到一个电流误差,此电流误差经过PID调节器,输出一个值就是占空比。在速度环和电流环的调节过程中,PID的输出是可以作为任意量纲(即无量纲,用标幺值来表示;标幺值:英文为perunit,简写为pu,是各物理量及参数的相对单位值,是不带量纲的数值)来输入给下一环节或者执行器的,因此无需去管PID输出的量纲,只要是这个输出值反映了给定值和反馈值的差值变化,能够使这个差值无限趋近于零即可,相当于将输出值模糊化,不用去搞的太清楚,如果你要是一直在这里纠结输出值具体是个什么东西时,那么你就会瞎在这里出不来了。假如你要控制一个参数,并且这个参数的大小和你给定量和反馈量有着直接的关系(线性关系或者一阶导数关系或者惯性关系等),那么就可以不做量纲变换。比如速度环的PID之后的输出就可以直接定义为转矩,因为速度过慢就要提高转矩,速度过快就要减小转矩,PID输出量的意义是调整了这个输出量,就可以直接改变你要最终控制的参数,并且这个输出量你是可以直接来控制的,这种情况下PID输出的含义是你可以自己定的,比如直流电机,速度环输出你可以直接定义为转矩,也可以定义为电流,然后适当的调节PID的各个参数,最终可以落到一个你能直接控制的量上,在这里最终的控制量就是占空比的值,当占空比从0%—100%时对应要写入到寄存器里面的值为0—3750时,那么0—3750就是最终的控制量的范围。在调速控制中,既要满足正常负载时的速度调节,还要满足过负载时进行电流调节。如果单独采用一个调节器时,其调节器的动态参数无法保证两种调节过程同时具有良好的动态品质,因此采用两个调节器,分别调节主要被调量转速和辅助被调量电流,以转速调节器的输出作为电流调节器的输入,电流环是通过电流反馈控制使电机电枢电流线性受控,可达到电机输出力矩的线性控制,并使其动态范围响应快,最后再输出去控制占空比,从而改变MOSFET的导通时间,二者之间实行串级连接,它是直流电力传动最有效的控制方案。在双闭环调速系统中,输入参数有三个,分别为给定速度和反馈速度以及反馈电流,其中给定速度由用户指定,一般指定为旋转速度(RPM转/分钟)或直线速度(m/s米/秒)。而反馈速度和反馈电流则需要由传感器来获取,下面来讲一下在无刷直流电机控制系统中,反馈速度和反馈电流的获取。反馈速度:简单点的就由电机内用来检测转子位置的三个霍尔元件来得到,高端点的就加光电编码器,分别称为霍尔元件测速和编码脉冲测速。霍尔元件测速:在电机磁极对数为1的情况下,转子旋转一周的时间内,霍尔传感器输出3路各180度信号,其中每两个传感器之间有60度的交叠信号,只要检测其中一路霍尔传感器的信号宽度就能计算出电机的速度。用输入捕捉(CAP)端口在上升沿捕捉一个时间标签,再在下降沿捕捉一个时间标签,根据两个时间标签的差值得出周期,由于霍尔传感器是在电机内固定不变的,因此每次在霍尔传感器的信号宽度下旋转的角度是一定的(即走过的距离是固定的),最后用此固定的距离除以周期即可得到速度,即T法测速,测量两个信号之间的时间换算成周期。那么转子每转180度可以测到一次速度(旋转一周内可以测到2次速度),而在电机磁极对数为10的情况下则转子每转18度可以测到一次速度(旋转一周内可以测到20次速度),这种方法简单实用,但是在电机转速较低时,获取一次有效速度的时间较长,实时性较差。编码脉冲测速:是用数字脉冲测量转速的方式,精度取绝于数字脉冲的编码线数(编码线数就是编码器的分辨率,也就是转子转一圈所发出的脉冲数)。脉冲测速最典型的方法有测频率(M法)和测周期(T法)。定性分析:M法是测量单位时间内的脉冲数换算成频率,因存在测量时间内首尾的半个脉冲问题,可能会有2个脉的误差。速度较低时,因测量时间内的脉冲数变少,误差所占的比例会变大,所以M法宜测量高速。如要降低测量的速度下限,可以提高编码器线数或加大测量的单位时间,使用一次采集的脉冲数尽可能多。T法是测量两个脉冲之间的时间换算成周期,从而得到频率。因存在半个时间单位的问题,可能会有1个时间单位的误差。速度较高时,测得的周期较小,误差所占的比例变大,所以T法宜测量低速。如要增加速度测量的上限,可以减小编码器的脉冲数,或使用更小更精确的计时单位,使一次测量的时间值尽可能大。M法、T法各有各自的优劣和适应范围,编码器线数不能无限增加、测量时间也不能太长(得考虑实时性)、计时单位也不能无限小,所以往往有时候M法、T法都无法胜任全速度范围内的测量。因此产生了M法、T法结合的M/T测速法:低速时测周期、高速时测频率。定量分析:M/T法中的“低速”、“高速”如何确定呢?假定能接受的误差范围为1%、M法测得脉冲数为f,T法测得时间为t。M法:2/f=1%==f=200即一次测量的最小脉冲数为200,设此频率对应的速度为V1T法:(1/(t-1)-1/t)/(1/t)=1%==t=101即一次测量的时间为101个单位,设此周期对应的速度为V2若计时单位为mS,则t=101mS这只是理论精度,实际应用还要考虑脉冲信号采集的延迟,软件处理所需花费的时间。若V1V2,则M/T法能满足全范围内的速度测量。一个系统设计之前,就需要详细的计算,使V1V2或尽可能接近。不能光凭经验估算确定高低速、传动比、编码线数。然而很不幸,很多现有系统中会出现V1V2,就会出现(V2,V1)这一段速度无论M法还是T法都无法覆盖的情况,一个缓解的办法就是在(V2,V1)段同时使用M法和T法测量,然后取平均值,但要解决好M/T测量的同步问题。对于上面两种方式通俗一点的讲就是,一个是在固定的时间内测转动的脉冲个数,一个是测两个脉冲之间用了多少时间。下面给出标准的PID算法:标准的PID算法即为位置式:Pu(t)=Kp*e(t)+Ti*∑e(t)+Td*[e(t)-e(t-1)]上一次的计算:Pu(t-1)=Kp*e(t-1)+Ti*∑e(t-1)+Td*[e(t-1)-e(t-2)]两式相减得到增量式:Pu(t)=Kp*[e(t)-e(t-1)]+Ti*e(t)+Td*[e(t)-2*e(t-1)+e(t-2)]用C代码表式公式:用ek代表e(t);用ek1代表e(t-1);用ek2代表e(t-2)Pu=Kp*(ek-ek1)+Ti*ek+Td*(ek-2*ek1+ek2)在上式中,Pu是输出量,Kp是比例系数,Ti是积分时间,Td是微分时间,ek是当次的误差,ek1是前一次的误差,ek2是前两次的误差。上式是模拟PID的算法,随着计算机控制技术的发展,以及高速数字信号处理器和各种高性能的MCU的大量应用,目前绝大部分都转向了数字PID算法。将模拟PID控制算法近似转换到数字化的控制算法中,多了一个参数Ts,Ts代表的是系统的采样(控制)周期。在绝大部分的控制系统中,采样周期等同于控制周期,一般不做区分,即在同一个周期内采样一次反馈值进行一次PID运算之后调整一次被控量。从理论上来讲采样周期和控制周期尽量的缩短一些,这样可以及时的调整输出。实际上要看被控对象的反应速度,和滞后时间,因为不同的被控对象千差万别。采样周期(即反馈值多长时间进行一次采样或捕捉):选取采样周期时,有下面几个因素可供参考:1、采样周期应远小于对象的扰动周期。2、采样周期应比对象的时间常数小得多,否则所采样得到的值无法反映瞬间变化的过程值。3、考虑执行机构的响应速度。如果采用的执行器的响应速度较慢,那么盲目的要求过短的采样周期将失去意义。4、对象所要求的调节品质。在计算机速度允许的情况下,采样周期短,调节品质好。5、性能价格比。从控制性能来考虑,希望采样周期短。但计算机运算速度,以及A/D和D/A的转换速度要相应地提高,会导致计算机的费用增加。6、计算机所承担的工作量。如果控制的回路较多,计算量又特别大,则采样要加长;反之,可以将采样周期缩短。综上分析可知:采样周期受很多因素的影响,当然也包括一些相互矛盾的,必须根据实际情况和主要的要求作出较为折衷的选择。实际过程控制中得出以下经验(仅供参考):如:流量1~2S,压力2~3S,温度1.5~4S,液位5~8S。在BLDC直流调速系统中,转速和电流的采样周期一般选PWM的频率或2倍PWM频率,不能小于PWM频率,在TI给出的例程中,PWM频率是20KHz,周期为50US,采样周期是25US,即2倍PWM频率采样。控制周期(就是每隔多长时间进行一次PID运算,并将结果输出)进行一次PID运算就是一次控制周期,在绝大多数情况下都是采样一次就进行一次PID运算。但需要注意的是,PID控制周期与实际监测对象数据的采样周期是不同的。例如,对于温度控制,可能每秒采集1次数据,每隔10秒进行一次PID控制输出。根据模拟PID可以得到数字PID的控制算法,为了用计算机实现PID控制规律,当采样时间Ts很小时,可以通过离散化来得到公式。在数字化PID中,用Ki(积分系数)来代替Ti(积分时间),用Kd(微分系数)来代替Td(微分时间)。其中Ki=(Kp*Ts)/Ti;Kd=(Kp*Td)/Ts。1、数字化位置式PID标准形式:Pu(t)=Kp*e(t)+Ki*∑e(t)+Kd*(e(t)-e(t-1))]+Pu(t-1)将Kp分离出来:Pu(t)=Kp*[e(t)+(Ts/Ti)*∑e(t)+(Td/Ts)*(e(t)-e(t-1))]+Pu(t-1)用C代码表式公式:用ek代表e(t);用ek1代表e(t-1);用Pu1代表Pu(t-1)Pu=Kp*[ek+(Ts/Ti)*∑ek+(Td/Ts)*(ek-ek1)]+Pu12、数字化增量式PID(同模拟量一样跟据两式相减得到增量式)Pu(t)=Kp*[(e(t)-e(t-1))+(Ts/Ti)*e(t)+(Td/Ts)*(e(t)-2*e(t-1)+e(t-2))]用C代码表式公式:用ek代表e(t);用ek1代表e(t-1);用ek2代表e(t-2)Pu=Kp*[(ek-ek1)+(Ts/Ti)*ek+(Td/Ts)*(ek-2*ek1+ek2)]在上式中,Pu是输出量,Pu1是前一次的输出量,Kp是比例系数,Ti是积分时间,Td是微分时间,Ts是采样周期,ek是当次的误差,ek1是前一次的误差,ek2是前两次的误差。而在实际的应用中,为了简化程序,一般不将Ts拿来做运算,因为积分项和微分项的常数都是两个比值,分别直接用系数Ki和Kd来代替,只是当采样周期改变时,要去相应的调整几个系数的大小,所以我们可以得到无刷直流电机的增量式PID算法公式:Pu=Kp*[(ek-ek1)+Ki*ek+Kd*(ek-2*ek1+ek2)]但是上面的公式在无刷直流电机的PID控制中并不实用,因为在电机的启动、停止或大幅增减设定值时,由于会出现很大的偏差,且有时此偏差会保持一段时间不变(如电机启动时需要一定的时间才能转动起来),会造成PID算法的比例控制失调,积分严重饱和的现象,此现象表现为电机需要较长的时间才能运转起来,运转起来之后又会出现较大的超调。因此要将其做改进的PID控制的形式,同时要在程序中加抗积分饱和的判断处理。改进的PID公式:Pu=Kp[ek+Ki*∑ek+Kd*(ek-ek1)]上式中,如果去掉微分项,只用PI控制,则公式:Pu=Kp[ek+Ki*∑ek]将∑ek分解出来用误差累加ei表示,则公式:Pu=Kp*ek+Ki*Kp*ek+ei;ei=Ki*Kp*ek+ei加变速积分,则公式:Pu=Kp[ek+fek*K