PID是控制领域的最常见方法,入门必备。在看了关于PID的相关教程后,想在ardunio上实践一下,鉴于手头的元器件不多,而且掌握的知识也不多,因此我开始想怎么才能做一个最简单的PID实验。在第一节实验中学习了最简单的PWM操作,那这次就做一个跟PWM相关的吧。
实验大体思路:PWM占空比控制输出电压。固定占空比的PWM波通过一阶的RC电路滤波后,输出电压波形会从方波转化为接近直线的恒压波形。其中电压的大小与占空比成相近的线性关系。那么下面给出PID的方框图,来分析一下这个实验中的输入、偏差、输出、被控量都是什么。
PID属于闭环控制,闭环控制区别于开环控制的最显著的区别就是反馈的引入,那我们就从反馈入手,在这个实验里反馈就是电路最终输出的电压值,也就是我们想要控制的那个值。与之相对应我们想要得到的电压的那个值(设定值),就是PID的输入了,输入与反馈的差是偏差值,偏差值经过PID控制器计算后得到一个输出值,我们需要通过这个输出值来控制电路来产生我们需要的电压,这个电路里唯一可以控制的就是PWM的占空比,而且占空比与电压大致呈线性关系,因此PID控制器的输出就是占空比了。
下一步我们需要搭建电路了,在搭建电路之前我们需要一些简单的电路分析,ardunio的针脚的PWM输出的电压0V-5V,那么作为反馈引入计算时,需要用ardunio测量输出电压,ardunio有15个模拟量输入口,默认可以测量0-5V电压,每个口的最大通过电流值是40mA。电压值这里可以不用担心了,因为输出最大才是5V,那么需要考虑电流值,5V/40mA=125Ω,那么当电路中存在125欧姆时,就不会烧ardunio了。下面我们在看RC滤波电路的设计,RC电路上是一个低通滤波器,根据电路知识可知道RC的频率一般取值是PWM频率的1/10,我们假设还采用实验2中2分频PWM波,那么pwm的频率是,16Mhz/256/2=31.25Khz,那么RC电路频率为3125hz,即f=1/(2π*RC)=3125.那么RC=0.00005093,如果我们电阻选择200Ω的话,C=0.0000002546f=0.2546μf,我手头上正好有0.1μf的104瓷片电容,那么我把电阻增加到500Ω,C=0.1018μf。这时我从淘宝上买到了一包500Ω的电阻,
编程之前简单构思一下:setup()中完成计时器的设置,com端口的设置。LOOP()中等待接收com口发来的电压值,如果电压值在正常范围内则交给PID进行运算,这时候将实际电压值通过com口输出到ide中。
经过实际验证。。。完全不可行,经过RC电路后电压依旧身份不稳定,即使不用PID控制,波峰与波谷电压依旧相差很大,而且跳跃的频率是大于PID控制的执行周期,因此并不可行,实验失败。