21ic问答首页 - 各位大神,一个IO口如何检测充电芯片的各种状态
各位大神,一个IO口如何检测充电芯片的各种状态 赏100家园币
215626443222020-12-23
本帖最后由 21562644322 于 2020-12-23 19:10 编辑
如图,一个单片机IO口(可内部上下拉)检测4056的CHRG信号(充电时低,常态及充满为高阻态),需要做唤醒、判断插入充电、判断充满、判断拔出,如何实现,求解
如图,一个单片机IO口(可内部上下拉)检测4056的CHRG信号(充电时低,常态及充满为高阻态),需要做唤醒、判断插入充电、判断充满、判断拔出,如何实现,求解
赞0
评论
2021-04-17
赞0
评论
2021-01-13
赞0
各位,我用内部上下拉浮空实时切换得到3种电平组合判断充电状态,试了下,效果可以暂时没发现什么问题,请大家评审看看
void ChrgPortScan(void)//10ms一次
{
static uchar Seq = 0;
static uchar Cnt_Chrg = 0;
static uchar Cnt_Full = 0;
static uchar Cnt_Null = 0;
PHB2 = 0;//内部上拉
PDB2 = 1;
DelayUs2x(50);
**.RegUp = S_CHRG;
PHB2 = 1;//内部浮空
PDB2 = 1;
DelayUs2x(50);
**.RegFl = S_CHRG;
PHB2 = 1;//内部下拉
PDB2 = 0;
DelayUs2x(50);
**.RegDn = S_CHRG;
if((**.RegUp==0)&&(**.RegDn==0)&&**.RegFl==0))//充电
{
Cnt_Full = 0;
Cnt_Null = 0;
Cnt_Chrg++;
if(Cnt_Chrg>=2)
{
Cnt_Chrg = 0;
Stat_Chrg = STAT_CHRG;
En.LED_Flk = 1;
MotoSpeed=0;
MOTO_PWM = 0;
En.Led1 = 0;
En.Led2 = 0;
En.Led3 = 0;
}
}
else if((**.RegUp==1)&&(**.RegDn==0)&&(**.RegFl==1))//充满
{
Cnt_Chrg = 0;
Cnt_Null = 0;
Cnt_Full++;
if(Cnt_Full>=3)
{
Cnt_Full = 0;
Stat_Chrg = STAT_FULL;
En.LED_Flk = 0;
RemTime_LED_Flk = 10;
En.Led4 = 1;
En.Led1 = 0;
En.Led2 = 0;
En.Led3 = 0;
MotoSpeed=0;
MOTO_PWM = 0;
}
}
else if((**.RegUp==1)&&(**.RegDn==0)&&(**.RegFl==0))//拔掉
{
Cnt_Chrg = 0;
Cnt_Full = 0;
Cnt_Null++;
if(Cnt_Null>=3)
{
Cnt_Null = 0;
Stat_Chrg = STAT_NULL;
ClrLED();
}
}
// else {Stat_Chrg = STAT_NULL;ClrLED();}
}
评论
2020-12-25
赞0
用MCU的ADC通道读取电压值进行判断,设置R1=R2,R1上面串联个二极管到3.3V,则可根据采样的电压为0V,1.5V左右,2.5V左右,对应插入充电中,拔出,插入且充满
评论
2020-12-24
赞0
评论
2020-12-24
赞0
IO接1脚上拉1M到+5V
若先下拉输入为0,且浮空输入为1,则为已插入并充满状态。
若浮空输入为0时,设置上拉若输入为1:没插入,若还是0:在充电
刚插入或刚拔出,可以根据以上状态变化得出
评论
2020-12-24
您需要登录后才可以回复 登录 | 注册