打印
[DemoCode下载]

通过带隙电压测量VCC

[复制链接]
865|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如果我们可以确定带隙电压和对应的ADC原始数据那么我们就可以通过比例运算知道VCC,因为满量程对应的就是VCC,也就是0x0FFF对应VCC
即VCC:0xFFF=带隙电压:带隙电压ADC

使用特权

评论回复
沙发
dongnanxibei|  楼主 | 2019-4-25 23:58 | 只看该作者
double Bandgap_Voltage,VDD_Voltage;
void ADC_Bypass (void) // The first three times convert should be
bypass
{
unsigned char ozc;
for (ozc=0;ozc<0x03;ozc++)
{
clr_ADCF;
set_ADCS;
while(ADCF == 0);
}
}
void main (void)
{
double bgvalue;
READ_BANDGAP();
Enable_ADC_BandGap;
ADC_Bypass();
clr_ADCF;
set_ADCS;
while(ADCF == 0);
bgvalue = (ADCRH<<4) + ADCRL;
VDD_Voltage = (0xFFF/bgvalue)*Bandgap_Voltage;
printf ("\n Bandgap voltage = %e", Bandgap_Voltage);
printf ("\n VDD voltage = %e", VDD_Voltage);
while(1);
}

使用特权

评论回复
板凳
dongnanxibei|  楼主 | 2019-4-25 23:59 | 只看该作者
而带隙电压可以通过特定的操作获取
#define set_IAPEN
BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON|=SET_BIT0 ;EA=BIT_TMP
#define set_IAPGO
BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPTRG|=SET_BIT0 ;EA=BIT_TMP
#define clr_IAPEN
BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON&=~SET_BIT0;EA=BIT_TMP
void READ_BANDGAP()
{
UINT8 BandgapHigh,BandgapLow;
Set_IAPEN; // Enable IAPEN
IAPAL = 0x0C;
IAPAH = 0x00;
IAPCN = 0x04;
set_IAPGO; // Trig set IAPGO
BandgapHigh = IAPFD;
IAPAL = 0x0d;
IAPAH = 0x00;
IAPCN = 0x04;
set_IAPGO; // Trig set IAPGO
BandgapLow = IAPFD;
BandgapLow = BandgapLow&0x0F;
Clr_IAPEN; // Disable IAPEN
Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
Bandgap_Voltage = 3072/(0x1000/Bandgap_Value);

使用特权

评论回复
地板
dongnanxibei|  楼主 | 2019-4-26 00:00 | 只看该作者

使用特权

评论回复
5
dongnanxibei|  楼主 | 2019-4-26 00:01 | 只看该作者

使用特权

评论回复
6
gaoyang9992006| | 2019-4-26 11:11 | 只看该作者
其实官方应该直接给个封装彻底的例子,这样大家直接拿来就用,不用考虑中间原理了,也是可以的。

使用特权

评论回复
7
BigLeo8| | 2019-4-26 13:44 | 只看该作者

使用特权

评论回复
8
features| | 2019-4-26 19:22 | 只看该作者
感谢分享,学习下

使用特权

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

本版积分规则

201

主题

3587

帖子

16

粉丝