本帖最后由 jinglixixi_457498010 于 2022-12-31 11:53 编辑

要进行温度控制就离不开温度传感器,就温度传感器的类型讲,主要分为两大类,一是数字式的如DHT22DS1802等,另一种则是使用热敏电阻的模拟式传感器,它在检测温度时需要ADC的配合。
对于DHT22这类的传感器主要是进行环境的温度检测,其测量的温度范围比较窄,也不适于进行液体类介质的检测,其测量的温度范围比较宽。而对于热敏电阻类的传感器,在加装外部铠甲的情况下,则可进行液体介质类的检测。

1.传感器及电路选型
为了便于后续的扩展使用,此次设计的微控器是采用NTC热敏电阻,其阻值为10K,相应的测温电路见图1所示。
image.png
1 测温电路
为了避开3个电位器所占用的数据采集通道,温度检测使用的是ADC采集通道7,使用的引脚为PA7
image.png
2 整体构成

2. 温度检测与控制
为了便于温度的控制,这里用板载的4个按键配置了参数的设置功能。
此外,还利用板载的LED来指示控制状态,其中LD1指示处于加热状态,LD4指示处于停止加热状态。
具体的温度控制与状态指示主程序为:
int main(void)
  • {
  •     uint32_t i,f;
  •     float u,V;
  •     BOARD_Init();
  •     Init_oled();
  •     OLED_Init();
  •     OLED_Clear();
  •     OLED_ShowString(10,0,"EVB-L0136",16);
  •     OLED_ShowString(10,2,"max:",16);                             // 温控限制
  •     OLED_ShowString(10,4,"T=       C",16);                       // 当前温度
  •     OLED_ShowString(10,6,"U=       mV",16);                     // 读取电压
  •     f=1;
  •     Init_key();
  •     Init_led();
  •     i=0;
  •     while (f)
  •     {
  •          if(GPIO_ReadInDataBit(GPIOB, GPIO_PIN_2)==1) i=i-1;          // K1键 -1
  •          if(GPIO_ReadInDataBit(GPIOD, GPIO_PIN_5)==0) i=(i+1)%3300;   // K2键 +1
  •          if(GPIO_ReadInDataBit(GPIOA, GPIO_PIN_8)==0) i=(i*10)%3300;  // K3键 移位
  •          if(GPIO_ReadInDataBit(GPIOB, GPIO_PIN_5)==0) f=0;           // K4键 确认
  •          OLED_ShowNum(42,2,i,5,16);
  •          app_delay(20);
  •     }
  •     app_adc_init();
  •     while (1)
  •     {
  •          u=(unsigned)(app_adc_run_conv() & 0xFFF);
  •          u=3300*u/4095;
  •          OLED_ShowNum(26,6,u,5,16);
  •          if((u<=1644)&&(u>1268)) V=10+(1644-u)/37;
  •          if((u<=1268)&&(u>947)) V=20+(1268-u)/32;
  •          if((u<=947)&&(u>692)) V=30+(947-u)/25;
  •          OLED_ShowNum(26,4,V,5,16);
  •          if(V<i)
  •          {
  •              GPIO_WriteBit(GPIOB, GPIO_PIN_9, 0u);      //  红色的LD1指示处于加热状态
  •              GPIO_WriteBit(GPIOC, GPIO_PIN_0, 1u);
  •         }
  •         else
  •         {
  •              GPIO_WriteBit(GPIOB, GPIO_PIN_9, 1u);
  •              GPIO_WriteBit(GPIOC, GPIO_PIN_0, 0u);      //  黄色的LD4指示处于散热状态
  •         }
  •              app_delay(200);
  •     }
  • }
  • 复制代码
    经程序的编译和下载,其检测与控制效果如图3和图4所示。
    若将LD1指示灯的引脚连接到继电器以控制加热器件,则可以实现温度的恒定控制。
    image.png
    3 加热状态
    image.png
    4 停止加热状态