半桥变换器DSP代码
时间: 2023-07-03 08:26:51 浏览: 175
以下是一个基于TMS320F28377D的半桥变换器的DSP代码:
```c
//定义半桥开关控制引脚
#define SW1 GPIO8
#define SW2 GPIO9
#define SW3 GPIO10
#define SW4 GPIO11
//定义PWM引脚
#define PWM1 GPIO0
#define PWM2 GPIO1
//定义ADC采样引脚
#define ADC1 GPIO2
#define ADC2 GPIO3
//定义adc值
Uint16 adc1, adc2;
void main(void)
{
//初始化GPIO
InitGpio();
//初始化PWM模块
InitEPwm();
//初始化ADC模块
InitAdc();
//开启全局中断
EINT;
while(1)
{
//读取ADC采样值
adc1 = AdcConversion(ADC1);
adc2 = AdcConversion(ADC2);
//根据ADC采样值控制半桥开关
if(adc1 > adc2)
{
//SW1和SW4闭合,SW2和SW3断开
GpioDataRegs.GPASET.bit.SW1 = 1;
GpioDataRegs.GPASET.bit.SW4 = 1;
GpioDataRegs.GPACLEAR.bit.SW2 = 1;
GpioDataRegs.GPACLEAR.bit.SW3 = 1;
}
else
{
//SW2和SW3闭合,SW1和SW4断开
GpioDataRegs.GPASET.bit.SW2 = 1;
GpioDataRegs.GPASET.bit.SW3 = 1;
GpioDataRegs.GPACLEAR.bit.SW1 = 1;
GpioDataRegs.GPACLEAR.bit.SW4 = 1;
}
}
}
void InitGpio(void)
{
//初始化半桥开关控制引脚
GpioCtrlRegs.GPAMUX1.bit.SW1 = 0;
GpioCtrlRegs.GPAMUX1.bit.SW2 = 0;
GpioCtrlRegs.GPAMUX1.bit.SW3 = 0;
GpioCtrlRegs.GPAMUX1.bit.SW4 = 0;
GpioCtrlRegs.GPADIR.bit.SW1 = 1;
GpioCtrlRegs.GPADIR.bit.SW2 = 1;
GpioCtrlRegs.GPADIR.bit.SW3 = 1;
GpioCtrlRegs.GPADIR.bit.SW4 = 1;
//初始化PWM引脚
GpioCtrlRegs.GPAMUX1.bit.PWM1 = 1;
GpioCtrlRegs.GPAMUX1.bit.PWM2 = 1;
GpioCtrlRegs.GPADIR.bit.PWM1 = 1;
GpioCtrlRegs.GPADIR.bit.PWM2 = 1;
//初始化ADC采样引脚
GpioCtrlRegs.GPAMUX1.bit.ADC1 = 0;
GpioCtrlRegs.GPAMUX1.bit.ADC2 = 0;
GpioCtrlRegs.GPADIR.bit.ADC1 = 0;
GpioCtrlRegs.GPADIR.bit.ADC2 = 0;
}
void InitEPwm(void)
{
//设置PWM时钟频率
EPwm1Regs.TBPRD = 1000;
//设置PWM输出模式
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm1Regs.AQCTLA.bit.CAD = 1;
EPwm2Regs.AQCTLA.bit.CAU = 2;
EPwm2Regs.AQCTLA.bit.CAD = 1;
//使能PWM模块
EPwm1Regs.TBCTL.bit.CTRMODE = 0x00;
EPwm2Regs.TBCTL.bit.CTRMODE = 0x00;
}
void InitAdc(void)
{
//初始化ADC模块
AdcRegs.ADCTRL1.bit.RESET = 0;
AdcRegs.ADCTRL1.bit.SUSMOD = 0;
AdcRegs.ADCTRL1.bit.ACQ_PS = 0;
AdcRegs.ADCTRL1.bit.CPS = 0;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;
//配置ADC采样参数
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 14;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 14;
//使能ADC模块
AdcRegs.ADCTRL1.bit.ADCEN = 1;
}
Uint16 AdcConversion(Uint16 channel)
{
//配置ADC采样通道
AdcRegs.ADCSOCFRC1.bit.SOC0 = 1;
AdcRegs.ADCSOCFRC1.bit.SOC1 = 1;
//等待ADC采样结束
while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0) {}
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
//返回ADC采样值
if(channel == ADC1)
{
return AdcRegs.ADCRESULT0;
}
else if(channel == ADC2)
{
return AdcRegs.ADCRESULT1;
}
else
{
return 0;
}
}
```
请注意,上述代码仅供参考,实际使用时需要根据具体的硬件配置和需求进行修改。
阅读全文
相关推荐


















