基于DSP28335的单相逆变整套程序:功能齐全包含ADC采样、PWM控制模块配置、液晶显示及...
这个基于DSP28335的单相逆变项目涵盖了ADC采样、PWM控制、液晶显示、单相锁相环和电路保护等多个模块。代码虽然不算复杂,但功能齐全,适合初学者学习和参考。如果你也在做类似的项目,希望这些代码能帮到你。基于dsp28335的单相逆变整套DSP28335,程序功能齐全包含adc采样模块,pwm控制模块配置,液晶显示单相锁相环电路保护程序等。
基于dsp28335的单相逆变整套DSP28335,程序功能齐全包含adc采样模块,pwm控制模块配置,液晶显示单相锁相环电路保护程序等

最近在搞一个基于DSP28335的单相逆变项目,感觉挺有意思的,分享一下我的思路和代码。这个项目功能比较全,包含了ADC采样、PWM控制、液晶显示、单相锁相环以及电路保护等模块。下面我会逐一拆解,顺便贴点代码,方便大家理解。
ADC采样模块
首先,ADC采样是逆变器的基础,毕竟你得知道输入电压和电流才能做后续的控制。DSP28335的ADC模块用起来还算顺手,配置起来也不复杂。下面是一个简单的ADC初始化代码:
void InitAdc(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // 使能ADC时钟
EDIS;
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF; // 采样窗口时间
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x3; // ADC时钟分频
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 级联模式
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // 连续运行模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV = 0x1; // 最大转换通道数
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 选择通道0
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // 启动SEQ1
}
这段代码主要配置了ADC的时钟、采样窗口、分频等参数。ADCMAXCONV设置了最大转换通道数,这里只用了通道0。SOC_SEQ1启动SEQ1,开始采样。
PWM控制模块
PWM控制是逆变器的核心,DSP28335的PWM模块功能强大,配置起来稍微复杂一点。下面是一个PWM初始化的代码片段:
void InitPwm(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止TBCLK
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // 启动TBCLK
EDIS;
EPwm1Regs.TBPRD = 1000; // 设置PWM周期
EPwm1Regs.TBPHS.bit.TBPHS = 0; // 相位寄存器清零
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 增计数模式
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 禁止相位加载
EPwm1Regs.TBCTL.bit.PRDLD = 1; // 立即加载周期寄存器
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0; // 同步输出选择
EPwm1Regs.CMPA.bit.CMPA = 500; // 设置比较寄存器A
EPwm1Regs.AQCTLA.bit.CAU = 2; // 比较匹配时置高
EPwm1Regs.AQCTLA.bit.CAD = 1; // 比较匹配时置低
}
这段代码配置了PWM的周期、相位、计数模式等。TBPRD设置了PWM的周期,CMPA设置了比较寄存器的值,AQCTLA配置了比较匹配时的动作。
液晶显示模块
液晶显示模块用来实时显示电压、电流等信息。这里我用的是1602液晶屏,驱动代码比较简单:
void LcdDisplay(float voltage, float current)
{
char buffer[16];
sprintf(buffer, "V: %.2f I: %.2f", voltage, current);
Lcd_SetCursor(0, 0);
Lcd_Print(buffer);
}
这个函数将电压和电流格式化为字符串,然后显示在液晶屏上。sprintf用来格式化字符串,LcdSetCursor设置光标位置,LcdPrint输出字符串。
单相锁相环
单相锁相环(PLL)用来同步电网电压的频率和相位。DSP28335的PLL模块配置如下:
void InitPll(void)
{
EALLOW;
SysCtrlRegs.PLLCR.bit.DIV = 10; // 设置PLL分频
EDIS;
while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1); // 等待PLL锁定
}
这段代码配置了PLL的分频,并等待PLL锁定。PLLCR设置了分频值,PLLSTS用来检查PLL是否锁定。
电路保护程序
电路保护是逆变器安全运行的关键。这里我实现了一个简单的过流保护:
void OverCurrentProtection(float current)
{
if(current > MAX_CURRENT)
{
EPwm1Regs.TBCTL.bit.CTRMODE = 3; // 停止PWM
Lcd_SetCursor(1, 0);
Lcd_Print("Over Current!");
}
}
这个函数检测电流是否超过最大值,如果超过则停止PWM输出,并在液晶屏上显示“Over Current!”。
总结
这个基于DSP28335的单相逆变项目涵盖了ADC采样、PWM控制、液晶显示、单相锁相环和电路保护等多个模块。代码虽然不算复杂,但功能齐全,适合初学者学习和参考。如果你也在做类似的项目,希望这些代码能帮到你。

基于dsp28335的单相逆变整套DSP28335,程序功能齐全包含adc采样模块,pwm控制模块配置,液晶显示单相锁相环电路保护程序等
更多推荐
所有评论(0)