1、CC2530和STM32嵌入式接口技术开发5.9 STM32充电桩管理系统设计与实现EducationSolutions目录ContentsInternet+硬件设计软件设计功能实现17:28/3项目场景使用ADC功能对车辆电池电压进行采集,通过LED灯来显示车辆充电电量,通过继电器控制充电开关,当处于充电状态时RGB灯循环闪烁,按键K1用于控制充电开关,按下K2可以查询当前电池电量。查询信息通过串口向上位机打印,上位机打印操作状态信息。充电桩如下图所示:17:28/4硬件设计通过分析项目需求可知充电桩管理系统所使用的硬件有LED灯、RGB灯、继电器、按键和电池电压采集。17:28/5硬件设计
2、按键与LED原理图17:28/6硬件设计ADC采集原理图17:28/7继电器与RGB灯原理图17:28/8软件设计需求分析 对车辆电池电量进行采集并使用LED灯显示电量。继电器作为充电桩充电开关受K1操作的控制,充电状态通过RGB灯显示。可以通过操作按键K2实现对电池电量的查询。17:28/9功能逻辑分解17:28/10驱动层软件设计驱动层软件设计主要是对系统相关的硬件外设与和驱动进行编辑。驱动层编辑的对象有按键、LED灯、继电器、ADC模数转换、串口等。17:28/11系统初始化事件模块void system_init(void)NVIC_PriorityGroupConfig(NVIC_P
3、riorityGroup_2);/设置系统中断优先级分组 2delay_init(168);/延时初始化timer_init();/系统时钟初始化usart_init(115200);/串口初始化relay_init();/继电器初始画led_init();/LED 初始化AdcInit();/ADC初始化printf(rn这是一个充电桩项目案例rn);printf(场景:充电桩通过LED灯显示当前充电车辆电池电压,充电桩可以开启和关闭充电,可以查询电池电压!rn);printf(功能:系统ADC检测电池电压,LED1LED4表示电池电量,电量每5S检测一次并打印。rn);printf(按键K
4、1作为充电按钮,RGB灯闪烁显示正在充电,继电器1作为充电控制阀。rn);printf(按键K2作为查询按钮,按动一次,系统查询一次电量。rn);17:28/12充电操作模块void charging_Operation(void)static uint8_t charge_flag=0;/定义充电标志位static uint8_t last_state=0;/定义上一次充电标志位状态if(key1_semaphore)/如果按键KEY1动作charge_flag=1;/充电标志位取反key1_semaphore-;/充电标志位信号量减一if(charge_flag)chargeIndicat
5、or(CHARGE_ON);/如果充电标志位有效开启充电指示灯else chargeIndicator(CHARGE_OFF);/否则关闭充电指示灯等17:28/13充电操作模块if(charge_flag!=last_state)/如果充电标志位状态发生变化if(charge_flag)/如果充电标志位有效chargeSwitch(CHARGE_STAR);/开始充电printf(Start charging!rn);/打印开始充电信息elsechargeSwitch(CHARGE_STOP);/停止充电printf(End the charge!rn);/打印停止充电信息last_stat
6、e=charge_flag;/存储当前标志位信息 17:28/14电量查询模块void electricityQuert_Operation(void)if(key2_semaphore)/如果按键信号量不为零eventFlagStructure.VoltDete_flag=1;/电量检测操作标志位置一key2_semaphore-;/信号量减一 17:28/15电量采集模块void voltageDetection_Operation(void)char buf128;/定义数据缓存Voltage=AdcGet(1)*0.003;/获取电池电压信息Percentage=Voltage*8;/
7、获取电量百分比信息 /编辑电量信息sprintf(buf,The battery electric quantity is%2.2f%!rn,Percentage);usart_send(unsigned char*)buf,strlen(buf);/发送电量信息if(Percentage 98)/如果电量大于98%chargeSwitch(CHARGE_STOP);/关闭充电printf(Complete the charge!rn);/打印充电完成信息voltageIndication();/电量指示灯指示电量17:28/16项目思考一个综合项目可以被分解为哪几个层次?软件的设计层次之间是什么关系?软件设计中为何要在关机功能的代码中设计按键的中断配置?系统的事件调度是如何实现的?