1 材料与简介
本项目旨在设计并实现一个基于STM32微控制器的简易太阳能发电与用电装置。系统通过太阳能电池板将太阳能转换为电能,并通过充电控制器管理电池的充电和放电过程。STM32微控制器作为核心控制单元,实时监测太阳能电池板的输出、电池状态以及负载用电情况,并通过传感器采集电压、电流等数据
电池选型:2000mA 白色空对空接头电池
太阳能板:5V 200mA 1W太阳能电池板
驱动模块:CN3163太阳能LED驱动模块
tip:淘宝都能买到
2 功能原理
2.1 PCB板搭建
通过拨码开关可进行串联输出、并联输出功能的选择
2.2 接线方式
一号检测接口、二号检测接口-------------PB0\PB1\PB2(均可采集)
一号太阳能板、二号太阳能板-------------太阳能板正负极
3 STM32采样检测功能
引脚定义:现在CubeMX中点好
3.1 ADC采样
uint16_t v_value;
float solar1;
float solar2;
__IO uint32_t adcTick;
void adc_process()
{
if(uwTick-adcTick<100) return;
adcTick=uwTick;
HAL_ADC_Start(&hadc1);
v_value = HAL_ADC_GetValue(&hadc1);
solar1=(v_value/4096.0f)*3.3f;
HAL_ADC_Start(&hadc2);
v_value = HAL_ADC_GetValue(&hadc2);
solar2=(v_value/4096.0f)*3.3f;
}
3.2 OLED显示
__IO uint32_t oledTick;
uint8_t str[40];
unsigned char interface=1;
void display_process()
{
if((uwTick - oledTick)<500) return;//减速函数
oledTick = uwTick;
if(interface==1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
sprintf((char *)str,"v_ture1: %4.2f",solar1);
OLED_ShowString(0,0,str,16);//这个是oled驱动里面的,是显示位置的一个函数,
sprintf((char *)str,"voltage1: %4.2fV",solar1*5+0.27);
OLED_ShowString(0,2,str,16);//这个是oled驱动里面的,是显示位置的一个函数,
sprintf((char *)str,"v_ture2: %4.2f",solar2);
OLED_ShowString(0,4,str,16);//这个是oled驱动里面的,是显示位置的一个函数,
sprintf((char *)str,"voltage2: %4.2fV",solar2*5+0.27);
OLED_ShowString(0,6,str,16);//这个是oled驱动里面的,是显示位置的一个函数,
}
}
3.3 按键功能
__IO uint32_t keyTick;
void key_process()
{
if(uwTick - keyTick<100) return;
keyTick = uwTick;
key_read();
if(trg&0x01) //x轴
{
if(++interface==4)
interface=1;
}
if(trg&0x02) //x轴
{
if(++interface==4)
interface=1;
}
if(trg&0x04) //y轴
{
if(++interface==4)
interface=1;
}
if(trg&0x08) //y轴
{
if(++interface==4)
interface=1;
}
if(trg&0x10) //z轴
{
if(++interface==4)
interface=1;
}
if(trg&0x20) //z轴
{
if(++interface==4)
interface=1;
}
}
4 搭建成型(效果展示)
拨动驱动板上的开关可以开关“路灯”(led灯珠)