最近折腾了几天STC单片机(试验了STC15W408AS和STC15W4K56S4这两款)的AD转换,想用它来测锂电池的电压,需要读出内部的bandgap带隙电压基准,才能精确计算出外部采样输入的电压值。需要在STC-ISP下载软件设置中勾选“在程序区的结束处添加重要测试参数”才能读出出厂时写入单片机内部的该单片机对应的带隙电压基准。后来我换了新版本的STC-ISP 6.86S,发现点击“下载/编程”或“检测MCU选项”操作后均能读出该带隙电压基准,每个单片机读出的值确实不一样。如我这款408AS读出的是:
“. 内部参考电压: 1253 mV (参考范围: 1150~1320mV)”,另一块408AS读出的是1236mV,实际上我用程序:
P1ASF = 0;
Get_ADC10bitResult(0); //改变P1ASF后先读一次并丢弃结果, 让内部的采样电容的电压等于输入值.
Get_ADC10bitResult(0); //读内部基准ADC, P1ASF=0, 读0通道
sendChar(ADC_RES);
sendChar(ADC_RESL);
读出的两块单片机的电压基准分别是04 E5 和04 D4,开始我就没搞明白STC-ISP这个软件是如何计算出这两个电压值是1253mV和1236mV的。然后还测了STC15W4K56S4的基准电压值,得出一个规律就是高8位都是0x04,低8位换算成十进制为226就代表基准电压刚好就是1.25V,227就是1251mV,225就是1249mV,依次类推,233代表1257mV。后来又发现,0x04E5这个16位的int型数据的十进制值不就是1253(mV)吗。
|