STM32采集西门子QFA3171温湿度

目的:使用STM32采集QFA3171温湿度传感器的温度湿度并在显示屏显示采集到的温湿度
连接
首先确认温湿度传感器的接线方式,通过说明书可以看到温湿度传感器G1,G2接电源,I1为湿度输出,I2温度输出
I1:0-100%相关适度关联的4~20mA信号输出;
I2 :与0-50℃温度相关的4~20mA信号输出;
那么搜索可知,有两种接线方式,一为下图
接线方式1
另外一种为
接线方式2
那我们选择第二种接线方式,即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采集 */
        }`

显示屏显示数据则完成数据采集。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值