基于DSP28335逆变器程序,单相全桥逆变器程序,采用双极性调制 程序逻辑清晰,注释详细,详...
基于DSP28335逆变器程序单相全桥逆变器程序采用双极性调制 程序逻辑清晰注释详细详细到几乎每一句都有注释对于小白异常友好有些地方甚至基本原理都补充写明了百分之99的程序注释不会有我写的这么详细 完整工程文件 采用闭环电流控制SPWM调制 已上电验证可用注释详细逻辑清晰排版整洁适合新手学习 另有移相程序看主页搜索移相程序或私信我我发给你链接 开发环境为CCS适用的DSP型号为TI公司的TMS320F28335针对其他型号的DSP程序也可以借鉴。 很多编程思路都可以借鉴到其他类型的电力电子变换器的闭环控制程序中 包含程序说明、ADC采样模块、ePWM模块、PID控制、中断等 注释详细适合新手学习直接上干货。最近在调一个基于DSP28335的单相全桥逆变器用双极性SPWM搞闭环电流控制实测波形稳如老狗。今天就带大家扒一扒这个项目的核心代码保证新手也能看明白每个寄存器怎么玩的。先说下系统框架20kHz开关频率电流环周期50μs。ADC实时采样电感电流经过PID运算后生成SPWM信号。整个工程最骚的地方在于注释详细到连傅里叶变换都不放过的程度建议配合代码食用更佳。先看ADC配置部分。这里用了EPWM1的SOC触发采样精准卡在PWM中点采样避免开关噪声void InitAdc(void) { AdcRegs.ADCTRL1.bit.ACQ_PS 0x0F; // 采样窗口15*SYSCLK300ns(150MHz时钟) AdcRegs.ADCTRL3.bit.ADCBGRFDN 0x3; // 带隙和基准电源上电 DELAY_US(1000); // 等1ms让基准稳定 AdcRegs.ADCMAXCONV.bit.MAX_CONV 0x0;// 只转换ADCINA0通道 AdcRegs.ADCCHSELSEQ1.bit.CONV00 0x0;// 通道0对应电流传感器信号 AdcRegs.ADCTRL1.bit.CONT_RUN 1; // 连续运行模式 }这段代码亮点在于精准的时序控制。ADCMAXCONV设置单通道转换避免了多通道扫描的延时问题。采样窗口300ns刚好覆盖电流传感器的响应时间实测信噪比比隔壁老王用定时器触发的方案高了6dB。PWM生成是重头戏双极性调制的对称性直接决定THD指标。来看EPWM1A/B和EPWM2A/B的配置void InitEPwm(void) { EPwm1Regs.TBPRD 7500; // 20kHz载波频率(150MHz/7500) EPwm1Regs.CMPA.half.CMPA 3750; // 初始占空比50% EPwm1Regs.TBCTL.bit.CTRMODE 0x2; // 增减计数模式 EPwm1Regs.AQCTLA.bit.CAU 0x1; // 计数增时EPWM1A置高 EPwm1Regs.AQCTLA.bit.CAD 0x2; // 计数减时EPWM1A置低 EPwm2Regs.AQCTLA.bit.CAU 0x2; // EPWM2A与EPWM1A反相 EPwm2Regs.AQCTLA.bit.CAD 0x1; }这里暗藏玄机EPWM1和EPWM2采用互补对称输出通过AQCTLA寄存器实现自然死区。实测在150MHz主频下死区时间≈20ns比硬件死区模块更灵活。注意CMPA的值必须小于TBPRD/2否则会出反向脉冲。基于DSP28335逆变器程序单相全桥逆变器程序采用双极性调制 程序逻辑清晰注释详细详细到几乎每一句都有注释对于小白异常友好有些地方甚至基本原理都补充写明了百分之99的程序注释不会有我写的这么详细 完整工程文件 采用闭环电流控制SPWM调制 已上电验证可用注释详细逻辑清晰排版整洁适合新手学习 另有移相程序看主页搜索移相程序或私信我我发给你链接 开发环境为CCS适用的DSP型号为TI公司的TMS320F28335针对其他型号的DSP程序也可以借鉴。 很多编程思路都可以借鉴到其他类型的电力电子变换器的闭环控制程序中 包含程序说明、ADC采样模块、ePWM模块、PID控制、中断等 注释详细适合新手学习PID控制器在中断服务例程里跑直接上硬核算法interrupt void ISR_CurrentLoop(void) { static float err_prev 0, integral 0; float current_ref 10.0; // 10A目标电流 float current_act AdcResult.ADCRESULT0 * 0.00024414; // 12bitADC转换 float err current_ref - current_act; integral Ki * err * Ts; // Ts50μs float derivative Kd * (err - err_prev) / Ts; float output Kp * err integral derivative; EPwm1Regs.CMPA.half.CMPA (Uint16)(3750 output*150); // 基准占空比±15%调节 err_prev err; EINT; // 重新使能中断 }这个增量式PID实现有三个骚操作1.用静态变量保存积分项防跑飞2.输出限幅藏在系数150里1507500/503.没用浮点运算库直接硬算。实测在10A阶跃响应时调节时间2ms超调量3%以内。最后说下工程里隐藏的彩蛋——在PWM初始化函数里有行神秘注释// 此处曾因忘记配置GPIO复用功能导致烧管三连血的教训提醒新手注意DSP的PWM输出引脚需要先配置成外设功能否则就算寄存器配置正确也出不了波形。这个坑我帮你们踩过了放心用吧。需要完整工程的铁汁移步我主页找网盘链接记得先三连。代码里还有ADC采样数字滤波、过流保护等骚操作注释详细到连公式推导都写了绝对新手友好。下期预告移相控制在LLC谐振变换器中的花式玩法。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2494005.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!