

数控开关电源-BUCK降压-恒压恒流输出@STC32G12K128
先贴电路:
主控:

电源与输出:

电流采样信号放大:

本程序使用STC32G12K128-LQFP32
做的数控电源,HSPWM
直接驱动MOSFET
输出接功率电感和电容滤波,通过PID
控制稳压或恒流, BUCK
拓扑,同步整流输出。下载程序时选择IRC
频率24MHz
,PWM
使用PLL-144MHz
,主频使用PLL-144MHz/5=28.8MHz
。I2C
接口OLED12864
显示相关参数。电路设计的OLED
是SPI
接口的,可以使用硬件SPI DMA
访问。但本例使用IO
模拟I2C
访问OLED
屏,以后空了再改一个SPI
版本,使用DMA
写屏和ADC DMA
读取ADC
值,用户也可以自己改一个。
输入电压:12~24V
,有输入电压低压停止输出功能,用户设置低压电压,避免使用电池供电时对电池过放。输出电压:0~
输入电压*0.85
,分辨率0.01V
。大电流负载的投切瞬间输出电压可能会有微小波动。输出电流:0~6.000A
,分辨率1mA
。限流设定:0.100A~6.000A
,步进0.100A
。PID
计算处理的限流分辨率为4mA
。效率:输入24V
,输出12V
、2A
,效率不低于90%
,如果除去本机静态功耗,则效率95%
以上。PID
处理频率(周期):4000Hz
(250us
)。
通过按键调整输入电压低压保护电压、输出电压、输出电流限流值、清零容量mAH
。本程序设置的参数不保存,用户自己可以添加EEPROM
保存程序。当输入电压低于输入电压低压保护电压时,停止输出,指示灯1Hz
闪烁(0.5
秒亮0.5
秒灭)
,直至输入电压恢复至高于设定电压0.5V
后恢复输出。当输出电流小于设定恒流值的10%
时,指示灯0.5
秒快闪一次提示。当输出电流大于设定恒流值的10%
时,指示灯常亮提示。注意:本电源不建议用于给电池充电,如果使用,则要小心,先设置好输出电压、输出电流,再接电池。任何时候电池电压比设置的输出电压高、或者停止输出电压,电源驱动的下NMOS
会连续导通,直接短路电池!用于对电池充电的,请使用“数控电源-SEPIC
升降压-
恒压恒流-
充电器”。
按键设设置:SEL
第一次短按释放选择调整输出电压,反显设定输出电压值。 第二次短按释放选择调整输出电流限流值,反显设定输出电流限流值。 第三次短按释放选择输入电压低压保护电压值,反显输入电压低压保护电压值。 再短按释放循环前述功能。 5
秒未操作则自动退出设定模式,恢复正常显示。 长按1
秒会清除充电量mAH
,并将输入、输出电流归0
(用户可以禁止归0
)。
处于调整模式、反显设定项时:UP
短按一次,设定电压+0.01V
或设定电流+0.100A
。长按超过1
秒则每秒16
个repeat key
。DOWN
短按一次,设定电压-0.01V
或设定电流-0.100A
。长按超过1
秒则每秒16
个repeat key
。 5
秒未操作则自动退出设定模式,恢复正常显示。
非调整模式、正常显示时:UP
、DOWN
短按任意一个键,都会切换输出电压、停止输出电压。
手工校准方法:程序中默认校准系数,编译、下载程序,从GND
供电12V
(而不是从输入DC
插座,设计时没考虑到这点),并且允许输出;校准输入、输出电压:比如输入电压是12V
,输入电压实际读数为12.20V
,则校准系数=
默认系数0.73242 *12/12.2=0.7204
。输出电压读数为12V
,实测为12.3V
,则校准系数=
默认系数0.73242 *12.3/12=0.75073
。记下此时输入电流、输出电流的读数,即为0
点,比如读数为0.056A
,则#define Iin_ZERO 56.
长按SEL
键至电流清0
,从OUT-
和IN-
(DC
输入插座负极)输入校准电流,OUT-
接I+
,IN-
接I-
。比如输入2A
,若输入电流读数为1.9A
,则输入电流校准系数=
默认系数1.0*2/1.9=1.05263
。若输出电流读数为1.1A
,则输出电流校准系数=
默认系数1.0*2/1.1=1.8182
。重新编译下载即可。
串口调试命令:串口设置:115200, 8
位数据位,1
位停止位,无校验。单个ASCII
字符'0'
:串口不打印信息。单个ASCII
字符'1'
:串口打印绘图曲线,1ms
返回5
条曲线数据。由于1ms
只能返回不超过11
个字节,所以参数都转成一个字节,减少发送时间: 通道1
,黄色:设定输出电压值 0~255
表示 0.0~25.5V
通道2
,绿色:当前输出电压值 0~255
表示 0.0~25.5V
通道3
,红色:设定输出电流值 0~255
表示 0.0~2.55A
通道4
,紫色:当前输出电流值 0~255
表示 0.0~2.55A
通道5
,橙色:当前输出PWM
值 0~255
表示 0~2550
,实际最大为180
即PWM=1800
多字符命令:每个数据都以逗号结束,
不能有空格,不能有除了数字和盗号之外别的字符。1260,1000,20,15,0,1260:
设置输出电压(
单位0.01V), 1260
表示12.60V
。1000:
设置输出电流限流(
单位1mA)
,1000
表示1.000A
。PID
恒流计算分辨率为4mA
。20:
比例系数(
单位0.01)
,20
表示Kp=0.20
。15:
积分系数(
单位0.01)
,15
表示Ki=0.15
。0:
微分系数(
单位0.01)
, 0
表示Kd=0.00
。发送设置命令时,最好先禁止输出,避免系数突然大改变而可能导致失控。
=======================================================================
使用STC32G12K128-LQFP32
的初衷,是因为其是一颗32
位内核MCU
,ADC
带参考电压输入端,PID
需要较多计算,8
位内核处理速度慢不推荐。下面是焊好的样板照片:
大电流的回路,开了镀锡层,减小电阻。稳压芯片、MOSFET
贴上散热片,插上OLED
屏,完整版如下:
显示屏的内容我是随便安排的,用户可以根据自己的喜好安排。设置电压:设置输出电压值,步进0.1V
,输出最高电压为输入电压的0.85
倍。设计者电流:设置输出电流限流值,当负载电流到达这个电流后,进入恒流模式。 以下条件任意一个满足,则会退出恒流模式。 1
、输出电压比设置电压高0.05V
。 2
、输出电流比设置的恒流值低36mA
。设置低压:设置输入电压低压保护。当输入电压低于这个设置电压,就会关闭输入,对于电池供电时, 能避免电池过放。低压保护时,LED
秒闪提示(亮0.5
秒、0.5
灭)。输出效率:输出效率 =
输出功率/
输入功率 * 100.0%
输入功率:输入电源的功率。输出PWM
:输出的PWM
值。输出状态:STOP--
停止输出,此时,下面的NMOS
导通,具有超过20A
的下拉能力。 Output
:输出电压,此时提供稳压、恒流的功率输出。输出电压:正在输出的电压值。输出电流:正在输出的电流值。输入电压:正在输入的电压值。输入电流:正在输入的电流值。输出功率:输出电源的功率。输出电量:输出的mAH
数。
设置输出12.00V
,设置限流1.000A
,接5
欧姆负载,恒流输出1.001A
,电压5.11V
(线路有内阻)。由于电路静态损耗有0.91
瓦(见上图),所以1A
电流输出时,效率不高,只有78.7%

设置输出12.00V
,设置限流2.000A
,接5
欧姆负载,恒流输出2.000A
,电压10.16V
(线路有内阻)。1A
电流输出时,电路静态损耗占比变小,所以效率升高至91.9%

不接负载,长按SEL
键超过1
秒,输入、输出电流归0
。
再接上负载,2A电流输出,此时效率为96.8%,0.5A以上电流的效率基本就在95%以上。

短按SEL
键,选择调整设置项,此时可以使用UP
和DOWN
键调整参数。
具体电路可以参考附件中PDF
版本,除了PWM
驱动输出电路和电流采样放大电路,别的都是常规电路。本电路使用同步整流输出的BUCK
电路(可以认为是一个大电流的推挽输出电路),电路本身可以连续输出超过10A
的电流(可能要加散热风扇),本电路电流检测最大7.8A
,最大限流6A,PWM1P
、PWM1N
分别驱动上管和下管,由于MOSFET
和电感的内阻小,电容的ESR
也小,会得到高效率的转换,这部分电路输出12V
时的效率能超过95%
。
下图为输出电流检测、放大电路,20mR
采样,放大16
倍,满量程7.8A
,程序设置恒流值为6A
。
==================================================================PID
调试:使用串口绘图来配合PID
调试,没有这些曲线显示是很难调试PID
的。打开AiCube-ISP-v6.95Z.exe
,再打开“串口绘图”:
设置曲线参数:点击右上角的“设置”,进入下面的设置界面,勾选5
条曲线,单字节数据格式。
串口命令设置:点“功能”里的“命令设设置”,
命令1
填入1
,这是请求返回绘图数据的命令,命令4
填入0
,这是停止返回数据的命令。点确定。
点击上面的“命令1
”或“Ctrl+1
”,MCU
开始返回数据,这些数据可以保存起来的。点击“命令4
”或“Ctrl+4
”,MCU
停止返回数据。
可以在“数据”里“加载数据”,就可以打开保存的数据:

下面是输出12.00V
,恒流2.000A
,负载5
欧姆,投切负载时的响应曲线,黄色为设定输出电压值(0.1V
),绿色为当前输出电压值(0.1V
),红色为设定输出电流值(0.01A
),紫色为当前输出电流值(0.01A
),橙色为当前输出PWM
值(x10
)。
放大至采样点,一个点为1ms
,可见接通负载后,紫色电流曲线先出现较大值(因为输出电容12V
加载到5
欧负载上),10ms
后电流降到红色恒流值2.00A
,绿色输出电压曲线跟着下降,稳定在10V
左右。断开负载后,紫色电流急剧降为0
,几个ms
后绿色电压上升至设定值并稳定,负载的投切,输出电压没有大的过冲,这算是比较理想的,但是由于PID
处理速度是4000Hz
,所以需要几个ms
的响应速度。
串口设置PID
参数:下图 “多字符串发送”栏填上要发送的参数,每个数据都以逗号结束,
不能有空格,不能有除了数字和盗号之外别的字符。点击字符串的序号,即可发送出去。也可以鼠标指向序号右键定义此字符串的名字。比如:1260,1000,20,15,0,1260:
设置输出电压(
单位0.01V), 1260
表示12.60V
。1000:
设置输出电流限流(
单位1mA)
,1000
表示1.000A
。PID
恒流计算分辨率为4mA
。20:
比例系数(
单位0.01)
,20
表示Kp=0.20
。15:
积分系数(
单位0.01)
,15
表示Ki=0.15
。0:
微分系数(
单位0.01)
, 0
表示Kd=0.00
。发送设置命令时,最好先禁止输出,避免系数突然大改变而可能导致失控。
程序源码、电路、PCB
数控电源-BUCK降压-恒压恒流-同步整流-2025-7-29.rar