STM32---传感器工作原理和ADC

目录

一.传感器

1.传感器基本工作过程

2.传感器参数

3.传感器中物理量的表示方法

二.ADC

1.输入电压

 2.输入通道

3.触发源

4.转换时间

5.数据寄存器

         6.中断

三.ADC-库函数

四.ADC--电压采集

注意:



一.传感器

传感器一般指把物理量转换成电信号量的装置。

1.传感器基本工作过程

被测物理量--》敏感元件--》转换元件--》变换电路--》电信号量

敏感元件直接感受被测物理量,并输出与该物理量有确定关系的信号,经过转换元件将该物理量信号转换成电信号,变换电路对转换元件输出的电信号进行放大调制,最后输出容易检测的电信号量。

举例说明:温度传感器可把温度量转化成电压信号量输出,且温度值与电压值成比例关系。只要使用ADC测量出电压值,并根据转换关系即可求出实际温度值。

2.传感器参数

一般使用精度,线性误差(实际值与测量值的拟合度误差),分辨率(可测最小物理量的单位),采样频率这些参数来比较性能。

3.传感器中物理量的表示方法

(1)大部分传感器的输出是与电压成比例关系的。电压值一般用ADC来测量。ADC的位数会影响测量的量程。

举例说明:2位的ADC最多只能表示数字3,分辨率为10时,量程为0~30.

(2)ADC的每位表征的物理量来表示分辨率。每位代表20厘米:1LSB/20cm,等效于5位表示1米:5LSB/m。LSB表示ADC的最低有效位。使用采样得到的ADC数值乘以分辨率就可以得到测量的物理量值。

比如:分辨率为1LSB/20cm,线性误差为0.1m的传感器,ADC采样为20,则测量值:20*20+-10cm。

二.ADC

ADC是什么?ADC在STM32中的作用是什么?为什么需要ADC?

ADC:Analog to Digital Convertor,模拟数字转换器。ADC是将模拟信号转换为数字信号的转换器。模拟信号是连续变化的电压或者电流,它常常来自传感器;计算机或者说主控的输入必须是离散的数字量,所以当传感器的信息需要传输到STM32控制器时,我们需要ADC来完成模数转换。

在STM32上有三个ADC,分别为ADC1,ADC2,ADC3,分辨率为12位,每个ADC有18个通道。分为内部通道和外部通道。

 

1.输入电压

STM32的输入电压一律是0~3.3V。Vref+和VDDS接3.3V,Vref-和VSSA接地,表示输入电压范围是0~3.3V。

当输入电压超出0~3.3V时,怎么办?ADC可以实现测量-10~10V。方法就是外接分压电路。常见的ADC分压电路:

 2.输入通道

(1)外部通道分为注入通道和规则通道。

  • 注入通道:最多4路。在规则通道转换的时候强行插入要转换的通道,类似中断。
  • 规则通道:最多16路。平时常用的通道。

(2)通道的转换顺序:

  • 规则序列寄存器SQR1,2,3中对寄存器位写值(写通道号),来配置通道的顺序。调用固件库来设置通道转换顺序。
  • 注入序列寄存器JSQR只有一个,最多支持4个通道。

3.触发源

  • 软件触发:打开ADON(开启ADC并开始转换)/SWST,ART/JSWSTART。打开ADC,开始转换。
  • 外部事件触发:内部定时器或者外部I/O。选择中断源--打开中断开关。

4.转换时间

ADC挂载在APB2上,APB2一般配置成72M,ADCCLK最大14M,ADC预分频根据需要计算设置。一般取8分频。操作ADC寄存器时,需要打开RCC_APB2ENR时钟。每个通道可以分别用不同的时间采样。

转换时间Tconv=采样时间+12.5个周期。(采样时间可以在采样时间寄存器上配置)

ADC_CLK=14M,采样时间1.5周期。

那么Tconv=14周期=14*(1/14)微秒=14微秒

即,转换时间是14微妙。

以上设置完成后,ADC转换的数据根据转换组的不同,规则组的数据放在ADC_DR寄存器,注入组的数据放在JDRx中。

5.数据寄存器

  • ADC规则数据寄存器:只有一个这样的寄存器,低16位有效,存放规则通道转换后的数据。高16位在双ADC时存放第二个ADC的数据。
  • ADC注入数据寄存器:有4个这样的寄存器,存放注入通道转换后的数据,低16位有效。

怎么根据模拟量求出数字量呢?

ADC电压输入范围:0~3.3V,分辨率12位,那么最小精度为3.3/2^12,模拟量和数字量的对应关系是:模拟量=数字量*(3.3/2^12)。

6.中断

规则和注入通道结束时能产生中断,看门狗也可以产生中断。

中断事件事件标志使能控制位
规则通道转换完成EOCEOCIE
注入通道转换完成JEOCJEOCIE
模拟看门狗状态位被设置AWD

AWDIE

什么是情况下会触发看门狗中断?

当ADC转换的模拟电压低于阈值或者高于阈值,AWD模拟看门狗状态位被设置。通过设置QWDIE位可以允许产生相应的中断。

三.ADC-库函数

1.初始化结构体

  • Mode:常采用独立模式;双重ADC模式(ADC1和ADC2同时使用)下又有8种模式。
  • ScanConvMode:扫描单通道或者多通道
  • ContinuousConvMode:ADC单次转换或者连续转换
  • ExternalTrigConv:外部触发转换源。选择触发源中的某一个,那这个可以触发规则和注入组的采样。只有它的上升沿可以触发。这些触发源中既有对规则通道的外部触发,也有对注入通道的外部触发。注入通道的外部触发可以打断规则通道的外部触发。ADC_ExternalTrigConv_None软件控制位;软件控制位可以触发采样。
  • DataAlign:数据寄存器对齐格式,一般使用右对齐。
  • NbrOFChannel:转换的通道数.

2.RCC_ADCCLKConfig    配置分频因子   

3.ADC_RegularChannelConfig   通道配置,顺序,采样时间

4.读取数据方式

  • 中断方式:ADC使能,软件触发使能,外部触发转换使能,中断配置和使能。
  • DMA方式:DMA使能,ADC_DMA使能,ADC使能。软件触发使能。

双重ADC模式

双重ADC模式有8种。同步注入,同步规则,快速交叉,慢速交叉,交替触发。以及组合使用前面的模式。

  • 在双ADC模式里,当转换配置成由外部事件触发时,必须将其设置成仅触发主ADC,从ADC设置成软件触发,防止意外触发从转换。但是主和从ADC的外部触发必须同时被激活。
  • 在双ADC模式里,为了在主数据寄存器上读取从转换数据,即使不使用DMA传输规则通道数据,也必须使能DMA位。

介绍一下双重ADC的同步规则模式

同步规则模式在规则通道上执行。外部触发来自ADC1的规则多路开关,它同时给ADC2提供同步触发。在ADC1或者ADC2转换结束的时候产生一个32位DMA请求,32位的ADC1_DR的内容传输到SRAM中。(32位的ADC1_DR寄存器的高16位是ADC2的数据,低16位是ADC1的数据)当所有规则通道都被转换之后,产生EOC中断。

 

四.ADC--电压采集

由电路图可知:PC1接收滑动变阻器的电压信号。PC1设置为模拟输入。只需要一个PC1就可以完成电压采集。

如果需要读取的数据较多,且需要快速处理,则选择DMA读取比较好。这是为什么呢?

规则通道转换的值存储在一个仅有的数据寄存器中,所以当有多个规则转换通道需要使用存储数据时,就不够了,会导致数据丢失。如果使用DMA的话,就可以避免。

只有在规则通道的转换结束的时候才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到指定的目的地址。

  1. 独立模式-单通道-中断读取:初始化GPIO,初始化ADC,配置ADC时钟,通道转换顺序和采样时间,使能ADC转换完成中断(中断源来自规则通道转换完成,或者注入通道转换完成,或者看门狗),使能ADC,ADC校准,使能软件触发转换ADC_SoftwareStartConvCmd。配置中断优先级。调用库函数。既然使用了中断,那必然要写中断服务函数。在启动文件里查找中断服务函数名,使用库函数ADC_GetConversionValue来读取ADC转换值。
  2. 独立模式-单通道-DMA读取:要配置DMA,打开ADC_DMACmd,同样的需要ADC校准。不需要使用中断相关的函数。最后要使能ADC的软件触发转换。
  3. 独立模式-多通道-DMA读取: 多引脚,多通道配置。和单通道-DMA读取大体是一样的。在ADC初始化结构体中,扫描改成多通道,要ENABLE。
  4. 双重模式-多通道-规则同步-DMA读取:ADC1和ADC2。两个ADC同时工作,数据放在DR,会用到高16位。同样地,需要初始化GPIO,ADC,配置ADC时钟,通道转换顺序和采样时间。除此之外,需要配置DMA以及ADC校准。在DMA配置函数中,需要打开DMA的时钟,DeInit DMA,初始化DMA,使能DMA。在ADC配置函数中,使能ADC_DMA请求。初始化校准寄存器ADC_ResetCalibration(ADCx_1);校准器初始化完成ADC_GetResetCalibrationStatus(ADCx_1);开始校准ADC_StartCalibration(ADCx_1);,校准完成ADC_GetCalibrationStatus(ADCx_1);最后要使能ADC的软件触发转换。
  5. 对于2-4的DMA读取方式,都使用软件触发转换。在bsp_adc.c写完这些程序后,程序执行之后,ADC转换的数据被保存在规定的DMA的目的地址里。所以需要事先定义一个数组来存储这些数据。数组名就是首地址。在main函数中需要使用ADC转换后的数据时,直接访问数组。

注意:

  1. ADC_GPIO初始化时,引脚设置为GPIO_Mode_AIN模式(模拟输入)。模拟输入表示信号不经过施密特触发器直接输入,输入信号量为模拟量而非数字量。
  2. 通常,要先使能DMA,再使能ADC_DMA,最后使能ADC。先配置好DMA,再配置ADC。
  3. ADC2没有DMA功能。ADCx对应用哪个DMA通道需要查表确定。ADCx的通道的管脚要注意是否有其他的功能,如果有其他的功能那就不要用这个ADC通道了,会有干扰。
  4. 如果在最近的烧录程序中有相关DMA,ADC的,我们需要在下一次编写程序的时候进行ADC_DeInit,DMA_DeInit。这是避免前面烧录的程序对这次实验结果的影响。
  5. 由ADC2转化的数据可以通过双ADC模式,利用ADC1的DMA传输。
  6. 双重ADC模式有很多需要注意的,较为麻烦,为什么不直接用两个ADC独立模式呢?双重ADC与两个ADC独立模式相比较的优势就是双重ADC的采样率高,避免数据错位和波动大的情况。所以,在需要较高的采样率时,为了获得较为稳定的数据,使用双重ADC模式具有较大的优势。
  7. 双重模式-多通道-规则同步-DMA读取:双重ADC模式没有使用中断方式获取数据,而是使用DMA方式。两个ADC_x模式配置为ADC_Mode_RegSimult。在双重ADC模式下进行校准时,需要初始化校准器的原因是有两个ADC需要校准,进行两次初始化针对不同的ADC。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先应该介绍STM32F411RET6的内部温度传感器: 首先此温度传感器主要用于测量设备所处环境的周围温度。 当没有使用此温度传感器时,传感器将处于断电模式。 主要的性能: •所支持的温度范围:-40℃到125℃ •测量的精度:±1.5℃ 然后是读取芯片内部的温度传感器: ①选择ADC1_IN18作为输入通道。 ②选择一个采样的时间,但必须要大于用户参考手册上所指定的最小采样时间。 ③通过置位ADC_CCR寄存器中的TSVREFE标志位,使得温度传感器从掉电模式唤醒。 ④开始ADC传唤通过置位SWSTART(或者通过外部的触发) ⑤读取ADC数据寄存中的数值 ⑥使用下面的公式来计算温度: Tempereture={(V_SENSE-V25)/Avg_Slope}+25 在这个公式里面: —V25在25℃下的值 —Avg_Slope为给定的温度的斜率 通过查看电气特性手册来获得给定的V25和Avg_Slope的值 注意: 传感器在他能够正确的范围内输出V_SENSE之前,从掉电模式到唤醒有一个起始的时间。同样,ADC的上电也有一个起始的时间,因此为了使这个延时最小化,ADON和TSCREFE标志位可以在同一个时间被置位。 温度传感器的输出电压的改变与温度是呈现出线性关系的。这个线性函数的偏移是依赖于每一个芯片上处理器的不同。 内部温度传感器更加适合与那些用来察觉温度不差异的应用中,而非用于获取绝对的温度值,如果想要获取到精确的温度值,请使用一个外部的温度传感器来代替。 现在是相关的ADC初始化的代码和获取温度代码部分截图: 然后是主函数的读取,并且串口打印出来: 最后是套入用户手册所给出公式计算出的温度的结果: 然后下一步是调试W5500进行网络连接,并把温度数据上传到网络

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值