0. 參考
電流模架構Bandgap設計與仿真
bandgap的理解(內部帶隙電壓基準)
?
?
?
雖然看不懂這些公式,但是比較重要的一句應該是這個:因為傳統帶隙基準的輸出值為1.2V
?
1.?使用
參考示例代碼。
40002000是falsh控制器寄存器,40002058應該也是flash相關。
?
flash控制寄存器到0x40002040就結束了,參考下表的地址規律,在0x40002044應該就是eflash控制寄存器結束地址。跟代碼里面的40002058沒有啥關系。
?
可以看到這個也是存在falsh中,手冊中沒有說明這個地址的作用,應該也是專門用來存儲基校準電壓的地方。
?
看到7801的BG輸出電壓是1.2V,并且出廠自帶校準。
溫度曲線斜率1.692,單位是mV/℃
25℃時候電壓是0.72V
可以看到低5位用來存儲BG校準值
高8位用來存儲25℃時候的溫度值
TsensorCali = *((uint32_t *)0x40002058);VbandgapRT = (uint8_t)(TsensorCali & 0x1F); // 0 1111 低5位 VtsensorRT = (uint8_t)((TsensorCali >> 8) & 0xFF); // 1111 1111 高8位
最高位第5位不為0 ?因此可以判斷第5位是符號位
最高位第8位不為0 ?因此可以判斷第8位是符號位
經過換算之后1200的ADC值對應的就是1.2V電壓值。
溫度值720對應0.72V【720mV】,與后面的0.5系數就不太懂了,應該是特殊公式。
/* BG calibration */if (VbandgapRT >> 4) //最高位第5位不為0 因此可以判斷第5位是符號位{bgVol = 1200 - (VbandgapRT & 0xF); }else{bgVol = 1200 + (VbandgapRT & 0xF);}/* Vtsensor calibration */if (VtsensorRT >> 7) //最高位第8位不為0 因此可以判斷第8位是符號位{vt25Vol = 720 - (VtsensorRT & 0x7F) * 0.5;}else{vt25Vol = 720 + (VtsensorRT & 0x7F) * 0.5;}
進行ADC采樣
?
測出來的數據
使用BG的校準值和測出來的BG值對溫度ADC值進行校準
ADC值即mV單位的電壓值,進行溫度曲線斜率換算,得到目前的溫度值。