news 2026/6/15 19:42:02

完整dab变换器的dsp28335程序,包含状态机,adc中断,抗饱和pi算法等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
完整dab变换器的dsp28335程序,包含状态机,adc中断,抗饱和pi算法等

完整dab变换器的dsp28335程序,包含状态机,adc中断,抗饱和pi算法等。

DAB变换器的数字控制核心在于状态管理和实时调节,搞过数字电源的兄弟应该都清楚,这玩意儿对时序和精度的要求有多变态。拿DSP28335来搞的话,咱们得把整个系统拆成几个关键模块来盘。

状态机这块必须得稳,直接上switch-case结构最实在。比如定义运行模式、故障保护、待机这几个基本状态:

typedef enum { SYS_INIT, STANDBY, RUNNING, FAULT } SystemState; volatile SystemState g_sysState = SYS_INIT;

在main循环里搞个状态巡检,重点注意状态切换时的硬件初始化。特别是从故障恢复时,记得先复位PWM输出再清故障标志,不然分分钟炸管给你看。

完整dab变换器的dsp28335程序,包含状态机,adc中断,抗饱和pi算法等。

ADC中断这块有个坑得注意,28335的ADC结果寄存器居然他娘的不是双缓冲结构!这就意味着如果在中断里直接读取数据时刚好遇到ADC正在转换,可能读到半截数据。解决办法是在中断里先把数据拷贝到临时变量:

__interrupt void adc_isr(void){ static struct AdcResult { Uint16 input_voltage; Uint16 output_current; } adc_buff; adc_buff.input_voltage = AdcResult.ADCRESULT0 >>4; adc_buff.output_current = AdcResult.ADCRESULT1 >>4; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // 复位排序器 AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; g_real_time_data = adc_buff; // 用结构体整体赋值避免数据撕裂 }

这里用结构体整体赋值是个骚操作,因为28335是32位处理器,两个16位数据刚好可以原子操作,避免主程序读到不一致的数据。

抗饱和PI算法才是重头戏,普通PI在输出限幅时积分项会疯狂累积。咱们在误差符号变化时给积分项来个急刹车:

typedef struct { float Kp; float Ki; float integral; float out_max; float out_min; } AntiWindupPI; float pi_calculate(AntiWindupPI *pi, float error){ float output = pi->Kp * error + pi->integral; // 抗饱和处理 if((error >0 && output >= pi->out_max) || (error <0 && output <= pi->out_min)){ return (output > pi->out_max) ? pi->out_max : pi->out_min; } pi->integral += pi->Ki * error * 0.0001; // 根据控制周期调整 return output; }

注意这里积分项更新前先判断输出是否饱和,这样当系统处于饱和状态时,积分器自动停止累积。实测这个操作能让系统从过载恢复时响应速度快一倍不止。

最后把这三个模块串起来,主循环里根据状态机切模式,ADC中断喂数据,PI计算结果扔给PWM模块。有个细节是PWM死区时间建议用硬件自动生成,别在软件里折腾,28335的ePWM模块配置好之后比软件模拟的靠谱多了:

void InitEPwm(){ EPwm1Regs.TBPRD = SYSTEM_FREQ / SWITCHING_FREQ; // 周期寄存器 EPwm1Regs.CMPA.half.CMPA = 0; // 初始占空比 EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; // 使能上升沿和下降沿死区 EPwm1Regs.DBFED = 100; // 死区时间ns级配置 EPwm1Regs.DBPRD = 100; }

调试时建议先拿电子负载做测试,别直接上真实负载。曾经有个兄弟没加死区时间直接上电,瞬间两千块的MOS管就放烟花了,那味道能在实验室飘三天...

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

探索STorM32 BGC:打造专业级影像稳定系统的开源方案

探索STorM32 BGC&#xff1a;打造专业级影像稳定系统的开源方案 【免费下载链接】storm32bgc 3-axis Brushless Gimbal Controller, based on STM32 32-bit microcontroller 项目地址: https://gitcode.com/gh_mirrors/st/storm32bgc 你是否正在寻找一款能够为无人机提…

作者头像 李华
网站建设 2026/6/15 16:49:10

3步攻克魔兽世界技能循环:GSE宏编译器解决方案

3步攻克魔兽世界技能循环&#xff1a;GSE宏编译器解决方案 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and the Curs…

作者头像 李华
网站建设 2026/6/14 20:33:55

突破网盘下载瓶颈:8大平台直链解析技术指南

突破网盘下载瓶颈&#xff1a;8大平台直链解析技术指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无需…

作者头像 李华
网站建设 2026/6/15 14:54:55

如何通过MediaCrawler智能采集实现多平台数据获取新方案

如何通过MediaCrawler智能采集实现多平台数据获取新方案 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 在信息爆炸的时代&#xff0c;企业和研究者常常面临这样的困境&#xff1a;如何高效、合规地获取分散在…

作者头像 李华
网站建设 2026/6/15 13:49:19

混合云架构中SolidWorks许可证的部署与管理策略

混合云架构中SolidWorks许可证的部署与管理策略一、问题的成因很多企业在向混合云架构转型的过程中&#xff0c;常常遇到关于SolidWorks许可证部署与管理方面的实际难题。这些难题往往源于对混合云环境理解不足&#xff0c;以及对SolidWorks授权机制的不熟悉。SolidWorks是一款…

作者头像 李华