(1)原理介绍

F280049C的PWM模块功能强大,可以比较容易的实现移相控制。 本节主要向大家讲述用DSP如何编程实现移相控制,如下图所示为移相全桥变换器的移相控制示意图,其中EPWM1A和EPWM1B为占空比50%的互补信号,EPWM2A和EPWM2B也为占空比50%的互补信号。通过控制EPWM1A和EPWM2B的移相角来实现移相控制。

如上图标注所示,控制上以PWM1的计数时基为基准信号,在PWM1的计数器为零(宏:EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO)时PWM1发出同步脉冲SyncOut,同时配置PWM2的同步信号来源为Syncln(宏:EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN)。相关的宏定义如下所示:

typedef enum
{//! sync pulse is generated by softwareEPWM_SYNC_OUT_PULSE_ON_SOFTWARE  = 0,//! sync pulse is passed from EPWMxSYNCINEPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN = 0,//! sync pulse is generated when time base counter equals zeroEPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO = 1,//! sync pulse is generated when time base counter equals compare B value.EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_B = 2,//! sync pulse is disabledEPWM_SYNC_OUT_PULSE_DISABLED = 4,//! sync pulse is generated when time base counter equals compare D value.EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_C = 5,//! sync pulse is disabled.EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_D = 6
}EPWM_SyncOutPulseMode;

当PWM1的时基计数到零数发出同步脉冲,此时,PWM2接收到同步脉冲后将相位寄存器TBPHS中的值加载到时基计数器TBCTR中。也就是说,当PWM1从零开始计数时,PWM2此时从TBPHS寄存器中的值开始计数。因此,PWM1和PWM2实现了移相,改变TBPHS寄存器中的值可以改变移相控制的移相角。

(2)相关寄存器配置

如上图所示,PWM1只需要配置其何时发出同步脉冲即可,相关配置如下所示:

EPWM_setSyncOutPulseMode(EPWM1_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);  //计数到零时发出同步脉冲

PWM2需要配置其同步脉冲输入源和相位寄存器TBPHS的值,同时还需要使能相位寄存器的加载(图中的En,寄存器TBCTL中的PHSEN位),相关配置代码如下:

    EPWM_enablePhaseShiftLoad(EPWM2_BASE);                                      //使能相位寄存器EPWM_setSyncOutPulseMode(EPWM2_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);    //计数到零时发出同步脉冲EPWM_setPhaseShift(EPWM2_BASE,250);                                         //设置初始移相值

(3)PWM1和PWM2的配置

PWM1和PWM2的完整配置程序如下所示,其中包含了基本PWM输出的配置、死区时间的配置和移相控制的配置,每句程序后边都有详细的注释,方便大家阅读理解。要想实现PWM的输出,还需要配置与PWM相关的GPIO引脚,限于篇幅,在此不再列出,需要的话大家可以下载完整的实验工程(下载链接见文章末尾)。

void ePWM1_Configuration(void)
{EPWM_setClockPrescaler(EPWM1_BASE,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);                         //ePWM 时钟为100MHZEPWM_setTimeBaseCounterMode(EPWM1_BASE,EPWM_COUNTER_MODE_UP);           //设置计数模式(增计数)EPWM_setTimeBaseCounter(EPWM1_BASE,0);                                  //计数初始值设置EPWM_setTimeBasePeriod(EPWM1_BASE,1000);                                //计数周期 fs=100kHzEPWM_setPeriodLoadMode(EPWM1_BASE,EPWM_PERIOD_SHADOW_LOAD);             //周期加载模式EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE,EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO_PERIOD);//比较值加载模式EPWM_setCounterCompareValue(EPWM1_BASE,EPWM_COUNTER_COMPARE_A,500);     //设定比较值EPWM_setCounterCompareValue(EPWM1_BASE,EPWM_COUNTER_COMPARE_B,500);EPWM_setActionQualifierAction(EPWM1_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);      //ePWMA的EPWM_setActionQualifierAction(EPWM1_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);EPWM_setSyncOutPulseMode(EPWM1_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);  //计数到零时发出同步脉冲EPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE,EPWM_DB_INPUT_EPWMA);EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE,EPWM_DB_INPUT_EPWMA);     //配置死区输入模式EPWM_setDeadBandDelayPolarity(EPWM1_BASE,EPWM_DB_RED,EPWM_DB_POLARITY_ACTIVE_HIGH);EPWM_setDeadBandDelayPolarity(EPWM1_BASE,EPWM_DB_FED,EPWM_DB_POLARITY_ACTIVE_LOW);//配置极性EPWM_setDeadBandDelayMode(EPWM1_BASE,EPWM_DB_RED,true);EPWM_setDeadBandDelayMode(EPWM1_BASE,EPWM_DB_FED,true);                     //配置输出模式EPWM_setDeadBandOutputSwapMode(EPWM1_BASE,EPWM_DB_OUTPUT_A,false);EPWM_setDeadBandOutputSwapMode(EPWM1_BASE,EPWM_DB_OUTPUT_B,false);          //输出不交换EPWM_setRisingEdgeDelayCount(EPWM1_BASE,0);                                //上升沿延时0nSEPWM_setFallingEdgeDelayCount(EPWM1_BASE,0);                               //下降沿延时0nSEPWM_enableADCTrigger(EPWM1_BASE,EPWM_SOC_A);EPWM_setADCTriggerSource(EPWM1_BASE,EPWM_SOC_A,EPWM_SOC_TBCTR_ZERO);EPWM_setADCTriggerEventPrescale(EPWM1_BASE,EPWM_SOC_A,1);
}void ePWM2_Configuration(void)
{EPWM_setClockPrescaler(EPWM2_BASE,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);                         //ePWM 时钟为100MHZEPWM_setTimeBaseCounterMode(EPWM2_BASE,EPWM_COUNTER_MODE_UP);           //设置计数模式(增计数)EPWM_setTimeBaseCounter(EPWM2_BASE,0);                                  //计数初始值设置EPWM_setTimeBasePeriod(EPWM2_BASE,1000);                                //计数周期 fs=100kHzEPWM_setPeriodLoadMode(EPWM2_BASE,EPWM_PERIOD_SHADOW_LOAD);             //周期加载模式EPWM_setCounterCompareShadowLoadMode(EPWM2_BASE,EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO_PERIOD);//比较值加载模式EPWM_setCounterCompareValue(EPWM2_BASE,EPWM_COUNTER_COMPARE_A,500);     //设定比较值EPWM_setCounterCompareValue(EPWM2_BASE,EPWM_COUNTER_COMPARE_B,500);EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);      //ePWMA的EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);EPWM_enablePhaseShiftLoad(EPWM2_BASE);                                      //使能相位寄存器EPWM_setSyncOutPulseMode(EPWM2_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);    //计数到零时发出同步脉冲EPWM_setPhaseShift(EPWM2_BASE,250);                                         //设置初始移相值EPWM_setRisingEdgeDeadBandDelayInput(EPWM2_BASE,EPWM_DB_INPUT_EPWMA);EPWM_setFallingEdgeDeadBandDelayInput(EPWM2_BASE,EPWM_DB_INPUT_EPWMA);     //配置死区输入模式EPWM_setDeadBandDelayPolarity(EPWM2_BASE,EPWM_DB_RED,EPWM_DB_POLARITY_ACTIVE_HIGH);EPWM_setDeadBandDelayPolarity(EPWM2_BASE,EPWM_DB_FED,EPWM_DB_POLARITY_ACTIVE_LOW);//配置极性EPWM_setDeadBandDelayMode(EPWM2_BASE,EPWM_DB_RED,true);EPWM_setDeadBandDelayMode(EPWM2_BASE,EPWM_DB_FED,true);                     //配置输出模式EPWM_setDeadBandOutputSwapMode(EPWM2_BASE,EPWM_DB_OUTPUT_A,false);EPWM_setDeadBandOutputSwapMode(EPWM2_BASE,EPWM_DB_OUTPUT_B,false);          //输出不交换EPWM_setRisingEdgeDelayCount(EPWM2_BASE,0);                  //上升沿延时0nSEPWM_setFallingEdgeDelayCount(EPWM2_BASE,0);                  //下降沿延时0nS
}

(4)实验波形

设定移相角为90度,开关频率为100kHZ,占空比为50%。输出PWM1A和PWM2A的波形如下所示:

F280049移相控制完整的CCS工程我已经上传到了CSDN上,需要的可自行下载哈,程序中有不懂得地方都可以给我留言哈。下载链接如下:

https://download.csdn.net/download/fanxianyan1993/11110315

提问方式:有啥不懂的可以随时向我提问哈,扫描下方二维码我会在第一时间给大家回复的哈,谢谢。

DSP TMS320F280049之移相控制(Phase-Shift Control)-库函数实现相关推荐

  1. 双有源桥DC变换器单移相,双移相控制simulink仿真模型

    双有源桥DC变换器单移相,双移相控制simulink仿真模型 编号:7449646202122558P17696131442

  2. 变频控制与移相控制组成的混合式控制全桥LLC谐振变换器仿真(PFM+PSM混合控制) 输出电压闭环控制,软开关,宽范围

    变频控制与移相控制组成的混合式控制全桥LLC谐振变换器仿真(PFM+PSM混合控制) 输出电压闭环控制,软开关,宽范围,可实现调频和移相的自动切换,调频和移相控制下的稳定波形如图所示 matlab/s ...

  3. STM32通用定时器输出带死区互补PWM/任意移相PWM

    项目上遇到了多个通道的带死区的互补功能,单纯靠H7的TIM1/TIM8/TIM15/TIM16/TIM17几个硬件自带的死区互补还不够,本文就使用通用定时器TIM2/TIM3/TIM4/TIM5来实现 ...

  4. 基于STM32的单片2KW+全数控移相全桥开关电源研发记录

    STM32系列,带来了用单片低成本32位芯片,开发单片数控移相全桥开关电源的可能. 核心驱动:采用2路带互补.死区控制的定时器,产生2相移相100KHz驱动信号,输出驱动.多通道ADC.移相控制等全硬 ...

  5. 基于STM32高级定时器的全桥移相PWM发波方案

    关注.星标公众号,不错过精彩内容 来源:STM32单片机 用于移相控制的全桥PWM变换器是中大功率DC-DC变换电路中最常用的电路之一,由于其可以实现开关管的软开关特性,在数字电源的设计中被广泛采用, ...

  6. STM32F103移相全桥PWM寄存器实现

    STM32F103移相全桥PWM寄存器实现 由于项目需求需要使用单片做一个移相全桥的DCDC电源.采用STM32F103芯片,采用直接控制寄存器实现PWM移相控制 基本原理 两桥臂分别使用定时器TIM ...

  7. 移相全桥PWM发波要求

    移相全桥的拓扑如下图所示,由于谐振电感L1的存在,结合移相控制,使开关管达到零电压开通(ZVS),从而有效的降低了电路的开关损耗和开关噪声,减少了开关过程中的产生的电磁干扰. 移相控制的PWM驱动波形 ...

  8. matlab 由移相角如何产生移相脉冲,整流电路控制角移相范围是怎么确定的?

    整流电路控制角移相范围是怎么确定的? 2019-03-14 [FrancisQu的回答(28票)]: 谢邀^^ 一言以蔽之,整流电路控制角的范围取决于整流电路直流输出电压平均值 时所得的控制角 ,详细 ...

  9. 移相全桥的控制模型的建立和仿真

    转自:http://bbs.21dianyuan.com/forum.php?mod=viewthread&tid=226811 (这篇真是太棒啦) 如果对传统PWM控制器的的控制和仿真有兴趣 ...

最新文章

  1. Ovirt 安装部署方法
  2. Developerkit Link Develop Demo 环境配置指南
  3. 源码阅读之Java栈的实现
  4. 人工智能助力生命科学新发展 | 飞桨博士会第十一期
  5. mac 上开发需要的软件
  6. java 解决故意弄得错误,高效的Java错误处理
  7. 8.16——熟悉安装linux系统
  8. C# Lazy Loading
  9. springboot+druid+mybatis+mysql+多数据源
  10. Cisdem PDF Converter OCR使用教程:在 Mac 上将PDF 转换为 Word
  11. 如何用JAVAC一次性编译多个包下的JAVA文件 ;JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行
  12. 左耳听风——笔记二:程序员练级攻略
  13. 计算机桌面没有cdef,如何解决电脑CDEF盘都打不开出现“该文件没有程序与之关联来执行该操作”的问题...
  14. homework2的进展
  15. CQI原理及CQI指标优化
  16. PicGo+GitHub图床+微博图床
  17. [HEOI2013] 钙铁锌硒维生素
  18. 模型中AIC和BIC以及loglikelihood的关系
  19. Excel表格密码保护解除
  20. java模拟回合制游戏大小姐_[源码和文档分享]基于java的RPG回合制游戏

热门文章

  1. 艾司博讯:拼多多畅销榜热卖指数怎么算
  2. Linux开发环境搭建之bzip2离线安装
  3. kafka系列之幂等生产者(11)
  4. C语言程序之经典习题:运输公司对用户计算运输费用。路程(s/km)越远,每吨/千米运费越低。
  5. Session 会话劫持和cookie窃取
  6. 【教学类-15-03】20221119《姓名描字帖-A4竖版(1*7笔画复杂大字)》(大班适合中层次幼儿)
  7. 吉大20计算机组成原理大作业,吉大20年9月课程计算机组成原理答案假期吖在线...
  8. 适用于大中型银行的云原生网络体系建设方案攻略
  9. 开始学习Pascal语言
  10. linux 网卡驱动升级,安装或更新CentOS平台的网卡驱动程序