目的:使用STM32采集QFA3171温湿度传感器的温度湿度并在显示屏显示采集到的温湿度
连接
首先确认温湿度传感器的接线方式,通过说明书可以看到温湿度传感器G1,G2接电源,I1为湿度输出,I2温度输出
I1:0-100%相关适度关联的4~20mA信号输出;
I2 :与0-50℃温度相关的4~20mA信号输出;
那么搜索可知,有两种接线方式,一为下图
另外一种为
那我们选择第二种接线方式,即G1接24V电源的正极串G2,I1,I2分别输出湿度和温度,I1输出连接STM32引脚PA1,I2输出连接STM32引脚PA2,24V电源负极接STM32的GND。
因为QFA31711温湿度传感器输出的是4-20mA电流信号,但是STM32只能采集电压信号,所以需要在I1,I2和电源负极直接串电阻使电流信号转为电压信号,方式为I1,I2分别接166Ω的电阻,同时与负极连接。
STM32对信号的处理采取ADC,DMA方式。
数据处理为:
`lcd_show_string(30, 140, 200, 12, 12, "ADC1_CH1_VAL:", BLUE);
lcd_show_string(30, 152, 200, 12, 12, "Huminity is:00.00%", BLUE);
lcd_show_string(30, 170, 200, 12, 12, "ADC1_CH2_VAL:", BLUE);
lcd_show_string(30, 182, 200, 12, 12, "Temperature is:00.00 centigrade", BLUE);
adc_dma_enable(ADC_DMA_BUF_SIZE);
while (1)
{
if (g_adc_dma_sta == 1)
{
for(j = 1; j < 3; j++)
{
sum = 0; /* 清零 */
for (i = 0; i < ADC_DMA_BUF_SIZE / 3; i++)
{
sum += g_adc_dma_buf[(3 * i) + j];
}
adcx = sum / (ADC_DMA_BUF_SIZE / 3);
lcd_show_xnum(108, 110 + (j * 30), adcx, 4, 12, 0, BLUE);
if(j == 1)
{
temp = (float)adcx * (3.3 / 4096) * 1000 / 166;
temp = (temp - 4 ) * 100 / 16 ;
adcx = temp;
lcd_show_xnum(102, 122 + (1 * 30), adcx, 2, 12, 0, BLUE);
temp -= adcx;
temp *= 1000;
lcd_show_xnum(120, 122 + (1 * 30), temp, 2, 12, 0X80, BLUE);
}
if(j == 2)
{
temp = (float)adcx * (3.3 / 4096 * 1000 / 166);
temp = (temp - 4) * 50 / 16;
adcx = temp;
lcd_show_xnum(120, 122 + (2 * 30), adcx, 2, 12, 0, BLUE);
temp -= adcx;
temp *= 1000;
lcd_show_xnum(137, 122 + (2 * 30), temp, 2, 12, 0X80, BLUE);
}
}
g_adc_dma_sta = 0; /* 清除DMA采集完成状态标志 */
adc_dma_enable(ADC_DMA_BUF_SIZE); /* 启动下一次ADC DMA采集 */
}`
显示屏显示数据则完成数据采集。