[STM8] [经验] 经典分享:STM8的 数字电源 设计全过程

[复制链接]
1642|2
 楼主| 潜力变实力 发表于 2020-9-3 19:41 | 显示全部楼层 |阅读模式
一、数字电源的优缺点:

数字电是以MCUDSP为核心控制器的电源,本方案是采用stm8s003F3P6为核心,输入10~14V,输出恒流0.7A限压37Vboost拓扑车载30LED驱动电源,效率达到90%

数字电源的优点成本低,可移植性强,可扩展性强
成本低:本方案采用的是STM8S003F3P6为控制器,STM8S003F3P6是ST公司生产的8位单片机,具有10位5路ADC,3个定时器,集成UART,I2C,SPI协议,最高频率16MHz。价格在1.2元左右,比一般的模拟控制器还要便宜。
可移植性强:编写的功能代码可以以函数库的形式封装,方便自己和别人调用。一次编写,终生调用。
可扩展性强由于MCU有很多IO口,可以方便的接入保护、通信、显示、特殊要求等功能。
扩展保护功能:假如想加入一个风扇控制器,模拟电源需要使用NTC热敏电阻,外加运放滞回比较器。而数字电源仅仅需要外加一个热敏电阻即可,通过ADC采样,用查表法来判断温度,滞回合一通过程序代码来实现,而且具有精度高的特点
扩展通信功能:由于单片机内置有UART,I2C,SPI协议,可以通过引出IO口,来实现数控功能。例如电压电流信号输出、上位机控制等等。
扩展显示功能:可以方便的外置数码管、LED、LCD等显示设备。
扩展特殊要求功能:有些电源需要特殊的要求,例如铅蓄电池的充电,要有恒流、恒压、涓流三个阶段。如果采用运放进行控制,硬件电路会很麻烦。如果采用数字电源,再添加入几行代码即可完成特殊的要求。


数字电源的缺点精度低、抗干扰能力弱
精度低:输出电压、电流的精度主要取决于ADC采样精度和PWM步进的精度。ADC采样精度一般都不是问题,10bit的ADC就可以达到3.3mV的精度。PWM的精度主要受到时钟频率和开关频率的影响。PWM精度=1/(时钟频率/开关频率)。比如本方案采用的失踪好难过频率=16MHz,开关频率=100kHz。那么PWM精度=1/(16M/100k)=1/160。也就是PWM只能在0~160之间的整数调节。这个PWM精度问题可以通过抖频来解决,但是抖频会产生较大的电压纹波。
抗干扰能力弱开关电源产生的电磁干扰较强,可能会影响MCU,导致死机。这个问题可以通过优化PCB布线,加入屏蔽等方式来解决。
、参数计算

输入电压:10~14V
恒流电流:0.7A (留余量,保证适应大多数LED,取1A)
限压电压:38V (留余量,保证适应大多数LED,取40V)
其余已知参数如下图:

140584164053cb70e8d4f62_small.jpg
电感计算:
140584165153cb70f3acec9_small.jpg
电感选取37uH,5.2A;线径使用RMS=4.14A计算。
输出电容计算:

140584166853cb7104e0ecd_small.jpg
忽略ESR,电容量需要38uF。
忽略电容量,ESR需要39mR,根据ESR与C的一般关系,C取1670uF。
电容允许RMS电流要大于1.8A。
实际综合上述情况采用50V,1000uF电解电容。

其他参数计算:

140584167853cb710e9d0dc_small.jpg
三、原理图、PCB、实物图

原理图:

140584182353cb719fafda4_small.jpg
PCB:
140584183953cb71af9b19c.jpg
140584184053cb71b0b6ef0.jpg
140584184153cb71b1bfb92.jpg
实物图:
140584190253cb71ee855f3_small.jpg
四、基本软件代码

基本流程图:

140584209453cb72ae7021b.jpg

ADC采样:
初始化ADC

140584210653cb72ba64a8a_small.jpg



采集电压平均值:

140584213153cb72d37021c_small.jpg

采集电流平均值:

140584214153cb72dd6cb6c_small.jpg

定时器初始化:

140584215153cb72e764e6c_small.jpg





设置占空比:

140584216153cb72f168522_small.jpg





串口初始化:

140584217453cb72fe6d728_small.jpg





串口调试发送:

140584218853cb730c6f27b_small.jpg
51 PID基本思路:


PID算法有模拟型数字型
模拟型主要是有RC网络构成的PID调节器,就是环路补偿在VFB和COMP接入的RC网络。
数字型就是模拟型的离散化形式,积分用加法代替,微分用减法代替而成的。
数字型PID分为有位置型增量型
位置型:

140590281053cc5fda567f2.jpg


增量型:

140590281753cc5fe12f30f_small.jpg


书上说位置型要比增量型运算量大,但是实际上位置型和增量型的复杂程度是一样的。增量型也不比位置型运算简便很多。
本方案中的采用增量型PID算法
由于PID算法存在一些问题,例如积分会饱和,微分作用时间短,输出会溢出等缺点,PID采用的改进型的PID算法,主要有变速积分、积分分离、PWM死区、PWM限幅
变速积分:变速积分指的是在积分项比较小的时候积分快一些,积分项比较大的时候积分慢一些。有助于防止饱和。
积分分离:其实也是变速积分的一种,在积分项大于一定值时候,停止积分的作用
PWM死区:设定一个不灵敏区域,就是输出的精度。死区越大,精度越低,但是系统越稳定。死区越小,精度越高,但系统月容易震荡。
PWM限幅即限制PWM输出的极大值,防止占空比达到过高。
另外,PID的参数采用浮点型,主要是为了减小误差,如果采用整型的话,小数点约去误差较大,尤其是积分环节。
52 变速积分:



传统的积分容易发生饱和,进而产生震荡,尤其是当积分量比较大的时候。变速积分法的基本思想是在偏差较大时积分慢一些,而在偏差较小时积分快一些,以尽快消除静差。
下图书使用matlab显示变速积分的函数。图中直线是y=x,没有使用变速积分。图中曲线是使用变速积分之后输出与输入的关系
140590375053cc638662b43.jpg       
140590376153cc6391442fb.jpg       

53 恒压精度


由于数字电路中,PWM是由定时器产生的,系统有一个时钟频率16MHz,当开关频率为100kHz的时候,PWM就一共有160格,也就是PWM的步进为1/160。
模拟电路中就不存在这个问题,模拟电路中的PWM可以任意的步进。
当pwm数值+1,输出电压就会增加一定的量。占空比越大,增加一格占空比导致输出电压的增加就越大。这个主要用来设定精度,也就是PID死区。
下图是采用matlab计算恒压精度的代码:






140590430453cc65b0e16a2.jpg



Vin=10V,图如下:

140590641753cc6df1a8a89_small.jpg




Vin=13V,图如下:

140590642753cc6dfba869f_small.jpg






可见这个PWM恒压精度比较低,尤其是占空比较大的时候。不过本方案是恒流驱动,对限压要求不高。
已知ADC电压采样精度=3.3/1024*21=0.068V(3.3为基准电压,1024为10位ADC2的10次方,21为分压电阻的比例)。
可见PWM造成的输出电压精度远大于电压采样造成的输出电压精度。设定PID死区时候,不能设置的过小,否则会一直不停的震荡。
增加这个精度有几种方法:
一是改变拓扑,例如BUCK拓扑,PWM在0-100%内,精度都是相同的,而boost和buck-boost在占空比较小时候,精度高,占空比较大时候,精度低。
二是增PWM的分辨率,也就是增加MCU的主频,或者减小开关频率。
三是PWM占空比抖动。PWM在一个非常非常小的范围内增加或减小进行小幅震荡,有利于增加输出电压精度,但是缺点是引起输出纹波略微增大。(

举一个简单的例子,0.01精度的PWM,实现0.001精度的输出:假如要实现0.567的占空比,就可以第(1~7)*n周期输出0.57,第(8~10)*n周期输出0.56。这样总的来说就是0.567的占空比了。可是输出会叠加开关频率*10的低频纹波。 )
54 限流精度:


由于LED的伏安特性不是线性的,所以有PWM引起的恒流精度vs PWM的图像不好画出。这里只计算由于ADC造成的恒流精度:
ADC最小输入电压=3.3/1024=3.3mV;3.3mV在采样电阻上的电流=33mA。也就是说恒流精度最多为33mA。由于PWM分辨率原因,实际的恒流精度达不到这个值,稍微比0.033A大一些。
但是因为PID中具有积分作用,当PWM抖动时候,就可以达到这个精度了。本方案实际上恒流精度是可以达到33mA的。
恒流采用限流方式,把过流转换为过压,送往PID进行处理。当检测到电流超过0.7A时候,把测量的电压值赋值超过设定值,转换为电压超标。进而实现限流。
55 PID整定:
网上的整定方法如下图:

140590478653cc679266403_small.jpg


140590479453cc679a49717.jpg       


参数的影响:
140590480353cc67a349ee8_small.jpg       

PID整定之前的准备:
首先调节恒压37V,限流0.7A。允许误差0.4V,接入LED:
输出电压和PWM数值通过串口发送出来,接收到之后,通过Excel表格画图,画出近似的波形。
PWM=160时候为占空比100%,设定PWM最大值为128,即80%
6 调节Kp
首先采样周期设置为最小。增大Kp,是环路震荡,再逐步减小Kp,直到不震荡为止。
环路震荡测试方法:
方法1:观察示波器的GS波形是否发抖。发抖则为震荡。
方法2:观察定时器PWM设置数值是否发生周期性的大幅变化。如果出现大幅变换,则震荡。如果小幅变化或者不变化,则基本稳定

由于调节Kp时候,存在稳态误差,输出电压可能达不到LED的开启电压,所以调节Kp时候,采用200欧姆电阻进行代替测试。
qiguochun 发表于 2021-4-27 19:35 | 显示全部楼层
想问一下楼主PID写的程序
qiguochun 发表于 2021-4-27 19:36 | 显示全部楼层
最近遇到过这方面的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

1124

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部