news 2026/10/15 19:52:07

基于stm32的数控线性稳压电源,恒压恒流电源资料。 极具学习和设计参考价值,已验证,资料包括...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于stm32的数控线性稳压电源,恒压恒流电源资料。 极具学习和设计参考价值,已验证,资料包括...

基于stm32的数控线性稳压电源,恒压恒流电源资料。 极具学习和设计参考价值,已验证,资料包括源程序,原理图,pcb等设计资料! 本设计采用220V市电输入工频变压器,将220V交流电压降为24V交流电压,经过全桥整流加电容滤波,输出约32V直流电压.可调输出电压方案采用线性稳压调整器方案,即运放处于比较调整状态,运放输出驱动P型MOS管,电压输出端由电阻分压反馈至运放同相输入端,运放反相输入端由STM32单片机控制TLC5615数模转换器输入模拟电压,根据运放构成比较器原理,运放的同相端和反相端始终趋向于电压相等的特性,不断调整MOS管的导通状态,从而可以实现STM32单片机通过控制数模转换器DA的输出,进而控制直流电压的输出大小.以上为作为电压源输出的方案介绍. ?????作为电流源输出,需要在后级输出采用0.1欧采样电阻来采样电流,采样电流经运放放大后送至单片机AD进行计算,单片机即可获得实际输出电流大小,由此根据设定电流值大小进行比较判断再控制DA输出,即可修正输出电流与设置电流一致.采样经放大的电流一部分又经运放组成比较器电路,采样电流与电位器可设置的比较电压进行比较,当电流大于比较电压,即可改变运放输出的高低电平状态,运放输出接单片机IO口,单片机将此IO设置为外部中断触发模式,目的为实现过流时快速响应并切断输出.调节电位器即可调整过流值大小. ?????液晶显示采用LCD1602,报警方式采用蜂鸣器LED声光报警.关键发热部位的温度通过NTC热敏电阻来采集,具有采集温度范围宽的优点.本机引出STM32单片机的串口接口,便于利用上位机进行控制。 对电路和程序稍加升级,该电源板兼容了稳流输出的功能,最后采用VS制作对应的数据采集上位机,能够更加适应实际的应用。 具体功能: 1、输出电压:范围 0V ~30.0V,输入交流220V,直接插220V市电即可; 2、步进0.1V,纹波 ?30mV; 3、最大输出电流:1.5A; 4、液晶LCD1602显示; 5、由“加、减”两键控制输出电压步进增减; 6、关键器件温度检测,超过60度声光报警。 7、具有输出过流保护,过流值大小通过电位器可调。 8、具有恒流输出和恒压输出两种模式,按键切换。

这个用STM32搞的数控电源有点意思,硬件和程序都整得挺实在。拆开电路板看架构,220V市电进来先过工频变压器降到24V交流,全桥整流配个4700uF大电容,怼出来32V左右的直流电。这里有个坑要注意——工频变压器虽然皮实,但体积重量感人,现在有些DIYer喜欢用开关电源前级替代,不过线性稳压的后级方案倒是稳妥。

核心调压部分玩的是运放+PMOS的经典套路。运放当比较器用,同相端接反馈分压,反相端接DLC5615的DA输出。当DA输出2V时,假设分压比是1:15,那输出电压就是2*(15+1)=32V?别急,实际分压电阻得用精密电阻配,不然DA的LSB步进会漂移。

看段驱动PMOS的关键代码:

void SetVoltage(float targetV){ uint16_t dac_value = (uint16_t)(targetV * 61.44); // 30V对应1843(0x733) TLC5615_Write(dac_value); }

这61.44的系数怎么来的?TLC5615是10位DA,基准2.048V。当DA输出Vdac时,电源输出电压Vout = Vdac(R1+R2)/R2。假设分压电阻是10K+150K,那系数就是(160/10)(2.048/2.0)=16.384。但代码里用61.44明显不对,估计实际分压比是33:1,可能硬件实际用了不同阻值——这提醒我们调压时必须实测分压电阻。

恒流模式更有意思。0.1Ω采样电阻上压降V=0.1*I,用LM358放大20倍后进STM32的ADC。注意这里运放的偏置电压会直接影响测量精度,代码里得做软件校准:

#define CURRENT_OFFSET 82 // 零点偏移量 uint16_t ReadCurrentADC(void){ uint32_t sum = 0; for(uint8_t i=0;i<16;i++){ sum += ADC_Read(ADC_CH_CURRENT); } return (sum >>4) - CURRENT_OFFSET; }

采样16次取平均能有效抑制工频干扰,但CURRENT_OFFSET这个偏移量需要上电时自动校准,而不是写死。更好的做法是开机时短接输出端,自动记录零点AD值。

基于stm32的数控线性稳压电源,恒压恒流电源资料。 极具学习和设计参考价值,已验证,资料包括源程序,原理图,pcb等设计资料! 本设计采用220V市电输入工频变压器,将220V交流电压降为24V交流电压,经过全桥整流加电容滤波,输出约32V直流电压.可调输出电压方案采用线性稳压调整器方案,即运放处于比较调整状态,运放输出驱动P型MOS管,电压输出端由电阻分压反馈至运放同相输入端,运放反相输入端由STM32单片机控制TLC5615数模转换器输入模拟电压,根据运放构成比较器原理,运放的同相端和反相端始终趋向于电压相等的特性,不断调整MOS管的导通状态,从而可以实现STM32单片机通过控制数模转换器DA的输出,进而控制直流电压的输出大小.以上为作为电压源输出的方案介绍. ?????作为电流源输出,需要在后级输出采用0.1欧采样电阻来采样电流,采样电流经运放放大后送至单片机AD进行计算,单片机即可获得实际输出电流大小,由此根据设定电流值大小进行比较判断再控制DA输出,即可修正输出电流与设置电流一致.采样经放大的电流一部分又经运放组成比较器电路,采样电流与电位器可设置的比较电压进行比较,当电流大于比较电压,即可改变运放输出的高低电平状态,运放输出接单片机IO口,单片机将此IO设置为外部中断触发模式,目的为实现过流时快速响应并切断输出.调节电位器即可调整过流值大小. ?????液晶显示采用LCD1602,报警方式采用蜂鸣器LED声光报警.关键发热部位的温度通过NTC热敏电阻来采集,具有采集温度范围宽的优点.本机引出STM32单片机的串口接口,便于利用上位机进行控制。 对电路和程序稍加升级,该电源板兼容了稳流输出的功能,最后采用VS制作对应的数据采集上位机,能够更加适应实际的应用。 具体功能: 1、输出电压:范围 0V ~30.0V,输入交流220V,直接插220V市电即可; 2、步进0.1V,纹波 ?30mV; 3、最大输出电流:1.5A; 4、液晶LCD1602显示; 5、由“加、减”两键控制输出电压步进增减; 6、关键器件温度检测,超过60度声光报警。 7、具有输出过流保护,过流值大小通过电位器可调。 8、具有恒流输出和恒压输出两种模式,按键切换。

过流保护用硬件比较器实现很聪明。当电流采样电压超过电位器设定值时,比较器翻转触发外部中断。代码里中断服务程序直接掐断输出:

void EXTI9_5_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line8)){ MOSFET_OFF(); BEEP_ALARM(3); EXTI_ClearITPendingBit(EXTI_Line8); } }

注意这里没做软件消抖,万一比较器临界振荡可能误触发。硬件上加个100pF电容到地会更稳妥。

温度检测用NTC时,代码里的温度计算公式要注意:

float TempCalc(uint16_t adc_val){ float Rt = 10000.0 * (4095.0/adc_val -1); // 10K NTC float T = 1/(1/298.15 + log(Rt/10000)/3950.0); return T -273.15; }

这个公式基于B=3950的NTC,实际器件参数可能有偏差。更专业的做法应该做两点校准,在25度和50度时记录AD值做线性修正。

主控逻辑的状态机切换是亮点:

typedef enum {CV_MODE, CC_MODE} WorkMode; WorkMode currentMode = CV_MODE; void ModeSwitch(void){ static uint8_t lastKey = 0; if(KEY_MODE_TRIGGERED()){ currentMode = (currentMode == CV_MODE)? CC_MODE : CV_MODE; LCD_ShowMode(currentMode); } }

模式切换时要处理DAC输出的平滑过渡,突然切变可能导致输出冲击电流。可以加个渐变过渡:

void ModeTransition(){ float target = (currentMode == CV_MODE) ? setVoltage : setCurrent*loadResistance; for(float v=currentOutput; v!=target; v+=step){ SetVoltage(v); Delay(10); } }

当然实际要考虑环路稳定性,别整成慢动作。

这套方案最妙的其实是上位机交互部分。用VS做的监控程序通过串口发指令,协议设计要讲究帧结构:

// 通信协议帧格式: // 0xAA | CMD | DataH | DataL | Checksum void SendVoltageSetting(float voltage){ uint16_t data = voltage *10; // 0.1V分辨率 UART_SendByte(0xAA); UART_SendByte(CMD_SET_VOL); UART_SendByte(data >>8); UART_SendByte(data &0xFF); UART_SendByte(CheckSum()); }

校验和用异或还是CRC?实际测试发现用累加和就能满足要求,毕竟不是高速通信。

最后说个硬件上的隐患——PMOS管在低压差时功耗惊人。比如输出5V/1A时,管压降27V,功耗27W!必须加大散热片,或者改进电路做成多级调整。不过作为学习项目,能跑起来已经够本,真做产品还得换Buck拓扑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 10:15:43

为什么企业级环境监测正全面转向LoRa多参量无线传感系统?

在工业4.0与“双碳”目标双重驱动下&#xff0c;环境参数的实时、精准、低成本采集已成为智能工厂、智慧农业、危化品管理等场景的核心需求。然而&#xff0c;传统有线传感器或单一功能无线节点&#xff0c;在复杂部署环境下面临布线难、功耗高、扩展性差等瓶颈。近年来&#x…

作者头像 李华
网站建设 2026/10/14 8:35:04

国产化数据库如何存储XHEDITOR编辑器中的动态公式内容?

.NET程序员接单记&#xff1a;那个让我月入百万的CMS插件需求 各位老铁们&#xff0c;我是来自山西的.NET码农小王&#xff0c;最近接了个企业官网外包项目&#xff0c;客户提了个"简单"需求——给xhEditor编辑器加个Word文档导入功能。听起来是不是平平无奇&#x…

作者头像 李华
网站建设 2026/10/14 5:05:31

汽车MES系统如何处理工艺卡片公式导入XHEDITOR?

打造Word内容一键转存的CMS新闻管理系统升级方案 大家好&#xff01;我是山西某校软件工程专业的一名大三学生&#xff0c;最近正在给我的CMS新闻管理系统添加一个酷炫的功能——Word内容一键转存&#xff01;&#x1f389; 需求分析 我需要给后台编辑器增加一个按钮&#x…

作者头像 李华
网站建设 2026/10/15 8:58:18

django-flask基于python的高校奖助学金申请管理系统

目录高校奖助学金申请管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;高校奖助学金申请管理系统摘要 该系统基于Python语言&#xff0c;采用Django和Flask框架开发&…

作者头像 李华
网站建设 2026/10/15 10:00:46

鸿蒙应用的未来发展趋势与前沿技术探索

&#x1f31f; 鸿蒙应用的未来发展趋势与前沿技术探索 一、章节概述 ✅ 学习目标 理解鸿蒙应用开发的未来发展趋势&#xff08;全场景体验、轻量化开发、AI原生应用、云原生部署、安全可信&#xff09;探索鸿蒙前沿技术&#xff08;元宇宙应用、量子计算、脑机接口、5G/6G通信、…

作者头像 李华
网站建设 2026/10/15 10:12:22

django-flask基于python的高校教材征订系统的设计与实现

目录 高校教材征订系统的设计与实现 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 高校教材征订系统的设计与实现 基于Python的Django和Flask框架&#xff0c;设计并实现了一套高…

作者头像 李华