术语和定义
参考文献
https://www.dialog-seminile.com/configurable-mixed-signal..
下载我们的免费格林帕克™软件设计师(1]打开.gp文件[2]并查看所提出的电路设计。使用格林帕克开发工具(3.]在几分钟内将设计冻结到您自己的定制IC中。yabo国际娱乐对话框半导体提供完整的应用程序笔记库[4.],包括设计实例,以及对Dialog IC的功能和模块的解释。
- GreenPAK设计软件,《软件下载及用户指南》,Dialog Semiconductoryabo国际娱乐
- 使用模拟PID控制器的DC电机的AN-CM-250位置和速度控制.GP那格林帕克设计文件,Dialog半导yabo国际娱乐体
- GreenPAK开发工具那格林帕克开发工具网页,对话半导体yabo国际娱乐
- GreenPAK应用笔记那格林帕克应用笔记网页,对话框半导体yabo国际娱乐
介绍
这个应用笔记重点on制作一个教育工具包来演示PID控制器对直流电动机试图达到特定位置的响应的影响,在本例中是零位置。教育套件还可以修改PID控制,以调整电机速度,以达到一个特定的所需速度,无论任何合理的负载对电机。
系统分为三个主要部分:
- 旋转编码器,其将DC电动机轴的位置作为送入模拟PID控制器的模拟信号中继。这将是使用对话框完成的格林帕克SLG46621可编程混合信号矩阵IC。
- 具有3个电位器的模拟PID控制器,可控制PID参数。这采用从点给出的模拟信号,并将点设置为零位置。然后,该部分输出控制电机速度的模拟信号。该信号尚未成为PWM信号。该系统的这一部分使用四欧-AMP SLG88104。
- 一个PWM发生器,它接收控制电机速度的模拟信号,并将其馈送到我们系统中的PWM模块。然后将PWM块输出馈给电机驱动器,以调整电机轴到所需的位置。注意,电机的方向已经从第1部分的编码器反馈信号中知道了。
通常,微控制器用于实现PID控制器。它们从编码器接收输入脉冲,然后通过控制算法馈送它们以输出电机速度。但是,这需要软件开发,它可能需要大量的时间和金钱来开发可靠的系统。一种格林帕克实现不需要任何软件开发或其他高级硬件。基于软件的PID具有限制,具体取决于您使用的微控制器。相反,硬件PID为您提供了更可靠的控制,对您想要影响响应的任何参数,但硬件通常更难调整。
为了使这个解决方案作为一个教育工具包具有商业可行性,需要以下几个组件:
- 一个设计良好的外壳与on/off开关,广泛的PID参数控制,和一个额外的LCD显示参数的值。
- PWM频率可调格林帕克PWM块平滑响应。
- 用于连接到电机的指针的稳定安装。
解码增量旋转编码器
旋转编码器的输出由两个脉冲信号形成为90º。脉冲的数量与编码器盖在一个完全旋转时的槽的数量相关联。位置控制的主要思想是,从我们的初始(零)位置我们需要计算磁盘在CW或CCW方向上覆盖的插槽数量。如果磁盘反转其方向,则计数将减少。例如,如果电机开始顺时针移动和计数5个脉冲(5个插槽),则返回其初始位置,需要在逆时针方向上移动5计数,以便它最终启动的位置.
我们将使用脉冲A和脉冲B进行位置跟踪和方向检测。使用。实现了一个向上/向下计数器格林帕克根据电动机的方向增加/减小的块。所有块都通过内部振荡器同步。
首先,我检查了在一个方向上需要多少计数来覆盖我的缩放,我发现根据我的设计,我需要大约30计数。为了提高精度,我使用了8位计数器。然后,我实现了一个方向检测电路使用时钟正交解码器,以确定电机是移动CW或CCW。计数器CNT4/DLY4/FSM1在连续波或CCW上每次有脉冲时计时。CW上的脉冲使计数器向上计数,CCW上的脉冲使计数器向下计数。计数器被初始化为127(最大值为255,以便有足够的空间向上或向下计数)。输出通过SPI并行输出模块给出引脚12-20。
我使用多个DFF和管道延迟块实现了一个时钟正交解码器。当引线B有CW有脉冲时,当B引导A时,CCW上存在脉冲。然后将CW添加最终阶段(DFF3)作为输入和CCW作为时钟输入,因此当电动机顺时针旋转时,DFF3的反相输出保持低电平,并且当电动机逆时针旋转时,输出将保持高。
计数器将保持旋转编码器的位置,直到它通过连续波上的脉冲触发或通过CCW上的脉冲触发。注意SLG46621有2个矩阵:在第二个矩阵中实现了8位计数器;在第二个矩阵中实现了正交译码电路。产生PWM信号所需的组件被分成两个矩阵。
将编码器数据转换为模拟信号:
现在我们有一个8位数字数据值,需要将其转换为模拟信号,因此可以馈入模拟PID。内置DAC不支持直接从CNT4 / DLY4 / FSM1块取输入,因此我使用对话框SLG88104 Quad OP-AMP实现了外部8位DAC。
我选择r为10 k欧姆,位0是SPI第一并联输出,销12等。具有最低值R的电阻对应于最高加权二进制输入位7(MSB)[27 = 128]。2R,4R,8R,16R,32R和64R对应于比特6(26 = 64),比特5(25 = 32),比特4(24 = 16),比特3(23 = 8)的二进制权重。位2(22 = 4),位1(21 = 2)和位0(LSB)[20 = 1]。数字输入(位0到位7)与模拟输出V之间的关系出去如下:
在V裁判为电路的参考电压,SLG46621为3.3 V。求和放大器后面跟着一个反相放大器来反转电压的极性以获得正电压。
注意,如果你使用双电源运放,你的输出将有两个电源轨,并将在+ve和-ve VCC之间摇摆。你将不得不使用另一个运放使这个输出电压为正,以便它可以馈电到PID电路。如果你使用一个单一的电源运放,你的输出将在GND和+ve VCC之间摇摆,你将不需要使用转换电路。在这种情况下,因为我们使用的是SLG88104运放,从194到255的情况将被丢弃,因为它们高于5 V -设备的最大电压。
在这个应用程序的结果说明,DAC是在一个小面包板上实现的。
PID控制器的演示及使用SLG88104实现
术语PID是代表比例积分衍生物的首字母缩写。PID控制器是使用比例,积分和导数驱动元件来控制过程的反馈系统的一部分。
需要PID控制,因为存在一些难以使用标准方法控制的东西。进行了类似的应用以使用PIC微控制器调节电源的输出。PIC用ADC转换器读取输出电压,并调节PWM以调节输出。控制策略很简单:如果电压低于设定点,请打开PWM。如果测量的电压高于设定点,则关闭PWM。PIC电源几乎工作。在实践中,PIC控制器确实产生所需的直流输出电压。不幸的是,它在直流信号上也具有重要的交流纹波。
这种控制策略被称为开关控制或砰砰控制。许多类型的系统使用这种控制策略。再以你家的炉子为例。当温度低于设定值时,加热炉启动。当温度高于设定值时,炉子关闭。就像电源一样,温度随时间变化的曲线会产生正弦波。
对于某些类型的控制,Bang-Bang是可以接受的;对于别人来说,不是。您不希望这种对伺服电机的控制,坏事会发生!立即想象:电机将在一个方向上全功率,下一刻,另一个方向全功率。您可以看到术语Bang-Bang来自哪里;那伺服不会持续很长时间!
PID控制器可以为系统提供受控,几乎智能驱动器。我们现在将检查PID系统的各个组件。
比例控制器
比例部分只是一个增益。增益由电阻的值设定,如下所示:
积分控制器
我们可以把它看作是随着时间累积(增加)一个量。在我们的PID控制器中,我们随着时间的推移对电压进行积分。输出电压为:
面积是电压和时间的组成部分。我们来研究理想积分器的运算。我们可以简化数学,使1/RC项等于1(即,设R=100 KΩ, C=10µF)。
在图8.,从0秒到2秒,有一个2v方波应用到积分器的输入端。在这段时间结束时,积分器的输出是- 4v(记住电路是反相的)。积分器在2秒内积累了2v信号。面积等于4。从T2到T4,积分器没有电压作用。输出没有改变。在该图的其余部分中,您可以看到当输入信号极性改变时,积分器输出极性改变。
前面的讨论假设了一个理想积分器。真正的电容器会有一些漏电,并且容易自行放电。而且,真正的OpAmps可以在没有输入的情况下对电容器充电。如果电路是按照图中所示构建的,那么它很可能在运行几分钟后就会饱和。为了防止这种饱和,增加一个电阻并联到电容器。就我们的目的而言,我们不关心饱和度。我们将使用积分器和其他电路来控制电容上的电荷。
微分控制器
导数是对变化率的测量。这个电路看起来类似于你在其他原理图中看到的高通滤波器。低频被衰减,而高频被允许通过。输出电压为:
变化率相当于测量线的斜率。斜率是衡量电压变化除以变化的变化。在数学术语中,这被称为ΔTem时或简单的DV / DT的Δ电压。如果我们向差异化施加斜坡,我们会获得稳定的直流输出电压。
为了简化计算,我们设RC=1。从时间0到2,电压变化-4伏,而时间变化2秒。因此这条线的斜率是-2。微分器的输出等于2,记住这一步是逆变的。
使用PID控制器作为应用中的位置控制器
首先要注意的是,这是一个并行的过程。P, I和D项是独立计算的,然后在夏天的Σ加起来。这个回路的输入是设定点-在我们的应用程序中,0 VDC被用作零位置。输出是一个信号,我们将使用它来控制电机在适当的方向上的速度,由编码器决定。现在我们将独立地检查每一个PID项,看看它们是如何关联的。
在最左边图11.,我们看到一个求和结。设定值与反馈值之间的差异就是系统的误差。如果测量的电机位置是正的,那么误差将是负的(即,需要负的修正)。同样,如果测量的电机位置是负的,则需要一个正校正。
错误乘以比例块的增益。请注意,框图将此显示为负增益。这是为了使框图和示意图(稍后呈现)彼此一致。比例放大器输出被发送到第二求和结,其中标志再次反转。放大器用于提高输出信号电压,因此可以反馈到格林帕克输出通过电机驱动器驱动电机的PWM信号。
成比例的操作
- 必须出现错误!
系统将尝试通过在以适当速度与错误的方向转动电机来纠正错误。
校正的强度由比例增益决定。如果没有误差,就没有比例驱动。
整体运作
然后集成错误,然后为电机提供校正信号。
- 必须出现错误!
积分部分累积误差。随着时间的推移,一个小的错误可以变成一个大的纠正。
当误差累积时,电机被迫纠正误差。
积分器将超调设定值。它必须产生一个误差来抵消输入信号以使电容器放电。
衍生经营
当电机开始转动时,电阻器测量的电压将增加或减小。如果我们在一段时间内有电压,我们有一个斜坡!该斜坡的斜率随电动机的速度而变化。如果电机快速移动,斜率高。因此,衍生阶段的输出也是高的。
- 发动机一定在动!
当电动机快速移动时,微分器将具有高输出电压,并且当电动机缓慢移动时,电动机快速和低电压。
这个信号以使马达减速的方式被施加。
如果电机没有移动,则差分器具有0个输出电压。
差分器的连接与比例和积分部分不同。差分器直接从电阻接收其输入。因此,它仅测量电机移动的速度。它不关心设定点。
PID参数对系统响应的影响
使用SLG88104实现电路
我使用可变电阻来调整PID电路的设定值。设定值是计数器的初始值127,即我需要大约3.27伏特。可变电阻的输入是我们SLG46621的VDD,我们用可变电阻把输出的电压调整到3.27。
在测试上面的PID电路后,我需要使用另一个OP-AMP进行电压放大器以放大输出信号。这导致电压的变化更加明显。
为了克服添加另一个运放来纠正运放符号的问题,我使用了一个非反相放大器配置。输出电压为:
我选择R1为1 kΩ, R2为10 kΩ,所以电压从原始信号放大了11倍。输出信号将从大约0到4.7 V变化。
注意:如果你没有使用SLG88104,不要忘记你的+V和-V运算放大器进行适当的操作,就像在DAC操作中解释的那样。
我做了一个PCB使用EagleCAD软件模拟PID接受SLG88104或LM358之间的输出放大器比较。PCB上有对输入信号、放大前输出信号和设定值的测试引脚。后来,我通过跳线为放大后的输出信号添加了测试引脚。
注意,如果你想使用LM358,只需将IC使用其在PCB上的支架。如果您想使用SLG88104,请将opamp从SLG88104评估板连接到最左边的引脚头扩展。PCB上有大量标签,便于连接和调试。
如果使用LM358,则无需放大电压,则在小面包板中单独进行电压放大电路,但如果您使用的是SLG88104,则需要如此。
SLG88104 vs LM358
尽管您需要添加一个额外的运放来放大电压时,使用SLG88104运放有几个关键的好处;它比LM358噪声小,对输入信号变化的响应速度快,而且明显比LM358小,因此这种模拟PID电路可以使用表面贴装元件进行重新设计,使其更加紧凑,但仍具有相同的性能。
将控制PWM的模拟信号输入到GreenPAK的PWM模块中
PID电路输出的模拟信号是校正信号,该校正信号将使电机速度达到127计数处的零位(计数器的初始值)。由于这个信号是模拟信号,它不能直接馈给电机驱动器,我们必须首先馈给格林帕克到PWM块。然后我们使用输出PWM信号来保持电机速度。
我使用该应用笔记AN-1057伺服电机控制作为参考调整PWM块参数。
注意,在零位置是我们初始值127的电机永远不会停止;振荡可能会向上或向下触发计数。即使只有小电压,电机也会在零位置保持振荡。我制造了一个多路复用器来控制引脚5的状态,其将PWM信号馈送到电动机驱动器。当零位置点发生状态时,Q0至Q6高,Q7低。然而,在任何其他情况下,作为馈送到电动机驱动器的PWM信号,销20输出将连接到PWM块的输出。这确保了电机必须以一些可接受的误差在零位置停止。这是因为我使用了相同的块,用于控制DC伺服电机,该电机在0度下需要1.5ms脉冲,并且该多路复用器技巧确保当计数为127 i时没有输出。零位置。
选择正确的方向引脚连接到电机驱动器
现在,让我们修改我们的场景:电动机启动最初在零位置,如果我们把它顺时针必须逆时针移动,以抵消运动与相应的输出速度的PWM块达到零的位置,反之亦然如果逆时针移动,这就是我们实际上从DFF3输出。因此,顺时针运动将输出一个LOW信号,该信号馈送给电机驱动器,使电机逆时针运动,以PWM块适当的输出速度抵消运动,反之亦然。
电动机驱动器PWM销连接到销5,并且电动机驱动器方向销连接到销6。
最终系统了解与资源利用率
系统框图
系统如何运作
总结:
- 电机编码器输出有两个输出:脉冲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设置为最后的稳定值;
- 增加我的收益,直到它为您带来所需振荡的数量(通常为零,而且如果您不介意过冲耦合振荡,则可以获得更快的响应)。
使用什么扰动取决于附加在控制器上的机制。正常情况下,用手将机械装置移离设定值并放手就足够了。如果振荡越来越大,就需要降低P增益。
如果你把D增益设置得太高,系统就会开始颤振(比P增益振荡的频率更高)。如果发生这种情况,减少D增益直到停止。
方法 |
优势 |
缺点 |
---|---|---|
手工调优 |
不需要数学;网上。 |
需要经验丰富的人员。 |
Ziegler-Nichols |
证明方法;网上。 |
过程不安,一些试验和错误,非常激进的调整。 |
Tyreus luyben. |
证明方法;网上。 |
过程不安,一些试验和错误,非常激进的调整。 |
软件工具 |
一致的调整;在线或离线 - 可以采用计算机自动控制系统设计(CAUTOD)技术;可包括阀门和传感器分析;下载前允许模拟;可以支持非稳态(NSS)调整。 |
涉及的一些成本或培训。 |
Cohen-Coon |
良好的流程模型。 |
一些数学;离线;只对一阶过程有效。 |
Astrom-Hagglund |
可用于自动调谐;振幅最小,因此该方法具有最小的过程扰动。 |
这个过程本身具有固有的振荡性。 |
修改速度控制系统:
每秒的脉冲数与电动机的速度成正比。脉冲A被解码以产生计数脉冲或计数脉冲。为了在软件中解码,通过软件计数器读取输出,每秒计数与每秒转数成比例。
系统框图
Arduino实现
a的一种替代方法格林帕克执行PID控制是使用Arduino,这是业余爱好者使用的流行微控制器。与A相比格林帕克, Arduino解决方案需要一些编程知识和在项目中明显更大的空间,因为Arduino比一个格林帕克.此外,一个格林帕克价格远低于最便宜的Arduino。
此外,如前所述,以先前提到的,可轻微聚焦的PID控制器具有限制。在硬件中实现PID使用户控制设计中的每个参数,但可以更难以调整。
样本Arduino Code.
# include < Encoder.h >
# include < PID_v1.h >
双设定点,输入,输出;
PID mypid(&input,&输出,设定值,1.002,0.0001,0.01,Direct);
编码器myEnc (8);
多头oldPosition = -999;
无效的设置(){
Serial.begin (9600);
PinMode(10,输出);
PinMode(9,输出);
输入= myenc.read();
setpoint = 0;
mypid.setMode(自动);
mypid.setOutputLimits(-254,254);
myPID.SetSampleTime (60);
}
无效循环(){
long newPosition = myence .read(); / /创建新位置
if(newPosition!= oldPosition){
oldPosition = newPosition;
输入= myenc.read();
myPID.Compute ();
以(输出);
以newPosition);
如果(输出> 0){
digitalWrite(10、高);
analogWrite(9、abs(输出));
}
其他{
digitalWrite(10、低);
analogWrite(9、abs(输出));
}
}
结果
系统的各个部分是离散实现的,然后将各个部分集成在一起,并对整个系统进行了调试。PCB设计使调试系统容易,因为测试引脚。
在构建教育套件时应用了以下测试:
- 单元测试:我将应用程序划分为小块并单独测试每小时进行正确的操作
- 格林帕克向上/向下计数器缩放:主要的思想是通过缩放和移动指针手表柜台通过比例增加,我做了一个外部电路与8个LED测试8位计数器和另一个单独的领导方向检测即在公约,而移动连续波指示汽车司机正确的信号;
- DAC电路:我验证了DAC按照本应用说明第4节所述操作;
- 模拟PID电路无放大:在设计PCB之前,我使用面包板进行模拟PID电路,并通过来自Arduino给出的模拟信号进行测试。稍后,我通过8位DAC的输入信号测试了它;
- 具有放大的模拟PID电路:I探测OP-AMP扩增后的PID输出;
- 电机驱动器:我用来自Arduino的输入PWM和方向信号测试了电机驱动器和格林帕克实现。
- 集成测试:我将系统的各个小块连接起来,并将它们作为设计块进行测试。
- 系统测试:我将整个系统作为黑匣子测试。我打开了套件然后检查了指针移动的电机响应。
- 验收测试:达到稳定系统的完美参数,并注意改变电位器的值如何影响响应。我使用下面的曲线作为完美响应的指导。
结论
这个应用说明演示了如何对直流电机进行位置和速度控制。这可以作为一个教育工具包,以显示比例、积分和微分控制方案的影响,以及饱和、抗缠绕和控制器更新率对稳定性、超调和稳态误差的影响。
只使用了SLG46621V的几个内部块,其余的块可用来构建它周围的其他电路。这是一个混合信号集成电路的理想例子,因为模拟和数字块都使用在这个应用程序中。
后续可添加LCD显示PID参数值。
格林帕克与微控制器相比,实现不需要任何额外的硬件或软件开发。此外,对硬件驱动的PID控制的关注确保了模拟PID控制器所需的快速响应。
附录a硬件规格
- 电压:6:12 VDC;
- 输出功率:2.2 W;
- 齿轮传动比:1:75;
- 额定速度:133 rpm;
- 额定扭矩:25.4 n.cm;
- 摊位电流:3;
- 编码器类型:霍尔效应正交编码器5V(监控位置和旋转方向);
- 尺寸:25 x 54毫米;
- 重量:120克;
- 轴直径:4毫米。
- 1台直流电机双向控制;
- 支持电机电压范围3V ~ 25V;
- 最大电流连续可达10A,峰值可达15A(10秒);
- 3.3V、5V逻辑电平输入;
- 固态元件提供更快的响应时间,消除机械继电器的磨损;
- 完全NMOS H-Bridge以获得更好的效率。不需要散热器;
- 调速PWM频率可达10KHz;
- 支持锁定反相和符号幅度PWM操作;
- 尺寸:75mm x 43mm。
- 8位逐次逼近寄存器模数转换器(SAR ADC)
- ADC 3位可编程增益放大器;
- 两个数模转换器(DAC);
- 六种模拟比较器(ACMP);
- 两个参考电压(V裁判);
- 二十五个组合查找表(LUT);
- 三个数字比较器/脉冲宽度调制器(DCMPS / PWMS)W /可选死区;
- 十个柜台/延迟(CNT / DLY);
- 12 D拖鞋/门闩;
- 两个管道延迟- 16级/2输出;
- 两个带隙;
- 带边缘检测的两种可编程延迟
- 三个内部振荡器:低频,环和RC 25 kHz和2 MHz;
- 上电复位(运动);
- 奴隶SPI;
- 包装:STQFN-20(2.0 x 3.0 mm)。
- 电源电压:1.71 V至5.5 V;
- 低静态电流:每个放大器375 NA(典型值);
- 轨到轨输入/输出;
- 低偏移电压:±200μV(典型值);
- 低偏移漂移:1µV/˚C(典型);
- 直流精度;
- Zero-Crossover;
- 增益带宽产品:10 kHz(典型值);
- 工业温度范围:-40˚C至85˚C;
- 小包装:20针2 x 3.5 mm STQFN。
220 V至12 V-2电源
外壳采用SolidWorks设计,有不同的电源开关开口,电源指示LED,用于仿真的数据线,LCD,调节PID参数的锅,以及测试鳄鱼来测试输出。
外壳由3毫米木材制成,由我自己的激光切割机切割。
年代# |
项目名 |
美元的价格 |
---|---|---|
1 |
SLG46621V. |
1美元 |
2 |
SLG88104V |
1美元 |
3. |
直流电机 |
8美元 |
4. |
Cytron直流电动机驱动器 |
10美元 |
5. |
PCB制造 |
8美元 |
6. |
电力供应 |
5美元 |
7. |
外壳制造 |
7美元 |
总价格 |
40美元 |