ADC的一般应用.docx

上传人:b****6 文档编号:5012757 上传时间:2022-12-12 格式:DOCX 页数:69 大小:658.32KB
下载 相关 举报
ADC的一般应用.docx_第1页
第1页 / 共69页
ADC的一般应用.docx_第2页
第2页 / 共69页
ADC的一般应用.docx_第3页
第3页 / 共69页
ADC的一般应用.docx_第4页
第4页 / 共69页
ADC的一般应用.docx_第5页
第5页 / 共69页
点击查看更多>>
下载资源
资源描述

ADC的一般应用.docx

《ADC的一般应用.docx》由会员分享,可在线阅读,更多相关《ADC的一般应用.docx(69页珍藏版)》请在冰豆网上搜索。

ADC的一般应用.docx

ADC的一般应用

第十一章ADC的一般应用

11.1ADC介绍

STM32F10x系列芯片上带有的模数转换器为12位,该ADC是一种逐次逼近型模拟数字转换器。

它有18个通道,可测量16个外部和2个内部信号源。

各通道的A/D转换可以单次、连续、扫描或间断模式执行。

ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值值。

11.1.1ADC主要特征

1.12-位分辨率

2.转换结束,注入转换结束和发生模拟看门狗事件时产生中断

3.单次和连续转换模式

4.从通道0到通道n的自动扫描模式

5.自校准

6.带内嵌数据一致的数据对齐

7.通道之间采样间隔可编程

8.规则转换和注入转换均有外部触发选项

9.间断模式

10.双重模式(带2个或以上ADC的器件)

11.ADC转换时间:

STM32F103xx增强型产品:

ADC时钟为56MHz时为1μs(ADC时钟为72MHz为1.17μs)

STM32F101xx基本型产品:

ADC时钟为28MHz时为1μs(ADC时钟为36MHz为1.55μs)

STM32F102xxUSB型产品:

ADC时钟为48MHz时为1.2μs

12.ADC供电要求:

2.4V到3.6V

13.ADC输入范围:

VREF-≤VIN≤VREF+

14.规则通道转换期间有DMA请求产生。

11.1.2ADC功能描述

ADC模块的框图,参考数据手册。

表11-1-1为ADC管脚的说明。

表11-1-1ADC管脚

名称

信号类型

注解

VREF+

输入,模拟参考正极

ADC使用的高端/正极参考电压,2.4V≤VREF+≤VDDA

VDDA

输入,模拟电源

等效于VDD的模拟电源且:

2.4V≤VDDA≤VDD(3.6V)

VREF-

输入,模拟参考负极

ADC使用的低端/负极参考电压,VREF-=VSSA

VSSA

输入,模拟电源地

等效于VSS的模拟电源地

ADC_IN[15:

0]

模拟输入信号

16个模拟输入通道

1.ADC开关控制

通过设置ADC_CR1寄存器的ADON位可给ADC上电。

当第一次设置ADON位时,它将ADC从断电状态下唤醒。

通过调用库函数ADC_Cmd(ADC1,ENABLE);可以实现将ADON位置位。

ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。

通过清除ADON位可以停止转换,并将ADC置于断电模式。

在这个模式中,ADC几乎不耗电(仅几个μA)。

2.ADC时钟

由时钟控制器提供的ADCCLK时钟与PCLK2(APB2时钟)同步。

RCC控制器为ADC时钟提供一个专用的可编程预分频器,详见复位和时钟控制(RCC)章节。

3.通道选择

有16个多路通道。

可以把转换分成两组:

规则的和注入的。

在任意多个通道上以任意顺序进行的一系列转换构成成组转换。

例如,可以如下顺序完成转换:

通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

规则组由多达16个转换组成。

规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。

规则组中转换的总数写入ADC_SQR1寄存器的L[3:

0]位中。

注入组由多达4个转换组成。

注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。

注入组里的转换总数目必须写入ADC_JSQR寄存器的L[1:

0]位中。

如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。

温度传感器/VREFINT内部通道。

温度传感器和通道ADCx_IN16相连接,内部参照电压VREFINT和ADCx_IN17相连接。

可以按注入或规则通道对这两个内部通道进行转换。

注意:

传感器和VREFINT只能出现在主ADC1中。

4.单次转换模式

单次转换模式下,ADC只执行一次转换。

该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。

一旦选择通道的转换完成:

1》如果一个规则通道被转换:

转换数据被储存在16位ADC_DR寄存器中;

EOC(转换结束)标志被设置;

如果设置了EOCIE,则产生中断。

2》如果一个注入通道被转换:

转换数据被储存在16位的ADC_DRJ1寄存器中;

JEOC(注入转换结束)标志被设置然后ADC停止。

5.连续转换模式

在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。

此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。

每个转换后:

1》如果一个规则通道被转换:

转换数据被储存在16位的ADC_DR寄存器中;

EOC(转换结束)标志被设置;

如果设置了EOCIE,则产生中断。

2》如果一个注入通道被转换:

转换数据被储存在16位的ADC_DRJ1寄存器中;

JEOC(注入转换结束)标志被设置;

如果设置了JEOCIE位,则产生中断。

6.时序图

如图11-1-1所示,ADC在开始精确转换前需要一个稳定时间tSTAB。

在开始ADC转换和14个时钟周期后,EOC标志被设置,16位ADC数据寄存器包含转换的结果。

图11-1-1ADC转换时序

7.扫描模式

此模式用来扫描一组模拟通道。

扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。

一旦这个位被设置,ADC扫描所有被ADC_SQRX寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。

在每个组的每个通道上执行单次转换。

在每个转换结束时,同一组的下一个通道被自动转换。

如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。

而注入通道转换的数据总是存储在ADC_JDRx寄存器中。

8.注入通道管理

1》触发注入

清除ADC_CR1寄存器的JAUTO位,并且设置SCAN位,即可使用触发注入功能。

利用外部触发或通过设置ADC_CR2寄存器的ADON位,启动一组规则通道的转换。

如果在规则通道转换期间产生一外部注入触发,当前转换被复位,注入通道序列被以单次扫描方式进行转换。

然后,恢复上次被中断的规则组通道转换。

如果在注入转换期间产生一规则事件,注入转换不会被中断,但是规则序列将在注入序列结束后被执行。

注:

当使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。

例如:

序列长度为28个ADC时钟周期(即2个具有1.5个时钟间隔采样时间的转换),触发之间最小的间隔必须是29个ADC时钟周期。

2》自动注入

如果设置了JAUTO位,在规则组通道之后,注入组通道被自动转换。

这可以用来转换在ADC_SQRx和ADC_JSQR寄存器中设置的多至20个转换序列。

在此模式里,必须禁止注入通道的外部触发。

如果除JAUTO位外还设置了CONT位,规则通道至注入通道的转换序列被连续执行。

对于ADC时钟预分频系数为4至8时,当从规则转换切换到注入序列或从注入转换切换到规则序列时,会自动插入1个ADC时钟间隔;当ADC时钟预分频系数为2时,则有2个ADC时钟间隔的延迟。

延时时序见图11-1-2。

注意:

不可能同时使用自动注入和间断模式。

图11-1-2注入转换延时时序

11.1.3校准

ADC有一个内置自校准模式。

校准可大幅减小因内部电容器组的变化而造成的准精度误差。

在校准期间,每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差。

通过设置ADC_CR2寄存器的CAL位启动校准。

一旦校准结束,CAL位被硬件复位,可以开始正常转换。

建议在上电时执行一次ADC校准。

校准阶段结束后,校准码储存在ADC_DR中。

图11-1-3为ADC校准时序图。

注意:

1建议在每次上电后执行校准。

2启动校准前,ADC必须处于关电状态(ADON=’0’)超过至少两个ADC时钟周期。

图11-1-3校准时序图

11.1.4数据对齐

ADC_CR2寄存器中的ALIGN位选择转换后数据储存的对齐方式。

数据可以左对齐或右对齐,如图11-1-4和图11-1-5所示。

注入组通道转换的数据值已经减去了在ADC_JOFRx寄存器中定义的偏移量,因此结果可以是一个负值。

SEXT位是扩展的符号值。

对于规则组通道,不需减去偏移值,因此只有12个位有效。

1》数据右对齐

注入组

SEXT

SEXT

SEXT

SEXT

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

规则组

0

0

0

0

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

图11-1-4

2》数据左对齐

注入组

SEXT

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

规则组

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

0

图11-1-5

11.1.5可编程的通道采样时间

ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:

0]位而更改。

每个通道可以以不同的时间采样。

总转换时间如下计算:

TCONV=采样时间+12.5个周期

例如:

当ADCCLK=14MHz和1.5周期的采样时间

TCONV=1.5+12.5=14周期=1μs

11.1.6外部触发转换

转换可以由外部事件触发(例如定时器捕获,EXTI线)。

表11-1-2、表11-1-3、表11-1-4、表11-1-5描叙了不同通道外部触发的EXTSEL位设定值。

如果设置了EXTTRIG控制位,则外部事件就能够触发转换。

EXTSEL[2:

0]和JEXTSEL2:

0]控制位允许应用程序选择8个可能的事件中的某一个可以触发规则和注入组的采样。

注意:

当外部触发信号被选为ADC规则或注入转换时,只有它的上升沿可以启动转换。

表11-1-2ADC1和ADC2用于规则通道的外部触发

触发源

类型

EXTSEL[2:

0]

定时器1的CC1输出

片上定时器的内部信号

000

定时器1的CC2输出

001

定时器1的CC3输出

010

定时器2的CC2输出

011

定时器3的TRGO输出

100

定时器4的CC4输出

101

EXTI线11

外部管脚

110

SWSTART

软件控制位

111

注:

TIM8_TRGO事件只存在于大容量产品

对于规则通道,选中EXTI线路11和TIM8_TRGO作为外部触发事件,可以通过设置ADC1和ADC2的ADC1_ETRGREG_REMAP位和ADC2_ETRGREG_REMAP位实现。

表11-1-3ADC1和ADC2用于注入通道的外部触发

触发源

类型

JEXTSEL[2:

0]

定时器1的TRGO输出

片上定时器的内部信号

000

定时器1的CC4输出

001

定时器2的TRGO输出

010

定时器2的CC1输出

011

定时器3的CC4输出

100

定时器4的TRGO输出

101

EXTI线15

外部管脚

110

SWSTART

软件控制位

111

注:

TIM8_CC4事件只存在于大容量产品

对于规则通道,选中EXTI线路15和TIM8_CC4作为外部触发事件,可以通过设置ADC1和ADC2的ADC1_ENTRGINJ_REMAP位和ADC2_ENTRGINJ_REMAP位实现。

表11-1-4ADC3用于规则通道的外部触发

触发源

类型

EXTSEL[2:

0]

定时器3的CC1输出

片上定时器的内部信号

外部管脚

000

定时器2的CC3输出

001

定时器1的CC3输出

010

定时器8的CC1输出

011

定时器8的TRGO输出

100

定时器5的CC1输出

101

定时器5的CC3输出

110

SWSTART

软件控制位

111

表11-1-5ADC3用于注入通道的外部触发

触发源

类型

EXTSEL[2:

0]

定时器1的TRGO输出

片上定时器的内部信号

外部管脚

000

定时器1的CC4输出

001

定时器4的CC3输出

010

定时器8的CC2输出

011

定时器8的CC4输出

100

定时器5的TRGO输出

101

定时器5的CC4输出

110

SWSTART

软件控制位

111

软件触发事件可以通过对寄存器ADC_CR2的SWSTART或JSWSTART位置’1’产生。

规则组的转换可以被注入触发打断。

11.1.7DMA请求

因为规则通道转换的值储存在一个唯一的数据寄存器中,所以当转换多个规则通道时需要使用DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。

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

注:

只有ADC1和ADC3拥有DMA功能。

由ADC2转化的数据可以通过双ADC模式,利用ADC1的DMA性能来实现。

11.1.8双ADC模式

在有2个或以上ADC的器件中,可以使用双ADC模式。

在双ADC模式里,根据ADC1_CR1寄存器中DUALMOD[2:

0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同时触发。

注意:

在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。

但是,主和从ADC的外部触发必须同时被激活。

共有6种可能的模式:

1》同时注入模式

2》同时规则模式

3》快速交替模式

4》慢速交替模式

5》交替触发模式

6》独立模式

还有可以用下列方式组合使用上面的模式:

1》同时注入模式+同时规则模式

2》同时规则模式+交替触发模式

3》同时注入模式+交替模式

注意:

在双ADC模式里,为了从主数据寄存器上读取从转换数据,DMA位必须被使能,即使并不用它来传输规则通道数据。

11.1.9温度传感器

温度传感器可以用来测量器件周围的温度(TA)。

温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。

温度传感器模拟输入推荐采样时间是17.1μs。

图11-1-6是温度传感器的方框图。

当没有被使用时,传感器可以置于关电模式。

注意:

必须设置TSVREFE位激活内部通道:

ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换。

1.主要特征

支持的温度范围:

-40到125度

精确度:

+/-1.5°C

温度传感器和VREFINT通道框图

图11–1-6温度传感器框架图

2.读温度

为使用传感器:

1》选择ADCx_IN16输入通道

2》选择采样时间大于2.2μs

3》设置ADC控制寄存器2(ADC_CR2)的TSVREFE位,以唤醒关电模式下的温度传感器

4》通过设置ADON位启动ADC转换(或用外部触发)

5》读ADC数据寄存器上的VSENSE数据结果

6》利用下列公式得出温度

温度(°C)={(V25-VSENSE)/Avg_Slope}+25

这里:

V25=VSENSE在25°C时的数值

Avg_Slope=温度与VSENSE曲线的平均斜率(单位为mV/°C或μV/°C)

参考电气特性章节中V25和Avg_Slope的实际值。

注意:

传感器从关电模式唤醒后到可以输出正确水平的VSENSE前,有一个建立时间。

ADC在上电后也有一个建立时间,为了缩短延时,应该同时设置ADON和TSVREFE位。

11.1.10ADC中断

规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。

它们都有独立的中断使能位。

表11-1-6为ADC中断表

注:

ADC1和ADC2的中断映射在同一个中断向量上,而ADC3的中断有自己的中断向量。

ADC_SR寄存器中有2个其他标志,但是它们没有相关联的中断:

JSTRT(注入组通道转换的启动)

STRT(规则组通道转换的启动)

表11-1-6ADC中断

中断事件

事件标志

使能控制位

规则组转换结束

EOC

EOCIE

注入组转换结束

JEOC

JEOCIE

设置模拟看门狗状态位

AWD

AWDIE

11.2实现ADC最佳精度

11.2.1ADC模块自身相关的误差

在STM32F10xxx的数据手册中,给出了不同类型的ADC精度误差数值。

通常,精度误差是以LSB为单位表示。

电压的分辨率与参考电压相关。

电压误差是按照LSB的倍数计算:

1LSB=VREF+/212或VDDA/212。

1.偏移误差

这是定义为从第一次实际的转换至第一次理想的转换之间的偏差。

当ADC模块的数字输出从0变为1的时刻,发生了第一次转换。

理想情况下,当模拟输入信号介于0.5LSB至1.5LSB表达的范围之内时,数字输出应该为1;即理想情况下,第一次转换应该发生在输入信号为0.5LSB时。

偏移误差以EO标注。

例子说明

对于STM32F10xxx的ADC模块,最小的可检测到的电压增量变化,按LSB表示为:

1LSB=VREF+/4096(或对于没有VREF+管脚的产品:

VDDA/4096)

如果VREF+=3.3V,理想情况下输入402.8μV(0.5LSB=0.5x805.6μV)时,产生数字输出1。

然而实际上,这时ADC模块的读数可能仍然为0。

如果在输入电压达到550μV时,才能得到数字输出1,则:

偏移误差EO=实际的转换-理想的转换

EO=550μV-402.8μV=141.2μV

EO=141.2μV/805.6μV=0.17LSB

当输入的模拟电压大于0.5LSB产生第一次的转换,则偏移误差是正值。

图11-2-1显示了正的偏移误差:

图11-2-1正的偏移误差

当输入的模拟电压小于0.5LSB产生第一次的转换,则偏移误差是负值。

下图显示了负的偏移误差。

如果输入的模拟电压VAIN=VSSA并且ADC产生了一个非0的数字输出,则偏移误差是负值,即一个负电压产生了第一次的转换。

2.增益误差

增益误差定义为最后一次实际转换与最后一次理想转换之间的偏差。

增益误差以EG标注。

最后一次实际转换是从FFEh至FFFh的变换。

理想情况下,当模拟输入电压等于VREF+–0.5LSB时产生从FFEh至FFFh的变换,因此对于VREF+=3.3V的情况,最后一次理想转换应该在3.299597V。

如果ADC数字输出为FFFh时,VAIN

例子说明

增益误差EG=最后一次实际转换–最后一次理想转换

如果VREF+=3.3V并且VAIN=3.298435V时产生了从FFEh至FFFh的变换,则:

EG=3.298435V–3.299597V

EG=–1162μV

EG=(–1162μV/805.6μV)LSB=–1.44LSB

如果在VAIN等于VREF+时不能得到满量程的读数(FFFh)时,增益误差是正值,即需要一个大于VREF+的电压才能产生最后一次变换。

3.微分线性误差

微分线性误差(DLE)定义为实际步长与理想步长之间的最大差别。

这里的“理想”不是表示理想的转换曲线,而是表示ADC的分辨率。

ED=实际转换步长–1LSB

理想情况下,当模拟输入电压改变1LSB应该在数字输出上同时产生一次改变。

如果数字输出上的改变需要输入电压大于1LSB的改变,则ADC具有微分线性误差。

因此,DLE对应于需要改变一个数字输出所需的最大电压增量。

例子说明

一个给定的数字输出,应该对应到一个模拟输入的范围。

理想情况下,步长应为1LSB。

假定在模拟输入电压在1.9998V至2.0014V,得到了相同的数字输出,则步长宽度是2.0014V–1.9998V=1.6mV,此时ED是高端(2.0014V)与低端(1.9998V)的差减去1LSB对应的电压。

如果VREF+=3.3V,模拟输入1.9998V(9B1h)可以产生的输出结果介于9B0h和9B2h之间;同样,模拟输入2.0014V(9B3h)可以产生的输出结果介于9B2h和9B4h之间。

这样对应9B2h的综合电压变化范围是:

9B3h–9B1h,即:

2.0014V–1.9998V=1.6mV(1660μV)

ED=1660μV–805.6μV

ED=854.4μV

ED=(854.4μV/805.6μV)LSB

ED=1.06LSB

这里我们假定高于2.0014V的电压都不能得到9B2h的数字输出结果。

当步长宽度小于1LSB,误差ED是负值。

4.积分线性误差

积分线性误差(ILE)是所有实际转换点与终点连线之间的最大差别。

ILE以EL标注。

终点连线可以理解为在A/D转换曲线上,第一个实际转换与最后一个实际转换之间的连线;EL是每一个转换与这条线之间的偏差。

因此,终点连线对应于实际转换曲线,而与理想转换曲线无关。

ILE也被称为积分非线性误差(INL),ILE是DLE在所有范围内的积分。

例子说明

如果第一次转换(从0至1)发生在550μV,而最后一次转换(从FFEh至FFFh)发生在3.298435V(增益误差),则在转换曲线上,实际数字输出1h至FFFh之间的连线就是终点连线。

5.总未调整误差

总未调整误差(TUE)定义为实际转换曲线和理想转换曲线之间的最大偏差。

这个参数表示所有可能发生的误差,导致理想数字输出与实际数字输出之间的最大偏差。

这是在对ADC的任何输入电压,在理想数值与实际数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1