找回密码
 立即注册
查看: 55|回复: 1

数控电源-恒压/恒流,STC32G-HSPWM做SEPIC升降压式开关电源-充电器-PID控制

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:137
  • 最近打卡:2025-07-31 12:11:20

76

主题

6281

回帖

1万

积分

超级版主

积分
13347
发表于 3 天前 | 显示全部楼层 |阅读模式
数控开关电源-SEPIC升降压-恒压恒流输出@STC32G12K128

先贴电路:
主控:
主控.png

电源与输出:
电源与输出.png

电流采样放大:
电流采样信号放大.png

本程序使用STC32G12K128-LQFP32做的数控电源,HSPWM直接驱动MOSFET输出接功率电感和电容滤波,通过PID控制稳压或恒流, SEPIC拓扑,升降压输出。
下载程序时选择IRC频率24MHzPWM使用PLL-144MHz,主频使用PLL-144MHz/5=28.8MHz
I2C接口OLED12864显示相关参数。
电路设计的OLEDSPI接口的,可以使用硬件SPI DMA访问。
但本例使用IO模拟I2C访问OLED屏,以后空了再改一个SPI版本,使用DMA写屏和ADC DMA读取ADC值,用户也可以自己改一个。

输入电压:12~24V,有输入电压低压停止输出功能,用户设置低压电压,避免使用电池供电时对电池过放。
输出电压:0.00~26.00V,分辨率0.01V。大电流负载的投切瞬间输出电压可能会有微小波动。
输出电流:0.00~3.000A,分辨率1mA
限流设定:0.100A~3.000A,步进0.100APID计算处理的限流分辨率为4mA
效率:输入12V,输出12V2A,效率92%,如果除去本机静态功耗,则效率95%以上。
PID处理频率(周期):4000Hz250us)。

通过按键调整输入电压低压保护电压、输出电压、输出电流限流值、清零容量mAH
本程序设置的参数不保存,用户自己可以添加EEPROM保存程序。
当输入电压低于输入电压低压保护电压时,停止输出,指示灯1Hz闪烁(0.5秒亮0.5秒灭),直至输入电压恢复至高于设定电压0.5V后恢复输出。
当输出电流小于设定恒流值的10%时,指示灯0.5秒快闪一次提示已充满。
当输出电流大于设定恒流值的10%时,指示灯常亮提示正在充电。

按键设设置:
SEL  第一次短按释放选择调整输出电压,反显设定输出电压值。
     第二次短按释放选择调整输出电流限流值,反显设定输出电流限流值。
     第三次短按释放选择输入电压低压保护电压值,反显输入电压低压保护电压值。
     再短按释放循环前述功能。
     5秒未操作则自动退出设定模式,恢复正常显示。
     长按1秒会清除充电量mAH,并将输入、输出电流归0(用户可以禁止归0)。
处于调整模式、反显设定项时:
UP     短按一次,设定电压+0.01V或设定电流+0.100A。长按超过1秒则每秒16repeat key
DOWN 短按一次,设定电压-0.01V或设定电流-0.100A。长按超过1秒则每秒16repeat key
       5秒未操作则自动退出设定模式,恢复正常显示。
非调整模式、正常显示时:
UPDOWN  短按任意一个键,都会切换输出电压、停止输出电压。

手工校准方法:
程序中默认校准系数,编译、下载程序,从GND供电12V(而不是从输入DC插座,设计时没考虑到这点),此时禁止输出,输出端也接12V
校准输入、输出电压:比如输入电压是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,实际最大为180PWM=1800

多字符命令:每个数据都以逗号结束, 不能有空格,不能有除了数字和盗号之外别的字符。
1260,1000,10,3,0,
1260: 设置输出电压(单位0.01V), 1260表示12.60V
1000: 设置输出电流限流(单位1mA)1000表示1.000APID恒流计算分辨率为4mA
10:  比例系数(单位0.01)10表示Kp=0.10
3:    积分系数(单位0.01) 3表示Ki=0.03
0:   微分系数(单位0.01) 0表示Kd=0.00
发送设置命令时,最好先禁止输出,避免系数突然大改变而可能导致失控。


=======================================================================
使用STC32G12K128-LQFP32的初衷,是因为其是一颗32位内核MCUADC带参考电压输入端,PID需要较多计算,8位内核处理速度慢不推荐。
下面是焊好的样板照片:
截图202507281923233588.jpg
大电流的回路,开了镀锡层,减小电阻。

稳压芯片、MOSFET贴上散热片,插上OLED屏,完整版如下:
截图202507281923548579.jpg

OLED屏显示内容:
截图202507281924177246.jpg
显示屏的内容我是随便安排的,用户可以根据自己的喜好安排。
设置电压:设置输出电压值,步进0.1V,输出最高电压为输入电压的0.85倍。设计者电流:设置输出电流限流值,当负载电流到达这个电流后,进入恒流模式。
                以下条件任意一个满足,则会退出恒流模式。
               1、输出电压比设置电压高0.05V
               2、输出电流比设置的恒流值低36mA
设置低压:设置输入电压低压保护。当输入电压低于这个设置电压,就会关闭输入,对于电池供电时,能避免电池过放。低压保护时,LED秒闪提示(亮0.5秒、0.5灭)。
输出效率:输出效率 = 输出功率/ 输入功率 * 100.0%。
输入功率:输入电源的功率。
输出PWM:输出的PWM值。
输出状态:STOP--停止输出,此时,下面的NMOS导通,具有超过20A的下拉能力。          Output:输出电压,此时提供稳压、恒流的功率输出。
输出电压:正在输出的电压值。
输出电流:正在输出的电流值。
输入电压:正在输入的电压值。
输入电流:正在输入的电流值。
输出功率:输出电源的功率。
输出电量:输出的mAH数。

设置输出12.60V,设置限流1.000A,给3S11.1V,充满12.6V)航模锂电池充电,恒流输出1.000A,电压11.36V,效率91.4%
截图202507281925061289.jpg

设置输出12.60V,设置限流2.000A,给3S11.1V,充满12.6V)航模锂电池充电,恒流输出2.000A,电压11.60V,效率92.2%
截图202507281925273556.jpg

短按SEL键,选择调整设置项,此时可以使用UPDOWN键调整参数。
截图202507281925525983.jpg

具体电路可以参考附件中PDF版本,除了PWM驱动输出电路和电流采样放大电路,别的都是常规电路。本电路使用SEPIC拓扑(单端初级电感转换器Single Ended Primary Inductor Converter),本电路输出电流检测最大4A,最大限流3APWM1P驱动N-MOS管,由于MOSFET和电感的内阻小,电容的ESR也小,会得到高效率的转换,这部分电路输出12V时的效率能超过95%
截图202507281926169344.jpg
下图为输出电流检测、放大电路,50mR采样,放大12.22倍,满量程4.091A,程序设置恒流值为3A
截图202507281926475191.jpg

==================================================================
PID调试:使用串口绘图来配合PID调试,没有这些曲线显示是很难调试PID的。打开AiCube-ISP-v6.95Z.exe,再打开“串口绘图”:
截图202507281927131479.jpg

设置曲线参数:点击右上角的“设置”,进入下面的设置界面,勾选5条曲线,单字节数据格式。
截图202507281927294451.jpg

串口命令设置:点“功能”里的“命令设设置”,
截图202507281927489885.jpg

命令1填入1,这是请求返回绘图数据的命令,命令4填入0,这是停止返回数据的命令。点确定。
截图202507281928171703.jpg

点击上面的“命令1”或“Ctrl+1”,MCU开始返回数据,这些数据可以保存起来的。点击“命令4”或“Ctrl+4”,MCU停止返回数据。
截图202507281928361410.jpg

可以在“数据”里“加载数据”,就可以打开保存的数据:
截图202507281928569450.jpg

下面是输出12.60V,恒流2.000A,给3S11.1V,充满12.6V)航模锂电池充电,投切负载时的响应曲线,黄色为设定输出电压值(0.1V),绿色为当前输出电压值(0.1V),红色为设定输出电流值(0.01A),紫色为当前输出电流值(0.01A),橙色为当前输出PWM值(x10)。
截图202507281929158439.jpg

放大至采样点,一个点为1ms,可见接通负载后,紫色电流曲线先出现一个尖峰(因为输出电容12.6V加载到电池上出现浪涌电流),之后在PID控制下逐渐退出间歇模式,橙色PWM线性上升,电流上升,直至到达红色恒流值2.00A,绿色输出电压曲线跟着下降,稳定在电池电压上。
截图202507281929338339.jpg

断开负载后,紫色电流急剧降为0PWM也急剧降为0,几个ms后绿色电压上升出现过冲(因为负载没了,几个周期的PWM就能将输出电容充电至过冲),然后电压缓慢降低,PID的误差和积分累积,再次输出十几个周期,重复上述过程,电源处于间歇状态。这个电源只合适做充电器。
截图202507281929547017.jpg

串口设置PID参数:下图 “多字符串发送”栏填上要发送的参数,每个数据都以逗号结束, 不能有空格,不能有除了数字和盗号之外别的字符。点击字符串的序号,即可发送出去。也可以鼠标指向序号右键定义此字符串的名字。比如:1260,1000,10,3,0,1260: 设置输出电压(单位0.01V), 1260表示12.60V1000: 设置输出电流限流(单位1mA)1000表示1.000APID恒流计算分辨率为4mA10:  比例系数(单位0.01)10表示Kp=0.103:    积分系数(单位0.01) 3表示Ki=0.030:   微分系数(单位0.01) 0表示Kd=0.00发送设置命令时,最好先禁止输出,避免系数突然大改变而可能导致失控。
截图202507281930169939.jpg
由于航模锂电池的内阻一般在10~30毫欧之间,所以使用50mR的电流采样电阻就变得关键,否则会很难稳定限流值。

程序源码、电路、PCB、PID曲线数据:
数控电源-SEPIC升降压-恒压恒流-充电器-2025-7-29.rar (1.54 MB, 下载次数: 4)

回复

使用道具 举报 送花

3

主题

247

回帖

-795

积分

等待验证会员

积分
-795
发表于 3 天前 | 显示全部楼层
尊敬的用户:

感谢您分享关于基于STC32G12K128的SEPIC升降压式数控电源设计的相关内容。以下是对该设计的简要分析与专业回应,供参考。

本设计采用STC32G12K128作为主控芯片,结合HSPWM模块实现对MOSFET的直接驱动,构成SEPIC拓扑结构的开关电源系统,具备恒压(CV)与恒流(CC)输出功能,并引入PID控制算法以提升系统稳定性和响应速度。整体设计体现了高集成度、高效率和良好的动态性能,符合现代电源管理的需求。

从电路设计来看,主控部分采用了STC32G系列单片机,其内置高性能HSPWM模块可支持多路PWM输出,适用于高频开关电源的应用场景。SEPIC拓扑具有输入输出隔离、升降压能力以及低电磁干扰(EMI)等优点,适合用于需要宽输入电压范围且需保持输出稳定的场合。

在电源与输出电路设计中,通过功率电感与滤波电容的组合,实现了对输出电压的平滑处理。同时,电流采样放大电路的设计对于实现恒流控制至关重要,其精度直接影响到系统输出的稳定性与准确性。

PID控制算法的引入,有助于提高系统的动态响应和稳态精度,尤其在负载变化或输入电压波动时,能够有效抑制输出电压的波动,确保输出稳定。此外,PID参数的合理整定是实现良好控制效果的关键,建议在实际应用中根据具体工况进行优化调整。

总体而言,该设计具备较高的技术含量和实用性,适用于工业控制、通信设备、新能源等领域。若能在实际应用中进一步优化PCB布局、加强EMC设计,并完善保护机制(如过压、过流、短路保护),将更有利于提升产品的可靠性和市场竞争力。

如需进一步探讨具体电路细节、软件算法实现或系统调试方法,欢迎继续交流。

此致  
敬礼!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-31 23:04 , Processed in 0.114500 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表