浅谈STM32 模数转换器 (ADC)(下)

发布时间:2023-09-25  

温度传感器和VRENFINT通道框图

图片

要使用传感器,请执行以下操作:


选择 ADC1_IN16 或 ADC1_IN18 输入通道。

选择一个采样时间,该采样时间要大于数据手册中所指定的最低采样时间。

在 ADC_CCR 寄存器中将 TSVREFE 位置 1,以便将温度传感器从掉电模式中唤醒。

通过将 SWSTART 位置 1(或通过外部触发)开始 ADC 转换

读取 ADC 数据寄存器中生成的 V SENSE 数据

使用以下公式计算温度:

温度(单位为 °C)= {(V SENSE — V 25 ) / Avg_Slope} + 25


其中:


— V 25 = 25 °C 时的 V SENSE 值


— Avg_Slope = 温度与 V SENSE 曲线的平均斜率(以 mV/°C 或 μV/°C 表示)


由于ADC寄存器的相关配置相对比较简单,这里直接附上测量温度相关的ADC初始化和中断程序:


void ADC_Init()

{

  u32 prigroup = 0;                          

  u32 priority = 0;        


  RCC->APB2ENR  |=  1<<8;    //开ADC1时钟        


  ADC->CCR  =  0;

  ADC->CCR  |=  1<<23;    //使能温度传感器和 V REFINT 通道

  ADC->CCR  |=  1<<16;    //ADCCLK=21mHZ


  ADC1->CR1  =  0;//分辨率12位


  ADC1->CR2  =  0;          //数据右对齐

  ADC1->CR2  |=  1<<10;    //通道只要转换结束,则将EOC置1,使能溢出检测


  ADC1->SMPR1  =0;          //通道16采样时间3T


  ADC1->SQR3  |=  16<<0;


  ADC1->CR1  |=  1<<5;          //使能EOC中断

  ADC1->SR  &=~  (1<<1);        //清中断标记33

  prigroup = NVIC_GetPriorityGrouping();        //得到优先级分组

  priority = NVIC_EncodePriority(prigroup,1,2);  //优先级编码

  NVIC_SetPriority(ADC_IRQn,priority);        //设置中断优先级

  NVIC_EnableIRQ(ADC_IRQn);                  //使能ADC中断


  ADC1->CR2  |=  1<<0;      //使能ADC

  Delay_us(3);

  ADC1->CR2  |=  1<<30;  //启动AD转换

}



u16 ADC1_Value={0};      //定义二维数组,按行存入三个通道的转换结束

u8 ADC1_OK = 0;



//中断处理函数

void ADC_IRQHandler()

{

  if(ADC1->SR  &  (1<<1))

  {      

    ADC1->SR  &=~  (1<<1);        //写0,请标记

    ADC1_Value = ADC1->DR;    //按行依次存入各通道的转换结果

    ADC1_OK  =  1;                //采集完成结束标记置1

  }

}

接着编写主函数测试


#include "stm32f4xx.h"

#include "usart.h"

#include "delay.h"

#include "stdio.h"

#include "ADC.h"



extern u8 ADC1_OK;

extern u16 ADC1_Value;



int main()

{

  float wendu = 0; 


  NVIC_SetPriorityGrouping(7-2);

  Usart1_Init(115200);

  ADC_Init();



  while(1)

  {

    if(ADC1_OK == 1)

    {

      ADC1->SR  &=~ (1<<1);      //清中断标记

      ADC1_OK = 0;

      wendu = 3.3*ADC1_Value/4095;        //求温度数字值对应的模拟电压值

      wendu = (wendu -0.76)*1000/2.5+25;    //计算温度值


      printf("温度AD值:%d wendu = %.lf°C ",ADC1_Value,wendu);

      ADC1->CR2  |=  1<<0;        //再次开启ADC1

      Delay_us(3);

      ADC1->CR2  |=  1<<30;      //触发一次转换

    }

    Delay_ms(1000);

  }

}

从串口可以看到ADC读取的温度值,ADC温度测量成功。

图片

对于电池电压或者其他外部模拟量的测量,配置方法与温度测量类似,这里不再赘述。如果想要让CPU更多地用于算法或者其他功能的处理,同样可以配置DMA进行数据传输。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    用导线连接到“三路可调电压模块”区域中的VR1端子上。 (9). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。 程序设计内容 i......
    可调电压模块”区域中的VR1端子上。 i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。 3. 程序设计内容 i. 由于......
    用导线连接到“三路可调电压模块”区域中的VR1端子上。 i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。 4. 程序设计内容 i......
    器模块根据实际需要对数字量进行处理,最后再送入显示模块显示。其中选用LM35为温度传感器,放大电路选用LM385,选用ADC0809作为模数转换模块,选用常见的AT89C51单片机为控制核心,为了防止数码管闪烁和节省单片机引脚,在单......
    化碳传感器,由这三种传感器组成传感器阵列。 该设计通过气体传感器阵列采集气体信息,并将采集到的信息转化为电信号,然后送到ADC0809 进行模数转换。 1.2 数据采集和数据处理系统 由气......
    气体传感器MQ-2、ADC0809模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片,当环境中可燃气体浓度发生变化时系统会发出相应的灯光报警信号和声音报警信号,以此......
    基于ADC0809和AT89S52单片机的数字电压表的设计;1.引言 本设计待测的输入电压为8路,电压范围为0~5V,使用目前广泛使用的AT89S52来做控制系统,用ADC0809来进行模拟电压的采集及模数转换......
    ;         default:break;     } } 5.3 ADC0809模数转换模块 #ifndef __ADC0809_H__ #define __ADC0809_H__ #include......
    ;            //设置定时初始值,定时1ms     TR0=1;                //打开定时器 } 3.2 ADC0809模数转换函数 #ifndef __ADC0809_H__ #define......
    ACD0809模数转换模块 #ifndef __ADC0809_H__ #define __ADC0809_H__ #include #define ADC_DATA P1 sbit ADDR_A......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>