news 2026/5/14 6:51:37

基于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/5/9 11:23:23

年终总结PPT怎么做?我用ChatExcel AIPPT一键生成,被领导夸疯了!

年末了&#xff01;又到年终汇报季&#xff0c;但是&#xff0c;很多同学写年终总结时&#xff0c;没思路、没灵感、没精力……现在&#xff0c;【ChatExcel AIPPT】让你“一句话生成PPT”&#xff0c;把一年的辛苦&#xff0c;一键升级为老板眼中的高分成绩单&#x1f4c4;~01…

作者头像 李华
网站建设 2026/5/9 7:50:59

信创云文档如何解决Word公式粘贴到XHEDITOR的兼容性?

我是如何用99元预算给CMS系统加了个"Word全家桶"功能的 各位学弟学妹们好&#xff0c;我是你们山西老学长&#xff0c;最近不是在搞毕业设计嘛&#xff0c;做了个CMS新闻管理系统。导师看了说&#xff1a;“你这系统发新闻还得手动排版&#xff1f;太土了吧&#xf…

作者头像 李华
网站建设 2026/5/13 11:33:23

CAN通信速率和传输距离关系

来自《汇川 IS620P系列伺服应用手册 CANopen通信篇》1M通信速率&#xff0c;通信距离要小于25m。 500K速率能到100m。 对于CAN通信&#xff0c;线缆线径对于传输距离影响不大。

作者头像 李华
网站建设 2026/5/11 16:15:52

AI编程范式革命:从自动化代码生成到算法深度优化的全景实践

引言&#xff1a;软件工程的“奇点”时刻我们正处于软件工程史上一个前所未有的转折点。过去的编程范式——从面向过程的汇编指令到面向对象的抽象设计——都是关于“如何告诉机器做什么”。然而&#xff0c;随着大语言模型&#xff08;LLM&#xff09;的爆发&#xff0c;编程范…

作者头像 李华
网站建设 2026/5/9 21:03:19

别再“烧广告续命”了!亚马逊卖家一夜暴亏的真凶:不是竞品,是你没做这 5 个“止血开关”

很多店铺突然从“还能赚”变成“越卖越亏”&#xff0c;往往只需要一周&#xff1a;广告拉满、促销一开、库存一紧&#xff0c;利润像漏水一样止不住。你以为是对手在打你&#xff0c;实际上是你自己没装“止血开关”——系统一出现异常&#xff0c;没有机制自动踩刹车。这篇就…

作者头像 李华