本帖最后由 jinglixixi_457498010 于 2024-10-21 21:01 编辑

ME32F103 RISC开发板提供了ADC检测功能,并在数码管的配合下可直接将采集的电压值显示出来以供观察。

图1和图2是针对PA0引脚所进行的电压检测,可见其在悬空状态的电压值可达3288mV,而在接地状态下则可0V。


image.png
图1 悬空状态检测

image.png
图2 接地状态检测

在外接NTC热敏电阻模块的情况下,则可进行温度的检测,其电路如图3所示。

image.png
图3测温电路

此时,若对室温进行检测为2.146V,见图4所示。

image.png
图4 室温检测

若对体温进行检测,则可见到电压值会随着温度的升高而下降,见图5所示。

image.png
图5 体温检测

在检测值正确的情况下,如下的程序会显示出检测的温度值:

  1. //            0    1     2    3   4    5    6    7    8     9  dp   hei
  2. uint8_t led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x00};
  3. uint32_t adcvalue,adcvaluetemp,number;
  4. uint32_t u,v;
  5. int main(void)
  6. {
  7.         // 数码管初始化程序
  8.         // ADC初始化程序
  9.         while(1)
  10.         {        
  11.                 ADC_IssueSoftTrigger;
  12.                 while(!ADC_IsScanDone);
  13.                 ADC_ClrState;
  14.                 adcvalue=ADC->DR0 & 0xFFF;
  15.                 adcvalue=(3300*adcvalue)>>12;
  16.                 u=adcvalue;
  17.                 。。。
  18.                 if ((u<=1644) && (u>1268))
  19.                 {        
  20.                       v=10+(1644-u)/37;    // 10度区间检测
  21.                 }
  22.                 if ((u<=1268) && (u>947))
  23.                 {
  24.                       v=20+(1268-u)/32;    // 20度区间检测
  25.                 }
  26.                 if ((u<=947) && (u>692))
  27.                 {        
  28.                       v=30+(947-u)/25;    // 30度区间检测
  29.                 }
  30.                 。。。
  31.                 number=v%10;
  32.                 LED_Fill(COM3,led[number],0xFF);
  33.                 number=v%100/10;
  34.                 LED_Fill(COM2,led[number],0xFF);
  35.                 number=v%1000/100;
  36.                 LED_Fill(COM1,led[number],0xFF);
  37.                 LED_Fill(COM0,led[11],0xFF);

  38.                 SYS_Delay(0x7ffff);
  39.         }
  40. }

但稍感不足的是,数码管显示的电压值会比用电压表检测的值要高许多,若数码管显示的是2.1V,则用万用表测得的电压约在1.2V左右。这就严重地影响了检测的效果,估计可能是因为电压输入端缺少运放的高输入电阻阻隔有关。