本帖最后由 秦天qintian0303 于 2022-3-22 21:44 编辑
号外(相关文章):
【GD32L233C-START评测】02 上电及程序下载调试
【GD32L233C-START评测】03 LED操作和普通定时功能
【GD32L233C-START评测】04 外部中断与定时器PWM
【GD32L233C-START评测】05 串口体验和不定长数据接收
【GD32L233C-START评测】06 制作GD32L233C扩展板
【GD32L233C-START评测】07 测试成品+SPI驱动TFT
【GD32L233C-START评测】08 IIC通信体验获取传感器数据
前言
目前对于涉及常用的功能基本上已经体验一遍了,只差ADC采集,结合扩展板的资源,这一次利用ADC采集电源电压结合各处供电状态,完成开关机及电量显示,完成系统最基础的一步。
目标
体验ADC采集功能,实现开关机及电量显示。
分析
电量显示功能实现得益于ADC采集电量电压及USB供电状状态采集及充电状态采集,以此将供电状态分为以下几种,USB供电及充电,USB供电单补充点,电池供电等。
接下来就是相应初始化:
第一步:USB输入状态引脚初始化及充电状态初始化;
第二步:ADC采集初始化;
第三步:采集数据并进行逻辑判断;
第四步:界面显示;
ADC配置代码
//******************************************************************************
//* 函数名称 : gd_ADC_init
//* 函数描述 : ADC配置
//* 输入参数 :
//* 参数描述 : ADC初始化配置
//* 输出参数 : 无
//* 返回值 : 无
//******************************************************************************
void gd_ADC_init(void)
{
/* enable GPIOC clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* enable ADC clock */
rcu_periph_clock_enable(RCU_ADC);;
/* config ADC clock CK_APB2/6*/
rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_1);
/* ADC data alignment config */
adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
/* ADC channel length config */
adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);
/* ADC trigger config */
adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
/* ADC external trigger config */
adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
/* enable ADC interface */
adc_enable();
DelaySysTick_ms(1U);
/* ADC calibration and reset calibration */
adc_calibration_enable();
}
电池电量采集及判断代码
//*******************************************************************************
//* 函数名称 : void Collection_SPM(void)
//* 函数描述 : 采集数据
//* 输入参数 :
//* 参数描述 :
//* 输出参数 : 无
//* 返回值 :
//*******************************************************************************
void Collection_SPM(void)
{
if(Power_collect_flag == 1)
{
ADC_Value=Power_get(1);
VOL_Value=(uint16_t)(ADC_Value*110*5/4096+30);
// if(Sign_USB==1)
// {
// Flag_USB = 1;
// }
// else
// {
// Flag_USB = 0;
// }
if(Sign_CHG==1)
{
Flag_CHG = 0;
}
else
{
Flag_CHG = 1;
}
Power_collect_flag = 0;
}
App_Battery_Judge();
}
//*******************************************************************************
//* 函数名称 : void Power_get(void)
//* 函数描述 : 采集数据
//* 输入参数 :
//* 参数描述 :
//* 输出参数 : 无
//* 返回值 :
//*******************************************************************************
uint16_t Power_get(uint8_t channel)
{
/* ADC regular channel config */
adc_regular_channel_config(0U, channel, ADC_SAMPLETIME_7POINT5);
/* ADC software trigger enable */
adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
/* wait the end of conversion flag */
while(!adc_flag_get(ADC_FLAG_EOC));
/* clear the end of conversion flag */
adc_flag_clear(ADC_FLAG_EOC);
/* return regular channel sample value */
return (adc_regular_data_read());
}
//********************************************************************************/
//* 函数名称 : void App_Battery_Judge(void) */
//* 函数描述 : 电池状态判断 */
//* 输入参数 : */
//* 参数描述 : */
//* 输出参数 : 无 */
//* 返回值 : 无 */
//********************************************************************************/
void App_Battery_Judge(void)
{
// if((Flag_USB == 1)&&(Flag_CHG == 1))
// {
// State_Power_cnt = 8;
// }
if((Flag_CHG == 1))
{
State_Power_cnt = 7;
}
else if((Flag_CHG == 0)&&(VOL_Value >= 410))
{
State_Power_cnt = 6;
}
else if((Flag_CHG == 0)&&(VOL_Value >= 400)&&(VOL_Value < 410))
{
State_Power_cnt = 5;
}
else if((Flag_CHG == 0)&&(VOL_Value >= 390)&&(VOL_Value < 400))
{
State_Power_cnt = 4;
}
else if((Flag_CHG == 0)&&(VOL_Value >= 380)&&(VOL_Value < 390))
{
State_Power_cnt = 3;
}
else if((Flag_CHG == 0)&&(VOL_Value >= 370)&&(VOL_Value < 380))
{
State_Power_cnt = 2;
}
else if((Flag_CHG == 0)&&(VOL_Value < 370))
{
State_Power_cnt = 1;
}
if(State_Power_cnt >= 1 && State_Power_cnt <= 6 && SHOW_Powering_cnt == State_Power_cnt-1)
{
State_Power_cnt = SHOW_Powering_cnt;
}
}
其中采集定时在定时其中每2秒采集一次,电池电量的判断不用太频繁,不过USB状态的判断需要及时一点,ADC的转换通过软件启动,根据精度不同等待转换完成的时间不同,这一点要注意。
到这里本开发板的测评也就基本结束了,对于L系列的低功耗方面的测评我还是不舍得破坏它,对于现在大部分的产品要求来说,功能实现还是第一位的,功耗做的是越来越低,同质化非常明显,也希望国内的厂商在产品的品控方面做得越来越好,预祝坛友们一起多多使用,工作顺利!
|