打印
[STM32L0]

STM32L053之internal voltage reference

[复制链接]
435|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

一直做电机控制和工业控制,对系统的稳健性高度关注!

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;
    }
  }


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

373

主题

1976

帖子

3

粉丝