基于STM32F103RCT6的户用储能MPPT控制器方案分享
主控平台:STM32F103RCT6 逆变拓扑:BUCK-BOOST 功能:高效率MPPT控制器;支持给200V电池充电;485通讯,在线升级; 描述:本方案适用于户用储能系统,提供完善的通讯协议适配BMS和上位机 本方案可实现高效率的MPPT控制,给高压电池组供电;提供过流、过压、短路、过温等全方位的保护

最近在研究户用储能系统相关的东西,今天就来和大家聊聊基于STM32F103RCT6主控平台打造的高效率MPPT控制器方案,这方案还能支持给200V电池充电,同时具备485通讯与在线升级功能,可太实用啦。
主控平台 STM32F103RCT6
STM32F103RCT6 作为主控平台,是很多工程师的心头好。它基于 ARM Cortex - M3 内核,具备丰富的外设资源,像定时器、ADC 等,这对于我们实现MPPT控制以及各种保护功能提供了硬件基础。比如在采集电池电压、电流等数据时,就可以利用它的ADC外设来精准获取。
// 简单初始化ADC代码示例
void ADC_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能ADC1和相关GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置PA1为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC1复位
ADC_DeInit(ADC1);
// ADC1工作模式配置
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
}
在这段代码里,我们先使能了ADC1和对应的GPIO时钟,然后将PA1配置为模拟输入,用于采集外部信号。接着对ADC1进行复位和模式配置,最后使能ADC1,这样就可以准备采集数据啦。
逆变拓扑 BUCK - BOOST
逆变拓扑采用的是BUCK - BOOST,这个拓扑结构的优势在于它能够灵活地实现升降压功能,对于给200V的高压电池组充电非常适用。在不同的输入电压情况下,它都能调整输出电压,确保电池可以高效充电。
功能亮点
高效率MPPT控制
MPPT(最大功率点跟踪)控制是这个方案的核心。通过不断检测光伏板的电压和电流,实时调整电路的工作状态,使得光伏板始终工作在最大功率点附近,提高能源利用率。
// 简单的MPPT算法代码示意
void MPPT_Control(void)
{
static float last_power = 0;
static float step = 0.1;
float current_power;
float voltage = get_adc_voltage(); // 获取采集的电压值
float current = get_adc_current(); // 获取采集的电流值
current_power = voltage * current;
if (current_power > last_power)
{
// 功率增加,继续朝当前方向调整
step = 0.1;
}
else
{
// 功率减小,反向调整
step = -0.1;
}
adjust_duty_cycle(step); // 根据调整步长改变PWM占空比
last_power = current_power;
}
在这段代码里,我们先获取当前光伏板的电压和电流值来计算功率。然后与上一次的功率值比较,如果功率增加,就继续按照当前方向以一定步长调整PWM占空比;如果功率减小,就反向调整。这样就能动态跟踪最大功率点。
支持200V电池充电
这个方案专门针对200V电池组做了优化,通过前面提到的逆变拓扑和精准的控制算法,确保电池充电过程的高效与安全。
485通讯与在线升级
485通讯功能方便了与BMS(电池管理系统)以及上位机进行数据交互。可以实时上传电池状态、MPPT工作情况等信息,也能接收上位机的控制指令。
// 简单的485发送数据代码示例
void RS485_SendData(uint8_t *data, uint16_t len)
{
USART_InitTypeDef USART_InitStructure;
// 使能USART1和相关GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置PA9为复用推挽输出(TX)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置USART1
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
// 使能USART1
USART_Cmd(USART1, ENABLE);
for (uint16_t i = 0; i < len; i++)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1, data[i]);
}
}
在这段代码里,我们先使能相关时钟,配置GPIO用于串口通信,接着设置USART1的波特率、数据位等参数,最后通过循环发送数据。

主控平台:STM32F103RCT6 逆变拓扑:BUCK-BOOST 功能:高效率MPPT控制器;支持给200V电池充电;485通讯,在线升级; 描述:本方案适用于户用储能系统,提供完善的通讯协议适配BMS和上位机 本方案可实现高效率的MPPT控制,给高压电池组供电;提供过流、过压、短路、过温等全方位的保护

在线升级功能更是方便了后期维护与功能更新,不用再把设备拆下来进行烧录,直接通过485通讯就可以更新程序,大大提高了维护效率。
全方位保护
本方案还提供了过流、过压、短路、过温等全方位的保护。比如过流保护,当检测到电流超过设定阈值时,就立即采取措施切断电路或者调整输出,防止设备损坏。
// 过流保护代码示意
void OverCurrent_Protection(void)
{
float current = get_adc_current();
if (current > OVER_CURRENT_THRESHOLD)
{
// 切断输出或者调整PWM占空比限制电流
disable_output();
// 或者 adjust_duty_cycle(-0.5);
}
}
这段代码就是简单地获取当前电流值,与设定的过流阈值比较,如果超过阈值就执行相应的保护动作。

总之,这个基于STM32F103RCT6的户用储能MPPT控制器方案,功能全面,对于户用储能系统的开发有着很好的参考价值,希望能给大家带来一些启发。


更多推荐
所有评论(0)