ME32F103 RISC开发板提供了ADC检测功能,并在数码管的配合下可直接将采集的电压值显示出来以供观察。
图1和图2是针对PA0引脚所进行的电压检测,可见其在悬空状态的电压值可达3288mV,而在接地状态下则可0V。
![image.png image.png](https://static.assets-stash.eet-china.com/forum/202410/21/172951510928396205149igw2fh3kek2yfuk0.png)
图1 悬空状态检测
![image.png image.png](https://static.assets-stash.eet-china.com/forum/202410/21/172951513645387205216eh5d0wzso10d0ed0.png)
图2 接地状态检测
在外接NTC热敏电阻模块的情况下,则可进行温度的检测,其电路如图3所示。
![image.png image.png](data/attachment/forum/202410/21/205252v242mm994holb902.png)
图3测温电路
此时,若对室温进行检测为2.146V,见图4所示。
![image.png image.png](https://static.assets-stash.eet-china.com/forum/202410/21/172951520480868205324pycbjy3jj4sc43sy.png)
图4 室温检测
若对体温进行检测,则可见到电压值会随着温度的升高而下降,见图5所示。
![image.png image.png](https://static.assets-stash.eet-china.com/forum/202410/21/172951522819354205348bn99vxp448vzg788.png)
图5 体温检测
在检测值正确的情况下,如下的程序会显示出检测的温度值:
// 0 1 2 3 4 5 6 7 8 9 dp hei
uint8_t led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x00};
uint32_t adcvalue,adcvaluetemp,number;
uint32_t u,v;
int main(void)
{
// 数码管初始化程序
// ADC初始化程序
while(1)
{
ADC_IssueSoftTrigger;
while(!ADC_IsScanDone);
ADC_ClrState;
adcvalue=ADC->DR0 & 0xFFF;
adcvalue=(3300*adcvalue)>>12;
u=adcvalue;
。。。
if ((u<=1644) && (u>1268))
{
v=10+(1644-u)/37; // 10度区间检测
}
if ((u<=1268) && (u>947))
{
v=20+(1268-u)/32; // 20度区间检测
}
if ((u<=947) && (u>692))
{
v=30+(947-u)/25; // 30度区间检测
}
。。。
number=v%10;
LED_Fill(COM3,led[number],0xFF);
number=v%100/10;
LED_Fill(COM2,led[number],0xFF);
number=v%1000/100;
LED_Fill(COM1,led[number],0xFF);
LED_Fill(COM0,led[11],0xFF);
SYS_Delay(0x7ffff);
}
}
复制代码但稍感不足的是,数码管显示的电压值会比用电压表检测的值要高许多,若数码管显示的是2.1V,则用万用表测得的电压约在1.2V左右。这就严重地影响了检测的效果,估计可能是因为电压输入端缺少运放的高输入电阻阻隔有关。