光伏逆变器总控板,TMS320F28335,2路CAN通讯,2路485通讯,1个EEROM,2...
光伏逆变器总控板,TMS320F28335,2路CAN通讯,2路485通讯,1个EEROM,2路AD采样电路。 主要功能为采样光伏电池电压,MPPT最大功率跟踪,功率计算,系统开关机等。 并且有对应的元器件明细表。 提供程序代码。 特产适合做此类项目的工程师参考,或者新手作为模板参考。 备注:公司成熟产品,提供代码!

光伏逆变器主控开发实战中,TMS320F28335确实是个狠角色。这枚28335芯片把浮点运算单元和PWM资源整合得明明白白,今天咱们就拆解一套正在商用的光伏控制方案。先看硬件架构:主控板挂着两路CAN做设备组网,两路485接智能电表,AD采样直接怼着光伏板电压电流开撸,EEPROM存着系统参数随时待命。

上电初始化代码里藏着玄机,SysCtrlRegs里头CLKCONFIG寄存器直接锁频到150MHz。老司机都懂,ADC模块必须抢在DSP启动前校准:
void InitAdc(void)
{
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // 唤醒模拟电路
DELAY_US(1000); // 必须的延时
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // 开启ADC电源
AdcRegs.ADCCTL1.bit.ADCCALON = 1; // 自动校准模式
while(AdcRegs.ADCCTL1.bit.ADCCALON != 0); // 等校准完成
}
校准不彻底,采样全白给。光伏板电压采样电路里藏着TVS管和RC滤波,程序里得做滑动滤波:
#define SAMPLE_WINDOW 16
volatile Uint16 adc_raw[SAMPLE_WINDOW];
float GetPVVoltage(void)
{
static int index = 0;
adc_raw[index] = AdcResult.ADCRESULT0; // 从结果寄存器抓数
index = (index+1)%SAMPLE_WINDOW;
Uint32 sum = 0;
for(int i=0; i<SAMPLE_WINDOW; i++) sum += adc_raw[i];
return (sum * 3.0 * 3.3)/4096.0/SAMPLE_WINDOW; // 硬件分压比3:1
}
MPPT算法才是灵魂。这套方案用扰动观察法,但加了风速预测因子。看这个核心判断逻辑:
float duty_step = 0.005; // 占空比步进量
void MPPT_Handler(float current_power)
{
static float last_power = 0;
static int direction = 1; // 1表示增加占空比
if(current_power > last_power + 0.5) {
// 功率上升保持方向
EPwm1Regs.CMPA.half.CMPA += direction ? duty_step : -duty_step;
} else {
direction ^= 1; // 反转调节方向
duty_step *= 0.8; // 接近峰值时减小步长
}
last_power = current_power;
}
CAN通讯用到了DMA加速,配置Mailbox时要注意验收滤波器的设置:
void CAN_Init(void)
{
ECanaRegs.CANMC.bit.SCB = 1; // 进配置模式
ECanaRegs.CANBTC.bit.BRP = 9; // 波特率500k计算值
ECanaRegs.CANMC.bit.ABO = 1; // 自动恢复总线关闭
// 配置接收邮箱
ECanaMboxes.MBOX0.MSGID.all = 0x18FF50F0; // 扩展帧ID
ECanaMboxes.MBOX0.MSGID.bit.IDE = 1;
ECanaMboxes.MBOX0.MSGID.bit.AME = 1; // 开启验收过滤
}
元器件表里有个骚操作——RS485芯片用SN65HVD3082E,这货在光伏现场抗干扰比MAX3485强两档。EEPROM选的是AT24C512,存储结构体时记得四字节对齐:
#pragma DATA_SECTION(sys_params,"EEPROMSection");
#pragma DATA_ALIGN(sys_params, 4); // 对齐到四字节
SystemParams sys_params = {
.mppt_mode = 1,
.max_voltage = 800.0,
.serial_num = {0},
};
这套代码最骚的是看门狗喂狗策略——正常运行时1秒喂一次,但进入故障状态后改由独立硬件看门狗芯片接管。源码包里的wdog.c文件实现了状态机喂狗机制,有效防止软件死循环导致的喂狗失效。

(需要完整BOM清单和工程源码的老铁,直接到公众号"光伏嵌入式"后台回复"28335方案"获取。商用级代码,寄存器配置都带着现场踩坑注释)
更多推荐


所有评论(0)