一直做电机控制和工业控制,对系统的稳健性高度关注! L053我们将用于一个电池供电的IOT设备中,其低功耗是我们非常关注的,同时系统还要随时监测自身电池电压。 我们的新设计中将使用L053内部的电压参考代替原先的外部电压参考,目的是省电、稳健。 于是我们用开发板评估一下该参考电压的性能先。
VREFINT out: 1.224v TCoeff : 25ppm/°C ACoeff : 1000ppm VDDCoeff : 2000ppm/V 如此的电参数,用来作为电源电压的监测基准,绰绰有余!更有甚者,该基准是经ST的生产流程校准的,校准参数保存地址是:0x1FF8 0078 - 0x1FF8 0079
好了,我们直接用已经应用在F051/F303上的电压校准程序来测量L053的基准,通过校准过程来测量开发板的VCC电压。在芯片的外围寄存器配置稍作修改即可:结果如下
开发板的VCC: 3.313V VCC测试结果:3320/1000=3.320v 不错!
程序如下: //----- SystemFirmware_TemperatureMeasure_Ts_pro / 系统固件_TemperatureMeasure -----
void SystemFirmware_TemperatureMeasure_Ts_pro( void )
{ // Tb: 128ms
u8 cBuff;
s32 _wBuff;
u32 wVTs,wVref,wBuff;
static u8 cTBuff =0,
cCntBuff=0;
cTBuff++;
if( ( cTBuff & 0x7 ) == 0 ) // Tb: 1s
{ // device temp calculate
cCntBuff++;
sSystemFirmWare._wTempDeviceDataBuff[ (cCntBuff&0x7) ] = sSystemFirmWare.sTemperatureInput[0xe].iAdcBuff;
sSystemFirmWare._wVrefDataBuff [ (cCntBuff&0x7) ] = sSystemFirmWare.sTemperatureInput[0xf].iAdcBuff;
// VrefCal
sSystemFirmWare.iVrefCal = *(vu16*)(0x1FFFF7BA);
// TsCal
sSystemFirmWare.iTsCal1 = *(vu16*)(0x1FFFF7B8);
sSystemFirmWare.iTsCal2 = *(vu16*)(0x1FFFF7C2);
for( cBuff=0,wVTs=0,wVref=0;cBuff<8;cBuff++ )
{
wVTs +=sSystemFirmWare._wTempDeviceDataBuff[ cBuff ];
wVref+=sSystemFirmWare._wVrefDataBuff [ cBuff ];
}
wVTs >>= 3;
wVref>>= 3;
sSystemFirmWare.wVref = wVref;
// Vcc 校准 @ VrefCal
wBuff = 3000;//3300;
wBuff*= sSystemFirmWare.iVrefCal;
wBuff/= (wVref+1);
sSystemFirmWare.iVssAx1000 = wBuff;
}
}
|