电源下位机设计
其实在C#开发上位机那篇博客发完之后就想写这篇博客,但由于“用户”时不时地想添加一个新功能,周末回家又赶上大忙,所以也一直没时间静下来写。那么最近下位机的一些数据地址信息问电源厂家要到了,快完工了,因此抽出时间总结一下前段时间的下位机开发心得。
首先在电源下位机的开发过程中最主要的两个部分就是输出电流的控制和谐波的治理。
关于谐波治理的研究我尚未开始,就简单说一下,就是在整流器前放置一个控制板,控制板的作用呢,简单来说就是把反馈给电网的波进行傅里叶变换,这样就得到了很多分波,完事儿由电源根据分波来给相反的波进行抵消,最终剩下一条符合电网需求的波留下,这个过程我们需要关注的有两点,首先是经过处理的波能够满足电网的接入条件,其次就是分波的量,如果量过多,那么成本也会相应地非常高,因此谐波处理方面算法的优劣性确实会直接影响成本的。
我目前主要研究的是输出电流的控制,这也是电源开发的核心部分了。既然是控制,那必然也离不开自动化,其实现在想想,通信,控制,计算机,他丫这三专业研究的东西不都差不多吗,还硬是分成了三个专业,多少有点坑爹。那么该如何实现控制呢?在自动化控制的世界中有一个叫做PID的东西,这玩意儿于自动化的地位就好比欧拉公式于数学,或者量子力学于微观世界,几乎是不可或缺的存在。那么下面先来简单讲讲PID是个啥。
PID其实就是用来调节负反馈系统的,在电源设计领域中,根据需求值和反馈值的误差,不断去调整PWM占空比,使实际值不断接近给定值。其中P是比例项,I是积分项,D是微分项。
公式是这个样子的,这样看感觉挺复杂的,但实际计算机不可能去处理一个连续信号,必然会有一个采样频率的存在。那么我们将它离散化处理一下
这个公式中的e(k)就是第k次输出值与预期值的误差,T就是采样周期,Kp是比例项系数,Ti是积分时间,Td是微分时间,其中每一次的采集由电压传感器完成,将采集到的模拟量经由模数转换器就可以得到具体每次的数字量了。当然在工业控制领域中,增量式PID控制是最常用的,其表达式如下:
,增量式是对输出的每个时刻的增量进行控制的,而位置式是对每个时刻的输出值进行控制,因此增量式PID控制就是当前时刻与上一时刻的差值,采用增量式主要是优化了运算量,对系统的控制也会更加稳定。下面简单讲一下PID中各项的作用,很明显,比例项就是对当前时刻的误差信号进行比例放大,积分项是过去误差的累加,作用是消除稳态误差,属于一种滞后调节。微分项是临次误差的差值,反映的是误差变化的趋势,作用是超前调节,在某些场合或许不需要用到积分项或是微分项,又或者只用比例项,具体也得看情况,不过绝大部分场合还是PI调节和PID调节偏多,PID性能最强,PI取消积分项可以减少噪声,因此这两项是最常见的。仔细观察PID的公式,其实最难确定的就是PID中各项的参数。
那么下面就来大致梳理一下PID参数整定过程,不过这里整定的前提是一个线性定常系统,因为本篇所整定的参数是定值,工业中也基本上是线性定常系统,当然如果当成非线性时变系统来做的话肯定更好,那样的参数是自整定的,比如说模糊算法与神经网络或者粒子群优化算法或卡尔曼滤波器等一大堆让我看不懂,但大受震撼的算法或者学习模型,这些都是暂时不需要搞但想实现的东西,毕竟自适应调节参数那整个系统的响应速度肯定又得上升多少个微秒级的时间……但其实对我来说线性定常系统搞好已经不容易了T.T,回到参数整定上面来,第一步就是数学建模,首先啊,把你要研究的电路图画出来,比如这是一个高频逆变电路,还是降压斩波电路,又或者是其他各种各样的电路,确定好电路后根据电路的一些特性以及基尔霍夫定律等物理上的公式把输入和输出与时间的关系表示出来,那么表示出来的式子其实就是输入和输出关系的微分方程了,因为只有时间一个自变量,所以也不会出现什么偏微分方程这种离谱的东西,其实在我们写完微分方程后可以自己检查一下这是不是一个线性定常系统,要满足线性,其实只要满足叠加性和其次性就行了,有个简单的办法,直接去看列出来的方程的输入函数和输出函数不能与其导函数或本身以及导函数本身不能出现除加减以外的运算,若含有积分项,被积函数要为输入变量,不能对函数或导函数进行复合运算,否则全是非线性的,至于时变还是时不变就得按着卷积定理来了,当然我一般就直接看系数是不是都为常数来判断貌似也没什么问题,到此为止我们的微分方程就出来了。第二步就是构建传递函数,传递函数就是输入与输出随时间变化的微分方程的拉普拉斯变换后的比值,为啥要进行拉普拉斯变换呢,两个字儿,简化,站在时间轴上看这个世界都是表象的东西,在频率轴看世界才能更好的认识世界,这也是工程师们眼中的频域世界,顺带提一嘴傅里叶变换就是拉普拉斯变换的在实数域的扩充,拉普拉斯变换是可以有复数的,不需要满足绝对可积条件,因此也叫复频域,另外后面如果求差分方程时需要把离散的信号转换到频域,因为是离散的,所以不能叫拉普拉斯变换了,就是Z变换了,这些变换过程在Matlab里都是可以直接写代码计算的,如果不想手算的话,学一下Matlab的编程还是蛮重要的,那么到此为止我们就得到了系统的传递函数。第三步就是Matlab的simulink仿真了,看吧,到处都离不开Matlab,Matlab永远的神。在simulink中把你的电路模型搭进去,把传递函数填进去,然后调整PID的参数去进行仿真调试,在输出端加个示波器模块测测波形就行了,我们的目标是,快速,稳定,准确,当然在Matlab中得到的都是理想化的模型,实际上还得用示波器观察输出电流和预期值的关系以进一步调节参数。到此为止我们就确定好参数了,那么这么一大串步骤也就是为了这三个数字,整个控制板程序上千行的代码中就这三个变量数值最难整,但整出来了代码才能继续往下写,有那么一丝绝望。
控制板选择的是DSP,数字信号处理器,为啥不选择PLC或者FPGA呢,一是手头只有一块DSP的板子,二是DSP芯片采用的哈佛结构,当算法比较复杂时也确实拥有着更快的处理速度,不过要注意干扰的问题,不过这基本是硬件工程师的职责了,软件最多用个冗余函数加个保险就没有了。在编程过程中,DSP跟普通的单片机区别也有,但不大,难点依然是得把板子上各个模块搞懂了,把每个模块(什么定时器,GPIO口,EV事件管理器,SCI,SPI等等,感觉除了CAN通信全用到了,麻了)常用的寄存器记住了,记不住也得会查,这个过程有过单片机开发经验的话其实上手并不算困难,顺带说一下开发环境选择的是T1公司的CCS,语言的话C/C++/汇编都是可以使用的。代码就不贴了,毕竟只完成了开环控制,闭环实验连电路都没搭出来呢。
啊,写得好累,就到这儿吧,可能有遗漏或错误,欢迎指正~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
