#include "powermanage.h"
|
#include "stm32f10x.h"
|
#include "adc.h"
|
|
|
/*ÍⲿÄÚ²¿µçÔ´io³õʼ»¯*/
|
void power_io_dec_init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure);
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_QUANTITY_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈë
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(POWER_ELECTRIC_QUANTITY_PIN_GROUP, &GPIO_InitStructure);
|
|
}
|
|
/*ÍⲿÄÚ²¿µçÔ´lowpower*/
|
void power_io_dec_lower_power_init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure);
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_QUANTITY_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈë
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(POWER_ELECTRIC_QUANTITY_PIN_GROUP, &GPIO_InitStructure);
|
|
}
|
|
|
/*µÍѹ±¨¾¯io*/
|
void undervol_io_power_init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure);
|
|
//
|
|
|
}
|
|
|
/*µÍѹ±¨¾¯io*/
|
void lowvol_io_power_init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure);
|
|
/**/
|
|
|
}
|
|
/*µÍѹ±¨¾¯io*/
|
void undervol_io_power_deinit(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure);
|
|
//
|
|
|
}
|
|
|
/*µÍѹ±¨¾¯io*/
|
void lowvol_io_power_deinit(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM; //amp
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
|
GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure);
|
|
/**/
|
|
|
}
|
|
|
|
|
/*Êä³öÂö³å*/
|
void undervol_io_power(void)
|
{
|
/**/
|
|
undervol_io_power_init();
|
UNDERVOL_SIGNL_HIGH
|
delay_ms(500);
|
UNDERVOL_SIGNL_LOW
|
undervol_io_power_deinit();
|
|
}
|
|
/*Êä³öÂö³å*/
|
void lowvol_io_power(void)
|
{
|
/**/
|
lowvol_io_power_init();
|
LOWVOL_SIGNL_HIGH
|
delay_ms(500);
|
LOWVOL_SIGNL_LOW
|
lowvol_io_power_deinit();
|
}
|
|
|
|
|
|
/*¶ÁÈ¡µçÔ´io ״̬*/
|
u8 power_io_get(void)
|
{
|
u32 status;
|
|
|
status = GPIOC->IDR & (1 << 2);
|
status = status >> 2;
|
|
//return POWER_BAT;
|
|
if( HIGH == status )
|
{
|
return POWER_EXTERN;
|
}else
|
{
|
return POWER_BAT;
|
}
|
|
|
}
|
|
|
|
#define AD_REF_VOL 3000
|
#define AD_BAT_CH 13
|
#define AD_CNT 10
|
|
|
|
|
/*¶ÁÈ¡µç³Øµçѹ*/
|
|
float get_bat_voltage(void)
|
{
|
uint32 volt_ret;
|
float sample_vol;
|
float battery_vol;
|
ad_data_s data_ins;
|
|
data_ins.ad_buffer_cnt = AD_CNT; //·¢ÏÖÓиöÎÊÌâ AD²ÉÑùͨµÀת»¯µÄʱºò£¬µ¼ÖÂAD²É¼¯µÄÊýÖµ ³öÏÖÉÏÒ»¸öͨµÀµÄÊý¡£ÓÐʱºòÊǺóÃæµÄÊý³öÏÖ¸ÅÂʺܴó
|
data_ins.ad_ch = AD_BAT_CH;
|
data_ins.ad_get_address_p = ad_data;
|
|
volt_ret = Get_vol_Average(&data_ins);//10 - channel 3300 - 3.3v vref
|
if(volt_ret > 4096)
|
{
|
return 0;
|
}
|
else
|
{
|
sample_vol = (float)(volt_ret * AD_REF_VOL)/4096;
|
battery_vol = sample_vol * 5;
|
|
}
|
return battery_vol;
|
}
|