谢丫丫

如何使用模拟PID控制器,测量直流电机的位置和速度控制?

0
阅读(158) 评论(0)

本文介绍如何实现模拟PID控制器,包括调整直流电机轴的角位置,编辑设计以控制其速度,以及调整PID参数以获得可靠的性能。

本文重点介绍如何制作一个教育套件,以演示PID控制器对试图达到特定位置的直流电机响应的影响,在这种情况下,零位置。无论电机上的任何合理负载如何,教学套件还可以修改PID控制以调节电机速度以达到特定的所需速度。

 

主要系统概述

该系统分为三个主要部分:

  1. 旋转编码器,用于将直流电机轴的位置作为模拟信号进行中继,以输入模拟PID控制器。这将使用Dialog SLG46621可编程混合信号矩阵IC完成。

  2. 带3个电位计的模拟PID控制器,用于控制PID参数。这将从一个点给出一个模拟信号并将该点设置为零位置。然后该部分输出一个控制电机速度的模拟信号。该信号还不是PWM信号。该系统的这一部分使用四运放SLG88104。

  3. 一个PWM发生器,它接收控制电机速度的模拟信号并将其馈送到我们系统中的PWM模块。然后将PWM模块输出馈送到电机驱动器,以将电机轴调整到所需位置。请注意,已从第1部分的编码器反馈信号中获知电机的方向。

通常,微控制器用于实现PID控制器。它们接收来自编码器的输入脉冲,然后通过控制算法输入它们以输出电机速度。然而,这需要软件开发,并且可能需要大量时间和金钱来开发可靠的系统。GreenPAK实施不需要任何软件开发或其他高级硬件。基于软件的PID具有局限性,具体取决于您使用的微控制器。相反,硬件PID可以为您想要影响响应的任何参数提供更可靠的控制,但硬件通常难以调整。

为了使这个解决方案成为可行的教育工具包,需要几个组件:

  • 精心设计的外壳,带有开/关开关,可广泛控制PID参数,还有一个显示参数值的附加LCD。

  • 来自GreenPAK PWM模块的可调PWM频率,可实现平滑响应。

  • 安装在电机上的指针稳定安装。

 

解码增量旋转编码器

旋转编码器的输出由两个相位相差90°的脉冲信号构成。脉冲数与一个完整旋转时编码器盘覆盖的槽数相关。位置控制的主要思想是从我们的初始(零)位置开始,我们需要计算磁盘在CW或CCW方向上覆盖的插槽数量。如果磁盘反转其方向,则计数将减少。例如,如果电机开始顺时针移动并计数5个脉冲(5个槽),然后返回其初始位置,则需要沿逆时针方向移动5个计数,使其最终返回到开始位置。

 

正交编码器输出

图1.正交编码器输出

 

我们将使用脉冲A和脉冲B进行位置跟踪和方向检测。使用GreenPAK块实现了一个向上/向下计数器,它将根据电机的方向增加/减少。所有块都通过内部振荡器同步。

首先,我检查了我需要多少计数来覆盖我在一个方向上的缩放,我发现根据我的设计我需要大约30个计数。我使用了一个8位计数器来提高精度。然后,我使用时钟正交解码器实现了方向检测电路,以确定电机是在移动CW还是CCW。每当CW或CCW上有脉冲时,计数器CNT4 / DLY4 / FSM1就会被计时。CW上的脉冲使计数器计数,CCW上的脉冲使计数器倒计数。计数器初始化为127(最大值为255,以便有足够的空间进行计数或向下计数。输出通过SPI并行输出模块提供给引脚12-20。

我使用几个DFF和一个管道延迟模块实现了一个时钟正交解码器。当A引出B时,CW上有一个脉冲,当B引出A时,CCW上有一个脉冲。然后添加最后一级(DFF3),CW作为输入,CCW作为时钟输入,因此当电机顺时针旋转时,DFF3的反相输出保持低电平,当电机逆时针旋转时输出将保持高电平。

 

使用GreenPAK的时钟正交解码器

图2. 使用GreenPAK的时钟正交解码器

 

计数器将保持旋转编码器的位置,直到通过CW上的脉冲或通过CCW上的脉冲向下触发它。注意,SLG46621有2个矩阵:8位计数器在第二个矩阵中实现; 正交解码器电路在第二矩阵中实现。产生PWM信号所需的元件在两个矩阵之间分开。

 

FSM上/下计数器

图3. FSM向上/向下计数器

 

SPI块

图4. SPI块

 

SPI并行输出

图5. SPI并行输出

 

将编码器数据转换为模拟信号

现在我们有一个8位数字数据值,需要将其转换为模拟信号,以便将其输入模拟PID。内置DAC不支持直接从CNT4 / DLY4 / FSM1模块获取输入,因此我使用Dialog SLG88104四运放实现了外部8位DAC。

 

8位DAC

图6. 8位DAC

 

我选择R为10 k欧姆,第0位是SPI第一个并行输出,即引脚12,依此类推。具有最低值R的电阻器对应于最高加权二进制输入位7(MSB)[27 = 128]。2R,4R,8R,16R,32R和64 R对应于位6(26 = 64),位5(25 = 32),位4(24 = 16),位3(23 = 8)的二进制权重,位2(22 = 4),位1(21 = 2)和位0(LSB)[20 = 1]。数字输入(位0至位7)与模拟输出VOUT之间的关系如下:

其中VREF是电路的参考电压,SLG46621为3.3 V. 求和放大器之后是反相放大器,以反转电压的极性以获得正电压。

请注意,如果您使用双电源运算放大器,您的输出将有两个电源轨,并将在+ ve和-ve之间摆动。您必须使用另一个运算放大器使此输出电压为正,以便将其输入PID电路。如果您使用单电源运算放大器,您的输出将在GND和+ ve VCC之间摆动,您将不必使用转换电路。在这种情况下,因为我们使用的是SLG88104运算放大器,所以194到255的情况将被丢弃,因为它们高于5 V - 器件的最大电压。

在本文的结果中,DAC在小型面包板上实现。

 

用SLG88104演示和实现PID控制器

术语PID是比例积分微分的缩写。PID控制器是反馈系统的一部分,该系统使用比例,积分和微分驱动元件来控制过程。

需要PID控制,因为有些事情很难用标准方法控制。使用PIC微控制器进行类似的应用以调节电源的输出。PIC通过ADC转换器读取输出电压,并调节PWM以调节输出。控制策略很简单:如果电压低于设定值,则打开PWM。如果测量的电压高于设定值,则关闭PWM。PIC电源几乎可以工作。

实际上,PIC控制器确实产生了所需的DC输出电压。不幸的是,它还在DC信号上产生了明显的AC纹波。

这种控制策略称为开关或爆炸控制。许多类型的系统都使用这种控制策略。以你家里的炉子为例。当温度低于设定值时,炉子开启。当温度高于设定点时,炉子关闭。就像电源一样,温度随时间变化的曲线会产生正弦波。

对于某些类型的控制,bang-bang是可以接受的; 对于其他人来说,事实并非如此。你不希望这种类型的伺服电机控制,会发生坏事!试想一下:电机在一个方向上是全功率,下一个时刻,在另一个方向上是全功率。你可以看到bang-bang这个词的来源; 伺服不会持续很长时间!

PID控制器可为系统提供受控的,几乎智能的驱动器。我们现在将检查PID系统的各个组件。

 

比例控制器

比例分量只是一个增益块。增益由电阻值设置如下:

 

比例控制器

图7.比例控制器

 

积分控制器

我们可以将此视为随时间累积(添加)数量。在我们的PID控制器中,我们随着时间的推移积分电压。输出电压由下式给出:

 

积分控制器

图8.积分控制器

 

面积是电压和时间的组成部分。让我们来看一下理想积分器的运算。我们可以通过使1 / RC项等于1来简化数学运算(即,让R =100KΩ,C =10μF)。

 

积分控制器中输出与输入的关系

图9. 积分控制器中输出和输入之间的关系

 

在图8中,从0到2秒,有2 V方波应用于积分器的输入。此时间段结束时积分器的输出为-4 V(请记住电路正在反相)。积分器累积了2 V信号,持续2秒。该区域等于4.从T2到T4,没有电压施加到积分器。输出没有变化。在该图的其余部分中,您可以看到当输入信号改变极性时,积分器输出会改变极性。

前面的讨论假定了一个理想的积分器。真正的电容器会有一些泄漏,并且往往会自行放电。此外,真正的运算放大器可以在没有输入的情况下对电容器充电。如果电路是按照绘制的,那么在运行几分钟后它可能会饱和。为防止这种饱和,请在电容上并联一个电阻。出于我们的目的,我们并不关心饱和度。我们将使用积分器和其他电路来控制电容器上的电荷。

 

衍生控制器

导数是对变化率的衡量。该电路类似于您在其他原理图中看到的高通滤波器。低频被衰减,而高频被允许通过。输出电压由下式给出:

变化率相当于测量线的斜率。斜率是电压变化除以时间变化的量度。在数学术语中,这被称为Δ时间上的增量电压或简称为dv / dt。如果我们对微分器应用斜坡,我们会得到稳定的直流输出电压。

 

微分控制器中输入和输出之间的关系

图10. 微分控制器中输入和输出之间的关系

 

为了简化数学运算,我们将RC = 1。从时间0到2,电压变化-4伏,而时间变化2秒。因此,该线的斜率为-2。微分器的输出将等于2 - 记住阶段正在反转。

 

在应用中使用PID控制器作为位置控制器

首先要注意的是,这是一个并行的过程。P,I和D项是独立计算的,然后在夏季Σ添加。该循环的输入是设定点 - 在我们的应用中,0 VDC用作零位。输出是一个信号,我们将用它来控制电机在适当方向上的速度,由编码器决定。我们现在将独立检查每个PID术语,以了解它们之间的关系。

在图11的最左侧,我们看到了一个求和点。设定点和反馈之间的差异是系统的误差。如果测得的电机位置为正应的位置,则误差为负(即需要进行负校正)。同样,如果测得的电机位置为负,则需要进行正校正。

 

PID程序框图作为位置控制器

图11.  作为位置控制器的PID框图

 

误差乘以比例块的增益。请注意,框图将此显示为负增益。这样做是为了使框图和示意图(稍后介绍)相互一致。比例放大器输出被发送到第二个求和点,其中符号再次被反转。放大器用于提升输出信号电压,因此可以将其反馈到GreenPAK到PWM模块,以输出PWM信号,通过电机驱动器驱动电机。

 

比例运算

系统将尝试通过以适当的速度将电机转向与错误相反的方向来纠正错误。

校正的强度由比例增益确定。如果没有错误,则没有比例驱动器。

 

整体操作

然后积分误差向电动机提供校正信号。

积分部分累积误差。随着时间的推移,小错误可能会成为一个很大的错

当累积误差时,电动机被迫纠正错误。

积分器将超过设定点。必须产生误差以抵消输入信号以使电容器放电。

 

衍生

当电动机开始转动时,电阻器测量的电压将增加或减少。如果我们的电压随时间变化,我们就会有一个斜坡!斜坡的斜率随电机的速度而变化。如果电机快速移动,则斜率很高。因此,衍生阶段的输出也将很高。

注意:电机必须移动!

 

当电机快速移动时,微分器将具有高输出电压,而当电机缓慢移动时,微分器将具有低电压。

该信号以减慢电动机的方式施加。

如果电机没有运动,微分器的输出电压为0。

微分器的连接不同于比例和积分部分。微分器直接从电阻器接收其输入。因此,它仅测量电动机的运动速度。它并不关心设定点。

 

模拟PID控制器电路的示意图以及系统的其他模块

图12.  模拟PID控制器电路以及系统其他模块的原理图

 

PID参数及其对系统响应的影响

增加PID参数对整个系统响应的影响

图13.增加PID参数对整个系统响应的影响

 

使用SLG88104实现电路

我使用可变电阻来调节PID电路的设定值。设定值是计数器的初始值,即127,即我需要大约3.27伏。可变电阻的输入是SLG46621 IC的VDD,我们使用可变电阻将输出调整为3.27 V.

在测试上面的PID电路后,我需要使用另一个运算放大器来制作电压放大器来放大输出信号。这导致电压的变化更加明显。

 

非反相电压放大器

图14.非反相电压放大器

 

为了克服增加另一个运算放大器以纠正运算放大器符号的问题,我使用了非反相放大器配置。输出电压由下式给出:

我选择R1为1kΩ,R2为10kΩ,因此电压从原始信号放大11倍。输出信号将从大约0变为4.7 V.

请注意:如果您不使用SLG88104,请不要忘记运算放大器的+ V和-V,以进行适当的操作,如DAC操作中所述。

我使用EagleCAD软件制作了一个用于模拟PID的PCB,它接受SLG88104或LM358来比较两个放大器的输出。PCB具有输入信号的测试引脚,放大前的输出信号和设定值。后来,我通过跳线添加了测试引脚,用于放大后的输出信号。

 

在电压放大之前使用Eagle软件的模拟PID原理图

图15.  电压放大前使用Eagle软件的模拟PID原理图

 

模拟PID电路板在电压放大之前使用Eagle软件

图16.  在电压放大之前使用Eagle软件的模拟PID电路板

 

注意,如果你想使用LM358,只需将IC放在PCB上使用它。如果您想使用SLG88104,请将SLG88104评估板上的OpAmps连接到最左侧的引脚头扩展。PCB清晰标记,便于连接和调试。

电压放大电路是在小型面包板中单独制作的,因为如果您使用的是LM358则无需放大电压,但如果您使用的是SLG88104,则需要这样做。

 

SLG88104对比LM358

虽然使用SLG88104时需要增加一个额外的运算放大器来放大电压,但这款运算放大器有几个主要优点。与LM358相比,它噪声更小,对输入信号变化的响应更快,并且与LM358相比明显更小,因此这种模拟PID电路可以使用表面贴装元件进行重新设计,使其更加紧凑,并且仍然具有相同的性能。

 

取模拟信号 

模拟信号控制PWM到GreenPAK中的PWM模块并从PID电路输出,是校正信号,它保持电机速度到达零位置,该位置为127计数(计数器的初始值)。由于该信号是模拟信号,因此不能直接馈入电机驱动器,我们必须先将GreenPAK馈入PWM模块。然后我们使用输出PWM信号来保持电机速度。

我使用应用笔记AN-1057伺服电机控制作为参考来调整PWM模块参数。 

 

PWM模块的Matrix0连接

图17. PWM模块的Matrix0连接

 

PWM模块的Matrix1连接

图18. PWM模块的Matrix1连接

 

PWM电路参数

图19. PWM电路参数

 

请注意,在零位置,即我们的初始值127,电机永远不会停止; 振荡可能会触发向上或向下计数。即使只有很小的电压,电机也会在零位附近保持振荡。我制作了一个多路复用器来控制引脚5的状态,引脚5将PWM信号提供给电机驱动器。当零位置点出现时,状态Q0至Q6为高电平,Q7为低电平。

然而,在任何其他情况下,引脚20输出将作为馈送到电动机驱动器的PWM信号连接到PWM块的输出。这确保了电机必须在零位置停止并具有一些可接受的误差。这是因为我使用了用于控制直流伺服电机的相同模块,这需要在0度时需要1.5ms的脉冲,这种多路复用技巧确保了当计数为127即零位置时没有输出。 

 

选择正确的方向引脚连接电机驱动器

现在,让我们修改我们的场景:电机最初在零位置启动,如果我们顺时针移动电机,它必须逆时针移动以抵消来自PWM模块的适当输出速度的运动到达零位置,反之亦然逆时针移动,这是我们实际从DFF3输出得到的。因此,顺时针方向移动将输出一个LOW信号,该信号被馈送到电机驱动器,因此它使电机逆时针移动以使用PWM模块的适当输出速度抵消运动,反之亦然。

电机驱动器PWM引脚连接到引脚5,电机驱动器方向引脚连接到引脚6。

 

电机驱动引脚

图20.电机驱动引脚

 

最终系统监视和资源利用

位置控制系统框图

图21.位置控制的 系统框图

 

系统如何工作:总结

  • 电机编码器输出有两个输出:脉冲A和脉冲B,用于将方向信号馈送到电机驱动器和时钟正交电路,根据电机的方向触发计数器上升或下降;

  • 一个8位向上/向下计数器用于计算电机编码器磁盘所覆盖的插槽:沿CW方向向上,向CCW方向向下;

  • 该数据将使用外部DAC转换为模拟信号,然后输入模拟PID电路,设定值将设置为计数器的初始值127;

  • 调整系统PID参数,直到获得稳定的响应,然后PID的输出应该是保持电机速度的信号。此输出不是PWM信号,因此应将其反馈给GreenPAK;

  • 模拟信号将通过ADC模块然后到PWM模块输出相应的PWM信号;

  • 现在我们有适当的PWM信号和来自方向检测电路的方向信号,应该将它们馈送到电机驱动器以校正电机位置。

 

PID参数调整

PID调整是一个复杂的过程,属于应用笔记的范围。

对于本应用的范围,其重点是向学生介绍PID控制的想法,试验和错误是调整PID参数的完美方式,因为您观察系统的响应并调整参数以达到稳定点没有过冲或振荡。

然而,对于具有很少或没有齿轮传动的小型低扭矩电机,可以使用一个程序来获得良好的基线调谐,以探测其对干扰的响应。

要调整PID,请使用以下步骤:

  • 将所有增益设置为零;

  • 增加P增益,直到对干扰的响应为稳定振荡;

  • 增加D增益直到振荡消失(即它被临界阻尼);

  • 重复步骤2和3,直到增加D增益不会停止振荡;

  • 将P和D设置为最后的稳定值;

  • 增加I增益,直到它达到设定点所需的振荡次数(通常为零,但如果你不介意一些过冲振荡,可以做出更快的响应)。

您使用的干扰取决于连接到控制器的机制。通常,用手移动机构远离设定点并放开就足够了。如果振荡越来越大,那么你需要降低P增益。

如果将D增益设置得太高,系统将开始颤动(以比P增益振荡更高的频率振动)。如果发生这种情况,请降低D增益直至停止。

 

表1. PID调整方法之间的比较

表:PID调整方法之间的比较

 

修改速度控制系统

每秒脉冲数与电机速度成正比。脉冲A被解码以产生向上计数脉冲或向下计数脉冲。对于软件解码,A输出由软件计数器读取,每秒计数与每秒转数成比例。

 

解码旋转编码器用于速度控制框图

图22. 用于速度控制框图的解码旋转编码器

 

系统框图

速度控制系统框图

图23.速度控制的系统框图

 

Arduino实现

使用GreenPAK执行PID控制的另一种方法是使用Arduino,它是业余爱好者使用的流行微控制器。与GreenPAK相比,Arduino解决方案需要一些编程知识和更多的空间,因为Arduino比GreenPAK大得多。此外,GreenPAK的成本远低于最便宜的Arduino。

而且,如前所述,以软件为中心的PID控制器具有局限性。在硬件中实现PID使用户可以控制设计中的每个参数,但可能更难以调整。

image.png


项目结果

系统的每个部分都是分散实现的,然后将这些部分集成在一起,整个系统进行了调试。由于测试引脚,PCB设计使系统调试变得容易。

在构建教育工具包时应用了以下测试:

  1. 单元测试:我将应用程序分成小块并单独测试每个小块以便正确操作

    • 具有缩放功能的GreenPAK向上/向下计数器:主要思想是通过缩放移动指针并通过缩放观察计数器增加,我制作了一个带有8个LED的外部电路来测试8位计数器,另一个单独的LED用于方向检测,即在移动CW时移动CCW和OFF,同时指示电机驱动器正确信号;

    • DAC电路:我验证了DAC的操作如本应用笔记第4部分所述;

    • 没有放大的模拟PID电路:在设计PCB之前,我使用面包板制作模拟PID电路,并通过Arduino提供的模拟信号进行测试。后来,我通过8位DAC的输入信号测试了它;

    • 带放大的模拟PID电路:我在运算放大器放大后探测PID输出;

    • 电机驱动器:我使用Arduino和GreenPAK实现的输入PWM和方向信号测试了电机驱动器。

  2. 集成测试:我将系统的小部分相互连接,并将它们作为设计块进行测试。

  3. 系统测试:我将整个系统测试为黑盒子。我打开套件,然后检查电机对指针移动的响应。

  4. 验收测试:达到稳定系统的完美参数,并注意到电位器值的变化如何影响响应。我使用下面的曲线作为完美响应的指南。

 

示波器截图系统达到稳定的系统响应

图24. 系统的示波器屏幕截图,达到稳定的系统响应

 

P和I参数的参考曲线

图25.  P和I参数的参考曲线

 

最后的作品

 

在将系统放入盒子之前对系统进行最终组装

图26.  将系统放入盒子之前的最终组装

 

教育工具包的最终出现

图27. 教育工具包的最终外观

 

结论

本应用笔记演示了如何对直流电机进行位置和速度控制。这可以用作教育工具包,以显示比例,积分和微分控制方案的效果,以及饱和度,抗饱和和控制器更新速率对稳定性,过冲和稳态误差的影响。

只使用了少量SLG46621V的内部模块,剩下大部分模块可用于构建其周围的其他电路。这是混合信号IC的理想示例,因为在该应用中使用模拟和数字模块。

稍后可以添加LCD以显示PID参数值。

与微控制器相比,GreenPAK实现不需要任何额外的硬件或软件开发。此外,专注于硬件驱动的PID控制可确保模拟PID控制器所需的快速响应。