S32K144(14)ADC

1、简介

开发板S32K144+S32DS+JLINK,裸机版的程序编写

S32K14x包含两个12位ADC模块,ADC0和ADC1

  • 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可以在多个ADC转换完成后触发DMA,而不是每次ADC转换完成后触发
  • 双ADC模块支持交错(interleave)采样通道
  • ADC触发源:触发器通过PDB或TRGMUX连接,提供灵活的触发方案,PDB为ADC生成触发器和预触发器(ADC和PDB成对操作,每个PDB通道将有多达8个预触发器用于ADC通道控制,这提供了一个自动触发方案,因此无需CPU参与
  • CMP out、LPIT、RTC和LPTMR能够通过TRGMUX触发每个ADC。LPIT最多支持4个预触发器,这些预触发器只能在每个ADC的ADHWTS0-ADHWTS3上使用。对于其余的外设,需要软件配置来提供预触发器。请参见SIM_ADCOPT[ADCxSWPRETRG]配置软件预触发
  • ADC触发方案。ADC一般支持两种触发方式:默认的触发方案使用PDB触发ADC(建议)。另一个可选的触发方案是使用TRGMUX。请注意对于TRGMUX触发,最多只有4个预触发,SIM_ADCOPT[ADCxTRGSEL]字段用于控制ADC触发源/方案。当ADCxTRGSEL=0时,ADC预触发直接来自PDB。当ADCxTRGSEL=1时,ADC预触发来自TRGMUX,如在LPIT。

注意:在使用TRGMUX时,只有LPIT支持预触发器。对于其他外设,需要使用SIM_ADCOPT[ADCxSWPRETRG]配置软件预触发器

1.1、PDB触发方案是ADC的默认触发方案,

也是建议的触发方式。一个ADC和一个PDB作为一对:PDB0-ADC0, PDB1-ADC1。PDB0和PDB1的触发源可以分别通过TRGMUX_PDB0和TRGMUX_PDB1配置。

这里我们以PDB0-ADC0为例来指定触发方案。

  1. 设置SIM_ADCOPT [ADCxTRGSEL] = 0。
  2. 选择PDB0通道0作为ADC触发源。
  3. PDB0预触发器将直接连接到ADC0 ADHWTS端口来控制通道。
  4. ADC0 COCO信号被直接反馈回PDB0去激活PDB锁定状态。

下图说明了使用PDB触发ADC的典型案例:

1.2、LPIT触发ADC步骤:

LPIT最多支持4个通道,每个通道都有一个触发器和一个预触发器。

  1. 设置SIM_ADCOPT [ADCxTRGSEL] = 1。选择TRGMUX out作为ADC触发源。
  2. 配置TRGMUX以选择LPIT触发器作为ADC触发器和预触发器源。TRGMUX只支持每个ADC最多4个预触发器(pre-trigger0-pretrigger3;其他预触发器不能与TRGMUX一起使用)。
  3. ADC COCO在这种情况下是不需要的。软件必须适应每个ADC转换之间的间隔时间。
  4. 使用TRGMUX允许使用一个LPIT来同时触发两个adc。这是使用TRGMUX触发代替PDB触发的好处之一。

请注意对于除PDB和LPIT之外的触发器源,需要软件提供ADC预触发器。

1.3、被触发后的选择

可以选择触发启用和触发的任意组合;它们是相互独立的。但是在它被选中之后,就不能动态地更改它了。

定义了更改触发器和启用源(触发器和预触发器源)的步骤。改变触发源可以通过以下两种方法中的任何一种随时完成。

1.3.1、方法1

  1. 停止当前触发产生单元。
  2. 等待一个时间周期等于ADC工作时钟的2.5个周期和ADC主机接口时钟的1.5个周期,给锁存最后一个触发器的时间,如果有的话
  3. 轮询所有0的ADC_SC2[TRGSTLAT]的状态,它将在完成所有查询到那时为止的转换后变为0
  4. 更改所需源的选择,然后
  5. 启动新的触发单位

1.3.2、方法2需要立即切换

  1. 停止当前触发产生单元
  2. 通过设置ADC_CFG1[CLRLTRG]刷新触发器处理程序块的所有排队触发器,这将刷新除ADC正在处理的触发器(如果有的话)之外的所有排队触发器
  3. 等待一个时间周期等于ADC工作时钟的总2.5个周期
  4. 等待ADC_SC2[TRGSTLAT]的状态变为全0
  5. 更改所需源的选择,然后启动新的触发单位

请注意如果不遵循上述限制,则可能不会报告此流程错过的触发器

1.4、ADC模块的特点

  • 高达12位分辨率的线性逐次逼近算法
  • 单端12位、10位、8位输出模式
  • 输出为右对齐的无符号格式
  • 单次或连续转换模式
  • 可配置样品时间和转换速度/功率
  • 转换完成/硬件平均完成标志中断
  • 可选软件触发转换/硬件触发AD转换(触发源和通道有相应的PDB模块和TRGMUX配置)
  • 支持可编程自动比较(大于、小于、等于,范围内或超出范围)功能
  • 支持硬件2/4/8/16/32次采样平均输出功能;
  • 外部可选参考电压VREFH/VREFL
  • 自校准功能,保证ADC采样精度,在完成ADC模块初始化后开始ADC采样转换前,必须做自校准(调用S32K SDK ADC组件的相应API函数即可),才能获得TUE=±4LSB 的转换精度
  • ADC的采样保持时间必须设置的足够长,以满足ADC通道间切换时内部采样电容能够真实反映外部信号的最快变化

2、原理图

3、寄存器

3.1、SC1A - aSC1P: ADC Status and Control Register 1

SC1A用于软件和硬件触发模式的操作。

Field

Name

Description

0-5

ADCH

输入通道选择

6

AIEN

转换完成中断使能

7

COCO

转换完成标志

3.2、CFG1: ADC Configuration Register 1

配置寄存器1 (CFG1)选择操作方式、时钟源、时钟分频。

Field

Name

Description

0-1

ADICLK

输入时钟选择

2-3

MODE

选择ADC的分辨率

5-6

ADIV

输入时钟分频

8

CLRLTRG

清除所有锁触发器

3.3、CFG2: ADC Configuration Register 2

CFG2 (Configuration Register 2)在长采样模式下选择长采样时间

Field

Name

Description

0-7

SMPLTS

采样周期选择

3.4、RA - aRP: ADC Data Result Registers

数据结果寄存器(Rn)包含通道ADC转换的结果,下表描述了不同的数据结果寄存器模式的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值