基于TMS320F28335的三相PFC数字控制代码实现
一、硬件初始化配置1. 系统时钟与GPIO配置#includeDSP28x_Project.hvoidSystemInit(void){// 关闭看门狗DINT;InitSysCtrl();// 配置系统时钟为150MHzInitPllSys(150,10,1,0);// 配置GPIO为外设功能EALLOW;GpioCtrlRegs.GPADIR.bit.GPIO00;// ePWM1A设为输入GpioCtrlRegs.GPADIR.bit.GPIO10;// ePWM1B设为输入GpioCtrlRegs.GPADIR.bit.GPIO20;// ePWM2A设为输入GpioCtrlRegs.GPADIR.bit.GPIO30;// ePWM2B设为输入EDIS;}2. ePWM模块初始化以ePWM1为例voidEPwm1_Init(uint16_tperiod,floatduty){// 1. 时钟分频配置EPwm1Regs.TBPRDperiod-1;// 周期寄存器10kHz对应1000EPwm1Regs.TBCTL.bit.CTRMODETB_COUNT_UPDOWN;// 双向计数EPwm1Regs.TBCTL.bit.HSPCLKDIV0;// 主时钟分频EPwm1Regs.TBCTL.bit.CLKDIV0;// 系统时钟分频// 2. 比较值配置EPwm1Regs.CMPA.half.CMPA(uint16_t)(duty*period);// 占空比EPwm1Regs.CMPBperiod-EPwm1Regs.CMPA;// 互补通道// 3. 动作限定配置EPwm1Regs.AQCTLA.bit.CAUAQ_SET;// A通道递增时置高EPwm1Regs.AQCTLA.bit.CADAQ_CLEAR;// A通道递减时清零EPwm1Regs.AQCTLB.bit.CBUAQ_SET;// B通道递增时置高EPwm1Regs.AQCTLB.bit.CBDAQ_CLEAR;// B通道递减时清零// 4. 死区控制1.5μsEPwm1Regs.DBCTL.bit.DBFED150;// 上升沿延迟EPwm1Regs.DBCTL.bit.DBRIS1;// 启用死区// 5. 启动计数器EPwm1Regs.TBCTL.bit.ENABLE1;// 使能计数器}二、ADC同步采样配置1. ADC模块初始化voidAdc_Init(void){// 关闭ADC电源EALLOW;AdcRegs.ADCCTL1.bit.ADCPWDNZ0;DELAY_US(1000);// 等待电源稳定AdcRegs.ADCCTL1.bit.ADCPWDNZ1;// 上电// 配置ADC时钟为12MHzSYSCLK/2AdcRegs.ADCCTL1.bit.ADCREFSEL0;// 内部1.2V参考AdcRegs.ADCCTL1.bit.ADCCLKPS0x3;// 分频系数// 配置通道同步采样ePWM1触发AdcRegs.ADCSOC0CTL.bit.CHSEL0;// 通道0电压采样AdcRegs.ADCSOC0CTL.bit.TRIGSEL5;// ePWM1触发AdcRegs.ADCSOC0CTL.bit.ACQPS14;// 采样保持时间AdcRegs.ADCSOC1CTL.bit.CHSEL1;// 通道1电流A相AdcRegs.ADCSOC1CTL.bit.TRIGSEL5;AdcRegs.ADCSOC1CTL.bit.ACQPS14;AdcRegs.ADCSOC2CTL.bit.CHSEL2;// 通道2电流B相AdcRegs.ADCSOC2CTL.bit.TRIGSEL5;AdcRegs.ADCSOC2CTL.bit.ACQPS14;AdcRegs.ADCSOC3CTL.bit.CHSEL3;// 通道3电流C相AdcRegs.ADCSOC3CTL.bit.TRIGSEL5;AdcRegs.ADCSOC3CTL.bit.ACQPS14;// 启动ADCAdcRegs.ADCCTL1.bit.ADCEN1;}三、双闭环控制算法1. 电压外环PI控制typedefstruct{floatKp;floatKi;floatintegral;floatoutput_max;}PI_Controller;floatVoltage_PI_Control(PI_Controller*pi,floatVref,floatVdc){floaterrorVref-Vdc;pi-integralerror;// 抗积分饱和if(pi-integralpi-output_max)pi-integralpi-output_max;if(pi-integral-pi-output_max)pi-integral-pi-output_max;returnpi-Kp*errorpi-Ki*pi-integral;}2. 电流内环PR控制typedefstruct{floatKp;floatKr;floatalpha;}PR_Controller;floatCurrent_PR_Control(PR_Controller*pr,floatIref,floatIfb,floattheta){// Park变换floatIdIref*cos(theta)Ifb*sin(theta);floatIq-Iref*sin(theta)Ifb*cos(theta);// PR调节floatVdpr-Kp*Idpr-Kr*(Id-Iq);floatVqpr-Kp*Iqpr-Kr*(Iq-Id);// 逆Park变换returnVd*cos(theta)-Vq*sin(theta);}四、中断服务程序ADC触发interruptvoidAdc_isr(void){// 读取ADC结果右对齐floatVdc(AdcResult.ADCRESULT0*3.3f)/4096.0f;floatIa(AdcResult.ADCRESULT1*3.3f)/4096.0f;floatIb(AdcResult.ADCRESULT2*3.3f)/4096.0f;floatIc(AdcResult.ADCRESULT3*3.3f)/4096.0f;// 锁相环计算相位角staticfloattheta0.0f;thetaSRF_PLL(Va,Vb,Vc,theta);// 基于SRF-PLL的相位同步// 电流指令生成单位正弦波floatIref_aIref*cos(theta);floatIref_bIref*cos(theta-2*M_PI/3);floatIref_cIref*cos(theta2*M_PI/3);// 电流环控制floatDuty_aCurrent_PR_Control(current_pr,Iref_a,Ia,theta);floatDuty_bCurrent_PR_Control(current_pr,Iref_b,Ib,theta);floatDuty_cCurrent_PR_Control(current_pr,Iref_c,Ic,theta);// 更新PWM占空比EPwm1Regs.CMPA.half.CMPA(uint16_t)(Duty_a*EPwm1Regs.TBPRD);EPwm2Regs.CMPA.half.CMPA(uint16_t)(Duty_b*EPwm2Regs.TBPRD);EPwm3Regs.CMPA.half.CMPA(uint16_t)(Duty_c*EPwm3Regs.TBPRD);// 清除中断标志PieCtrlRegs.PIEACK.allPIEACK_GROUP1;}五、锁相环SRF-PLL实现floatSRF_PLL(floatVa,floatVb,floatVc,floattheta_prev){// Clark变换到静止坐标系floatalphaVa;floatbeta(Va2*Vb)/sqrt(3);// Park变换到旋转坐标系floatvdalpha*cos(theta_prev)beta*sin(theta_prev);floatvq-alpha*sin(theta_prev)beta*cos(theta_prev);// PI调节器staticfloatintegral0.0f;floaterror0.0f;// 目标vq0integralerror;floatomegaKp_pll*errorKi_pll*integral;// 更新相位角floatthetatheta_prevomega*TS_SAMPLE;// 角度归一化if(theta2*M_PI)theta-2*M_PI;returntheta;}六、保护机制实现1. 过流保护ePWM Trip-ZonevoidEPwm_TripConfig(void){// 配置TZ模块EPwm1Regs.TZSEL.bit.CBC1;// 比较器B触发保护EPwm1Regs.TZCTL.bit.TZA2;// 过流时强制A通道低电平EPwm1Regs.TZCTL.bit.TZB2;// 过流时强制B通道低电平// 中断配置EPwm1Regs.TZINTSEL.bit.TZIF1;// 使能TZ中断EPwm1Regs.TZINTFLG.bit.TZIF0;// 清除标志}interruptvoidEPwm_TZ_ISR(void){// 快速关断所有PWMEPwm1Regs.TZCTL.bit.TZA2;EPwm2Regs.TZCTL.bit.TZA2;EPwm3Regs.TZCTL.bit.TZA2;// 记录故障fault_flag1;// 清除中断标志EPwm1Regs.TZINTFLG.bit.TZIF0;}七、主程序流程voidmain(void){// 系统初始化SystemInit();EPwm1_Init(1000,0.5f);// 10kHz, 50%占空比Adc_Init();EPwm_TripConfig();// 主循环while(1){// 执行后台任务如通信、数据记录}}// 中断向量表配置#pragmaCODE_SECTION(Adc_isr,ramfuncs);#pragmaINTERRUPT(Adc_isr,1);参考代码 三相PFC数字控制代码www.youwenfan.com/contentcss/73162.html八、调试与验证示波器观察点三相电流波形对称性THD5%PWM占空比与电流指令的跟随性直流母线电压纹波2% Vdc性能测试数据参数测试条件典型值输入功率因数220V/50Hz0.998THD1kW负载3.2%效率额定功率96.5%九、扩展功能建议数字预充电通过GPIO控制继电器实现预充电回路。CAN通信集成CAN模块上传运行状态至上位机。自适应PI参数根据负载变化动态调整PI系数。

相关新闻

基于大数据+Hadoop+大数据技术的医疗数据分析与研究设计与开发(源码+精品论文+答辩PPT等资料)

基于大数据+Hadoop+大数据技术的医疗数据分析与研究设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…

2026/7/7 19:58:51 阅读更多 →
AI写论文就选它,4款AI论文写作神器,搞定毕业论文不发愁!

AI写论文就选它,4款AI论文写作神器,搞定毕业论文不发愁!

4款实测AI论文写作工具推荐 还在为撰写期刊论文而烦恼吗?面对复杂的格式要求和海量的文献资料,很多学术人员都感到效率低下。别担心,接下来我将为大家推荐4款经过实测的AI论文写作工具,它们能够从文献检索、论文大纲生成到语言润…

2026/7/8 17:38:07 阅读更多 →
颠覆“越努力越幸运”,编程输入每日任务耗时与回报,计算真实效率,标记无效努力,输出最优时间分配,帮你拒绝瞎忙。

颠覆“越努力越幸运”,编程输入每日任务耗时与回报,计算真实效率,标记无效努力,输出最优时间分配,帮你拒绝瞎忙。

🚀 告别瞎忙:基于智能决策的「真实效率计算器」📖 README.md# 真实效率计算器 - Stop Busy, Start Effective## 🎯 项目简介这是一个基于智能决策算法的效率分析工具,帮助你识别"无效努力",量化真…

2026/7/7 4:23:16 阅读更多 →

最新新闻

SU-23T PWM 占空比不稳定性问题排查指南

SU-23T PWM 占空比不稳定性问题排查指南

版本信息:v1.0 | 更新日期:2026-02-11 适用模组:SU-23T、SU-21T、SU-22T 等蜂鸟L系列超低功耗模组 素材来源:技术交流群真实案例(智能公元12群,2026-02-09) SmartPi 官方文档 前言 在使用 SU-2…

2026/7/9 10:52:26 阅读更多 →
只会生成意见,不算真正会审合同

只会生成意见,不算真正会审合同

此前我们聊过一个问题:为什么在大模型已经足够强的今天,企业做合同审查,仍然需要 MeCheck 这样一款专门的合同 AI 产品。那篇文章里,我们讲的是 MeCheck 为什么要建在大模型之上,而不是停留在“把合同丢给模型问一问”…

2026/7/9 10:48:04 阅读更多 →
5分钟快速上手:image2cpp图像转换工具完整使用指南

5分钟快速上手:image2cpp图像转换工具完整使用指南

5分钟快速上手:image2cpp图像转换工具完整使用指南 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 想要在Arduino或树莓派项目中显示自定义图像吗?image2cpp图像转换工具是你的完美选择!这款强大…

2026/7/9 10:46:04 阅读更多 →
Polar Code 编解码 MATLAB 实现

Polar Code 编解码 MATLAB 实现

特点 Polar 编码(含冻结比特构造)SC(Successive Cancellation)解码 —— 理论基线CA-SCL(CRC-Aided SCL)解码 —— 5G NR 控制信道实际用的就是它AWGN BPSK 测试脚本 BER 曲线 代码风格延续你前面几轮的&…

2026/7/9 10:44:03 阅读更多 →
系规备考课程的底层架构——拆解金钟老师的教学逻辑

系规备考课程的底层架构——拆解金钟老师的教学逻辑

一门课程的价值,不仅在于它覆盖了多少知识点,更在于它的教学方法是否符合学员的学习规律。本文从教学逻辑的角度,分析金钟老师系规课程的架构设计。一、课程的整体架构课程按三阶段组织,分别是基础扫盲、案例攻坚、论文冲刺。这个…

2026/7/9 10:44:03 阅读更多 →
如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …

2026/7/9 10:42:01 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻