PID控制器VHDL的制作

电子说

1.3w人已加入

描述

步骤1:基本控制理论

PID控制

我认为,添加一些基本的控制理论将为想要尝试实施此代码的任何人提供一个良好的基础。

所附的图是一个单回路控制器。

r-是参考。这确定了控制器需要去的地方。

e-是错误。这是传感器上的值与参考值之间的差。例如e = r-(传感器的d +输出)。

K-这是控制器。控制器可以由三个项组成。这些项是P,I和D。所有三个项的乘数分别为Kp,Ki和Kd。这些值确定控制器的响应。

P比例。严格的P控制器将具有与电流误差成比例的输出。 P控制器易于实现且工作迅速,但永远不会达到您设置(参考)的值。

I-积分。严格积分的控制器将总结先前的误差,最终将达到所需的参考值。该控制器通常太慢而无法实现。添加P项将减少到达参考点所需的时间。必须考虑对输入采样的时间,积分项是相对于时间进行积分的。

D导数。导数项的输出取决于误差的变化率。该术语通常与P术语或PI术语一起使用。由于这与误差变化率成正比,因此嘈杂的单音会放大其噪声,这可能导致系统不稳定。还必须考虑时间,因为导数项也是关于时间的。

U-这是控制信号。该信号是钻机的输入。在此项目中,u是输入到风扇以改变速度的PWM信号。

G-这是被控制的系统。该系统可以在S或Z域中进行数学建模。该系统可以是n阶,但是对于刚开始使用控制的人来说,应该假设是一阶系统,因为这很容易计算。这是有关在线建模系统的大量信息。根据传感器的采样时间,系统的模型可以是离散的也可以是连续的。这会对控制器产生巨大影响,因此建议对两者进行研究。

d-这是添加到系统中的干扰。干扰是外部力量,系统模型无法解决。一个简单的例子是一架无人驾驶飞机,您希望将其悬停在5米高的阵风处,并将该无人驾驶飞机降落1米,在发生干扰后,控制器将重新定位该无人驾驶飞机。这被称为扰动,因为风是不可重复的,因此无法建模。

要调整控制器,需要命名的规则太多,但我刚开始使用的一些好规则是Cohen Coon和齐格·尼科尔斯(Zieger Nichols)。

在没有精确模型的情况下,对系统建模通常是最重要的部分,因此已设计的控制器将无法根据需要做出响应。

这里应该有足够的信息来了解控制器的工作方式以及一些单独的研究,并且控制器下面的代码可以结合使用这三个术语来实现。

步骤2:编写PID代码

PID控制

该代码的基本原理位于由于此代码不起作用,但采用了以下链接,并对其进行了修改,但具有许多正确的原则,这些都是很好的起点。原始PID代码有几个错误,例如

连续操作-控制器是继承的离散控制器,因此必须将控制器设置为仅在有新输入可用时才计算所有3个项。此模拟的解决方法是检查自上次以来输入是否已更改。这仅能模拟代码正常工作。

采样时间对积分和微分项没有影响-控制器也没有考虑采样的时间,因此添加了一个称为时间除法器的值以确保积分和导数项在正确的时间间隔内运行。

错误只能是正的-计算错误时还存在一个问题,因为错误永远都不能为负,这意味着当反馈信号超过参考值时,控制器将继续增加输出值应该递减。

3个项的增益值是整数-根据我的经验,我经常发现控制器中3个项的值始终是浮点数,这是因为Basys 3没有必须的浮点数被赋予一个分子值和一个分母值,将作为解决这个问题的工具。

该代码附在下面,它是代码主体和用于模拟代码的测试平台。 zip文件夹包含Vivado中已经存在的代码和测试台,因此可以打开以节省时间。还有一个代码的模拟测试,显示了跟踪参考的输出,这证明该代码可以正常运行。

步骤3:如何为您的系统进行修改

首先,并非所有系统都相同,因此必须分析系统的输入和输出。就我而言,装备的输出为我提供了一个位置值,它是一个模拟信号,系统的输入是一个PWM信号。这意味着需要ADC转换。幸运的是,Basys 3具有内置ADC,因此这没问题,因为这是板载ADC的最大范围,因此红外传感器的输出必须缩小至0V-1V。这是通过使用分压器电路完成的,该分压器电路由1k电阻器构成,该电阻器设置为与1k电阻器串联的3k电阻器。现在,模拟信号在ADC的范围内。风扇的PWM输入能够由Basys 3上的PMOD端口输出直接驱动。

步骤4:利用Basys 3上的I/O

Basys 3上有许多I/O,可以在运行代码时进行更轻松的调试。 I/O设置如下。

七段显示-用于显示基准值和ADC上以伏特为单位的值。七段显示的前两位数字显示ADC值的小数点后两位,因为该值介于0-1V之间。七段显示器上的数字三和四以伏特表示参考值,这也显示小数点后的前两位,因为范围也在0-1V之间。

16个LED-使用LED来显示输出的值,以确保输出饱和并正确更改输出。

步骤5:IR传感器输出上的噪声

传感器输出上有噪声可以解决此问题,因此放置了一个平均块,因为这足够了,需要完成的工作很少。

第6步:总体代码布局

PID控制

有一部分代码尚未讨论。此代码是称为触发器的时钟分频器。该代码位触发ADC代码进行采样。 ADC代码最多需要2us的时间才能完成,因此将当前输入和先前输入进行平均。求平均值后的1us,控制器将计算P,I和D项。临时连接图中显示了代码和接口的总体布局。

步骤7:测试

PID控制

该代码已部署在Basys 3上,并记录了以下响应。参考值在2个值之间变化。在随附的完整项目代码中就是这种情况。随附的视频实时显示了此响应。由于控制器是为此区域设计的,因此振荡在管的上部衰减得更快,但由于系统是非线性的,因此控制器在管的下方无法正常工作。

第8步:修改以改进项目

该项目按预期工作,但如果可以扩展该项目,我将进行一些修改

实施数字滤波器以完全衰减噪声

设置ADC代码,平均代码和积分代码以依次触发。

使用其他传感器进行反馈,因为该传感器的非线性响应在该项目中引起了各种各样的问题,但更多的是控制方面而不是编码方面。

步骤9:额外的工作

在整个暑假期间,我为级联控制器编写了代码,并实现了我为单回路PID控制器推荐的修改方案。

对常规PID控制器所做的修改

·FIR过滤器模板实施的系数必须进行更改以实现所需的截止频率。当前的实现是一个5抽头的fir滤波器。

·已经设置了代码计时,以便该滤波器将新的样本传播通过,并在输出准备就绪时触发积分项,该积分项将被触发。

·驱动程序的主for循环也已减少,因为for循环之前花费了7个周期,因此变慢了。降低了控制器的最大运行速度,但是通过减小for循环t 4状态,这意味着代码的主要块可以在4个时钟周期内运行。

测试

此控制器已按预期进行测试和执行,我没有为此证明拍照,因为该项目的这一部分只是为了保持头脑活跃。用于测试的代码以及测试平台将在此处提供,因此您可以在实现之前测试程序。

为什么要使用级联控制器

级联控制器控制系统的两个部分。在这种情况下,级联控制器将具有外部回路,该外部回路是具有来自红外传感器的反馈的控制器。内环具有来自转速计的脉冲之间的时间形式的反馈,该反馈确定风扇的转速。通过实施控制,可以从系统中获得更好的响应。

级联控制器的工作原理是什么?

控制器外环会向内部环控制器馈送一个在波利之间的时间值。然后,该控制器将增加或减少占空比,以达到脉冲之间的期望时间。

在钻机上实施修改。

很遗憾,我无法在我无法访问的情况下在钻机上实施这些修改。我测试了修改后的单环控制器,该控制器可以按预期工作。我尚未测试级联控制器。我相信控制器可以正常工作,但可能需要进行一些细微的修改才能按预期工作。

测试

我无法像以前那样测试控制器难以模拟两个输入源。我在级联控制器上看到的唯一问题是,当外环试图增加提供给内环的设定点时,较大的设定点实际上是风扇的较低RPS,但这可以轻松解决。从设定值信号的最大值(4095-设定值-tacho_result)中取设定值。

第10步:结论

项目开始时我的总体项目功能符合我的预期,因此我对结果感到满意。感谢您抽出宝贵的时间阅读我在VHDL中开发PID控制器的尝试。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分