各位好,这两天正在学习用stm8的多通道ADC,发现以下问题:(1) 程序在开发板多通道采样都准确,上到实验板上采样就有问题,采样到的电压值偏小,本来是2.5V,才出来时2.43V。
我测试了实验板上MCU的Vdd=3.3V稳定,被采样电压稳定。
(2) 单步调试采样得到的值Vref ,VbatTmp ,VisenseTmp是正常的,如果设置设断点运行,采样到的值就会异常。
例如断点设置在Isense = ((DWORD)DiffVisenseVbat)*250/Vref; //Risense=1ohm
采样得到的值Vref ,VbatTmp ,VisenseTmp是会异常,
望请各位大神指点。
static WORD Vref;
static WORD VbatTmp;
static WORD VisenseTmp;
static WORD DiffVisenseVbat;
static WORD Isense;
static WORD UpdatePwmDuty;
void DcdcCtrl()
{
BOOL bIsenseIs80mA;
//----- Initialize
Vref = 0x0000;
VbatTmp = 0x0000;
VisenseTmp = 0x0000;
DiffVisenseVbat = 0x0000;
Isense = 0x0000;
bIsenseIs80mA = FALSE;
do
{
UpdatePwmDuty = TIM1->CCR3L; //Get duty of PWM
Vref = GetVref(); //Get Vref:2.5V
VbatTmp = GetVbat();
VisenseTmp = GetVisense();
DiffVisenseVbat = VisenseTmp - VbatTmp;
Isense = ((DWORD)DiffVisenseVbat)*250/Vref; //Risense=1ohm
if( Isense > ISENSE_90MA )
{
bIsenseIs80mA = FALSE;
if(UpdatePwmDuty==1) //Minimum of Duty Cycle:1
{
break;
}
else
{
UpdatePwmDuty--;
}
}
else if( Isense < ISENSE_70MA )
{
bIsenseIs80mA = FALSE;
if(UpdatePwmDuty==PWM1_DIV) //Maximum of Duty Cycle
WM_Div
{
break;
}
else
{
UpdatePwmDuty++;
}
}
else
{
bIsenseIs80mA = TRUE;
}
TIM1->CCR3L = UpdatePwmDuty;
}
while( bIsenseIs80mA == FALSE );
}
ADC多通道采样切换的时候,是否需要在一个通道采样结束后,关断ADC,然后在用另一个通道前再打开ADC?
需要,英文手册写的很详细要么关闭ADC,再打开,要么丢弃第一次的值。
一周热门 更多>