一、前言
PWM(脉宽调制)是现代电力电子系统的基础控制技术。在电机控制或者电源驱动领域,大部分算法的最终出口是占空比的计算。在系统架构设计中,PWM的性能和分辨率是评估主控芯片性能的重要指标。
中科昊芯的HX2000系列DSP专为电机控制和开关电源行业设计,该系列芯片特色之一就是功能专业、模块化设计、容易上手的ePWM外设。
我们以HXS320F28027为例:
· 该款芯片ePWM模块由4个PWM子模块组成;
· 除PWM1外,各PWM子模块完全相同;
· PWM子模块由8个功能模块组成,用户可以根据需要使能,关闭或PASSBY相关模块,如死区,斩波,故障保护,ADC采样触发,以及模拟比较器联动等等;
· 借助主频的提升,PWM分辨率为国际友商的2倍。
下面我们做一个简单的PWM例程,演示该款DSP芯片的性能。
二、程序说明
GPIO0和GPIO1配置为PWM功能输出口。配置ePWM1模块,令PWM1周期=50us,PWM1A(GPIO0)占空比在100%-0%之间递减;PWM1B(GPIO1)输出恒定为50%。
三、效果演示
四、例程代码/*
* PWM.c
*
* Created on: 2021年10月25日
* Author: daieq
*/
#include "dsc_config.h"
#include <syscalls.h>
#include "IQmathLib.h"
Uint16 Value_pwm1_cmpa = 0;
int main(void)
{
InitSysCtrl();
InitEPwmGpio();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EPwm1Regs.TBPRD = 6000;
EPwm1Regs.TBCTL.bit.FREE_SOFT = 3;
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm1Regs.TBCTL.bit.CTRMODE = 2; // up&down mode
EPwm1Regs.CMPA.half.CMPA = 0;
EPwm1Regs.CMPB = 3000;
EPwm1Regs.AQCTLA.bit.CAU = 2; //set
EPwm1Regs.AQCTLA.bit.CAD = 1; //clear
EPwm1Regs.AQCTLB.bit.CBU = 2;//set
EPwm1Regs.AQCTLB.bit.CBD = 1; //clear
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
while(1){
DELAY_US(10000);
Value_pwm1_cmpa++;
if(Value_pwm1_cmpa>5999){
Value_pwm1_cmpa = 0;
}
EPwm1Regs.CMPA.half.CMPA = Value_pwm1_cmpa;
}
}
作者:昊芯 https://www.bilibili.com/read/cv13773237?spm_id_from=333.999.0.0 出处:bilibili |