编写一个基于DSP28335的DC/DC控制程序
时间: 2024-01-24 17:05:29 浏览: 99
DC/DC控制程序的编写需要考虑多个方面,如控制算法、硬件接口、参数调整等。以下是一个简单的基于DSP28335的DC/DC控制程序示例,仅供参考:
1. 硬件接口
首先需要确定硬件接口,包括电源输入输出的连接方式、控制信号输入输出的连接方式等。假设DC/DC控制器的输入电压为24V,输出电压为12V,控制信号使用PWM方式输出到GPIO0引脚。
2. 控制算法
DC/DC控制算法有多种,常见的包括PID控制、模糊控制、神经网络控制等。在这里我们使用PID控制算法。
3. 参数设置
PID控制算法需要设置三个参数:比例系数Kp、积分系数Ki、微分系数Kd。这些参数的设置需要根据具体的系统要求进行调整。在这里我们先设定Kp=0.5,Ki=0.1,Kd=0.2。
4. 控制程序
基于以上准备工作,我们可以编写DC/DC控制程序。以下是一个简单的示例程序:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define PWM_PERIOD 3750
#define PWM_DUTY_CYCLE 1875
float voltage_ref = 12.0;
float voltage_fb = 0.0;
float voltage_err = 0.0;
float voltage_int = 0.0;
float voltage_diff = 0.0;
float voltage_out = 0.0;
float Kp = 0.5;
float Ki = 0.1;
float Kd = 0.2;
void main(void)
{
InitSysCtrl();
InitPieCtrl();
InitPieVectTable();
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
EDIS;
EPwm1Regs.TBPRD = PWM_PERIOD;
EPwm1Regs.TBCTL.bit.CTRMODE = 0x00;
EPwm1Regs.AQCTLA.bit.ZRO = 0x02;
EPwm1Regs.CMPA.half.CMPA = PWM_DUTY_CYCLE;
while (1)
{
voltage_fb = AdcConversion();
voltage_err = voltage_ref - voltage_fb;
voltage_int += voltage_err;
voltage_diff = voltage_err - voltage_diff;
voltage_out = Kp*voltage_err + Ki*voltage_int + Kd*voltage_diff;
if (voltage_out < 0.0) voltage_out = 0.0;
if (voltage_out > 24.0) voltage_out = 24.0;
EPwm1Regs.CMPA.half.CMPA = PWM_PERIOD * voltage_out / 24.0;
}
}
float AdcConversion(void)
{
float voltage = 0.0;
Uint16 adc_value = 0;
AdcRegs.ADCTRL2.bit.SOCSEQ1 = 0;
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;
while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);
adc_value = AdcResult.ADCRESULT0;
voltage = adc_value * 3.0 / 4096.0;
return voltage;
}
```
以上程序中,我们使用EPwm1模块来控制输出,输入电压通过ADC模块读取。控制算法使用PID控制,并且在每次循环中更新输出PWM占空比。需要注意的是,由于PWM输出的最大占空比为1,因此需要将输出电压映射到0-24V范围内。
以上示例程序仅供参考,实际的DC/DC控制程序需要根据具体的系统要求进行详细设计和调试。
阅读全文