最近在做单片机用PWM控制3.7V锂电池充电,充电过程是模拟常规充电芯片的,涓流-恒流-恒压,通过采R16采样电阻反馈电流调整PWM,现在恒流阶段做的电流有抖动,预定600mA,会600±25mA一直抖动,需要电流做稳定点,起码±10mA左右以内,贴上原理图和部分代码,求各位高手解答。

/***************充电恒流控制***************///ValFlgAD_Curt/10000/5*4096
void ChrgCCSet(unsigned int ValueADSet_Curt)
{
// ClrChrgCC();
ValFlgAD_Curt = ValueADSet_Curt;
En.ChrgCurtCtrl = 1;
}
void ClrChrgCC(void)
{
En.ChrgCurtCtrl = 0;
}
void ChrgCCRun(void)
{
if(En.ChrgCurtCtrl)
{
RegVal_ADC_R = AvgVal_ADC(ADCH_CURT_R);
RegVal_ADC_F = AvgVal_ADC(ADCH_CURT_F);
if(RegVal_ADC_R > RegVal_ADC_F)
{
RegADC_ChrgCurt = RegVal_ADC_R-RegVal_ADC_F;//R16两端AD差值
if(RegADC_ChrgCurt>(ValFlgAD_Curt+2))//与目标AD差值比较
{
if((DATA_CHRGPWM>0)&&(LastADC_ChrgCurt<RegADC_ChrgCurt))DATA_CHRGPWM--;
}
else if(RegADC_ChrgCurt<(ValFlgAD_Curt))//与目标AD差值比较
{
if((DATA_CHRGPWM< MAXDATA_CHRGPWM)&&(LastADC_ChrgCurt>RegADC_ChrgCurt))DATA_CHRGPWM++;
}
LastADC_ChrgCurt = RegADC_ChrgCurt;
}
}
}