基于ARM的BUCK-BOOST拓扑双向DC-DC电源变换器 数字控制STM32双向升降压变换器 该系统是基于ARM的buck-boost拓扑双向DC-DC电源变换器设计,本系统主要包括STM32F334、BUCK-BOOST电路、辅助电源、驱动电路、信号调理电路等,输入的电源经过一系列变换进行输出,为负载或电池供电。 该系统的主控制器是STM32F334高性能 ARM处理器,该处理器产生 PWM,由驱动器驱动 MOS管,由信号调节器和 ADC分别对其进行输入和输出采集,并对其进行运算,从而实现稳压输出。 该系统由一系列的转换,生成12 V和3.3 V电压为驱动电路、信号调理电路、主控电路、显示电路供电,OLED 屏显示出当前的参数信息和状态信息。 全套详细资料,测试视频,板子已出,#单片机设计

最近在研究一个基于ARM的BUCK-BOOST拓扑双向DC-DC电源变换器,感觉挺有意思的,尤其是用STM32F334作为主控制器,整个系统设计得相当巧妙。今天就来聊聊这个设计,顺便穿插一些代码分析,看看它是如何实现双向电压变换的。

首先,这个系统的核心是BUCK-BOOST电路,它能够实现升压和降压的双向转换。输入电源经过这个电路处理后,可以为负载或电池供电。STM32F334作为主控制器,负责产生PWM信号,通过驱动器驱动MOS管,再通过信号调理电路和ADC进行输入输出的采集和运算,最终实现稳压输出。

这里的关键是PWM信号的生成和调节。STM32F334的定时器模块可以很方便地生成PWM信号,下面是一个简单的代码示例,展示如何配置定时器来生成PWM信号:

void PWM_Init(void) {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;

    // 使能定时器时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    // 配置定时器基础设置
    TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装载值
    TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频器
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    // 配置PWM模式
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 500; // 占空比50%
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);

    // 使能定时器
    TIM_Cmd(TIM3, ENABLE);
}

这段代码配置了TIM3定时器,生成了一个占空比为50%的PWM信号。通过调整TIM_Pulse的值,可以改变PWM信号的占空比,从而调节输出电压。

基于ARM的BUCK-BOOST拓扑双向DC-DC电源变换器 数字控制STM32双向升降压变换器 该系统是基于ARM的buck-boost拓扑双向DC-DC电源变换器设计,本系统主要包括STM32F334、BUCK-BOOST电路、辅助电源、驱动电路、信号调理电路等,输入的电源经过一系列变换进行输出,为负载或电池供电。 该系统的主控制器是STM32F334高性能 ARM处理器,该处理器产生 PWM,由驱动器驱动 MOS管,由信号调节器和 ADC分别对其进行输入和输出采集,并对其进行运算,从而实现稳压输出。 该系统由一系列的转换,生成12 V和3.3 V电压为驱动电路、信号调理电路、主控电路、显示电路供电,OLED 屏显示出当前的参数信息和状态信息。 全套详细资料,测试视频,板子已出,#单片机设计

接下来是ADC的配置,用于采集输入和输出电压。STM32F334的ADC模块精度高,速度快,非常适合这种应用。下面是一个简单的ADC初始化代码:

void ADC_Init(void) {
    ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIO和ADC时钟
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    // 配置ADC引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置ADC
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
    ADC_Init(ADC1, &ADC_InitStructure);

    // 使能ADC
    ADC_Cmd(ADC1, ENABLE);
}

这段代码配置了ADC1,使其能够连续采集GPIOA的0号引脚上的电压值。通过读取ADC的数据寄存器,可以获取当前的电压值,用于后续的稳压控制。

最后,系统还通过OLED屏显示当前的参数信息和状态信息。STM32F334的I2C接口可以很方便地驱动OLED屏,下面是一个简单的I2C初始化代码:

void I2C_Init(void) {
    I2C_InitTypeDef I2C_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIO和I2C时钟
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

    // 配置I2C引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 配置I2C
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x00;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 100000;
    I2C_Init(I2C1, &I2C_InitStructure);

    // 使能I2C
    I2C_Cmd(I2C1, ENABLE);
}

这段代码配置了I2C1,使其能够通过GPIOB的6号和7号引脚与OLED屏通信。通过I2C发送数据,可以在OLED屏上显示当前的电压、电流等参数。

总的来说,这个基于ARM的BUCK-BOOST拓扑双向DC-DC电源变换器设计得非常巧妙,通过STM32F334的PWM、ADC和I2C模块,实现了高效、稳定的电压变换和参数显示。如果你对这方面感兴趣,不妨试试自己动手实现一下,相信会有不少收获。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐