小猫爪:S32K3学习笔记05-S32K3之ADC

  • 1 前言
  • 2 资源简介
  • 3 ADC功能详解
    • 3.1 ADC mux-mode channels
    • 3.2 ADC内部框架
    • 3.3 时钟源
    • 3.4 通道类型
    • 3.5 触发信号
      • 3.5.1 标准触发
      • 3.5.2 注入触发
      • 3.5.3 BCTU触发
    • 3.6 校准和自检
      • 3.6.1 校准
      • 3.6.2 自检
    • 3.7 模拟门狗
    • 3.8 DMA和中断
    • 3.9 转换时间的计算
  • 4 使用注意事项
    • 4.1 CDR寄存器
  • 5 MCAL配置
  • 待续。。。。。

1 前言

  今天学习了一下S32K3的ADC模块,接下来做个总结。

2 资源简介

  下表是S32K3各型号拥有的ADC模块。

  下表是三个ADC模块拥有的体征:

  可以看到对于ADC的通道有Precision channels,Standard channels,Special Internal channels,External channels之分,至于这些类型的通道都有什么不同,还有这个图上的信息有点问题,后面会详细说到。

  表中还有一个BCTU trigger,这个就是一个硬件触发模块,可以通过配置BCTU去触发ADC转换,之后ADC转换的结果会传递到BCTU模块,一般在电力电子,电机控制应用中比较常见,后面会专抽一章来介绍BCTU。

3 ADC功能详解

3.1 ADC mux-mode channels

  这个指的就是一个pad可能会对应多个ADC通道,可以通过DCM寄存器中每个通道对应的GPR位来设置。下图例举了几个例子:

  所以说如果配置了一些PAD复用成AI后,还得观察一下这个PAD是否为ADC通道的默认引脚,如果不是的话,还得需要配置一下DCM寄存器。

3.2 ADC内部框架

  下图是ADC模块的内部框架图。

  乍一看上去巨复杂,但是要是仔细稍微那么一看,其实这个ADC模块也就是个纸老虎,非常简单。

  说得简单点就是当ADC接收到触发信号后,就会开始启动转换,转换完成后就会生成转换结果,DMA请求信号以及中断信号,如果使能了看门狗功能,还会输出看门狗的信号。

  说得复杂细致点,步骤如下:

  1. 当ADC接收到三种不同类型的触发器(BCTU、注入或正常)中的一种时,优先级多路复用器启动转换。
  2. 根据触发器类型和自检得配置,被选择的通道输入被转换
  3. 状态机(FSM)从空闲状态转换为转换状态。如果下一次要转换的通道为外部通道,那么转换在DSDR[DSD]配置的延迟后开始。
  4. 转换开始后,转换控制块将保持内部电容网络CDAC保持相同的CTRi[INPSAMP]的时间。
  5. 在比较阶段,CALBISTREG[RESN]定义了用于执行逐次逼近算法的步数。校准期间确定的误差校正值将添加到原始结果中。如果平均值被启用(MCR[AVGEN]=1),最多32个(通过MCR[AVGS]指定)转换结果被平均以获得后果。
  6. 当转换完成且所有平均步骤均已完成时:
    A. 转换完成信号置位。
    B. 转换_数据[14:0]写入数据结果寄存器。
    C. FSM状态机切换为完成状态。
  7. 通道选择块中的下一个输入被选择,FSM状态机切换到转换状态,第二次转换开始。这将持续进行,直到所有选定的通道输入都已转换。
  8. 如果启用了模拟看门狗,则将转换结果与配置的阈值进行比较。如果满足条件,可以触发中断。
  9. 自检可以检查ADC的完整性,可以与正常转换交错进行,也可以作为独立检查。
  10. 如果正在进行的转换被中止(通过将1写入MCR[ABORT]),或一组输入通道的转换被中止(通过将1写入MCR[ABORTCHAIN]),FSM将转换为空闲状态。如果MCR[ABORT]写1,则转换控制块停止当前转换;如果MCR[ABORTCHAIN]写1,则完成当前转换再中止转换。在这两种情况下,转换控制块的转换完成输出信号都会被置1。

3.3 时钟源

  ADC模块最高可支持的时钟频率到达80MHz,如果选择的时钟源超过80MHz的话,那么就需要设置ADC时钟分频器系数,是最后的ADC时钟在80MHz以内。下图显示在各个时钟源区间的分频设置,其中MCR[ADCLKSEL]设置分频系数,AMSIO[17]使能高速转换模式。

3.4 通道类型

  在一开始就说了由4种输入通道类型,分别是Precision channels,standard channels,special internal channels,那么这4种分别代表什么呢?

  1. Precision channels
    精确通道,转换结果分辨率能达到12bit。
  2. Standard channels
    标准通道,转换结果分辨率能达到10bit。
  3. Special internal channels
      这种就是通道的输入源在芯片内部,比如什么温度传感,REF等。在上面资源介绍中,表格上面显示有问题,其实真实情况应该是ADC0有5个,ADC1有4个,ADC2有4个。具体情况如下:


    其中ANAMUX_OUT的输入源就是芯片内部的一些电压点,可以通过DCMRWF1[SUPPLY_MON_SEL]字段来配置。
  4. External channels
      ADC提供三个外部解码信号,用于从外部模拟多路复用器的八个通道中选择一个通道。最多可以有四个这样的多路复用器用于连接32个外部通道。ADC根据选择用于转换的当前通道,自动设置解码信号以控制这些外部模拟多路复用器。

3.5 触发信号

  从ADC工作流程来看,其实S32K3的ADC模块非常的纯粹,一旦有触发信号过来,ADC模块就开始安装原先的配置转换当前被使能的通道。所以想要实现一些复杂的转换完完全全取决于触发信号的产生。下面就来一一来看ADC模块的三大类型的触发信号,分别是标准触发,注入触发,BCTU触发。

3.5.1 标准触发

  标准触发指的就是传统意思上的ADC触发,就是由软件或者硬件来启动一次DMA转换,转换模式可以是单次转换模式和连续扫描模式,单次转换模式就是把所有使能的标准通道(由NCMR寄存器使能)转换完成后就自动停止转换,而连续扫描模式就是连续循环转换。

  其中软件触发模式就是给MCR[NSTART]写1,而硬件触发就是通过TRGMUX模块来配置其他外设信号触发标准通道转换。

  转换的顺序为Precision—>standard—>external,同类型通道则从小往大。当所有使能的标准通道转换完成后ECH中断置位。

3.5.2 注入触发

  注入触发指的就是当一次注入触发信号来了,ADC模块就会立即去转换使能的注入通道(由JCMR寄存器使能),如果当前ADC模块正在转换标准通道,那么此时ADC会中断转换并开始转换注入通道,等注入通道转换完成后再恢复标准通道的转换。流程示意图如下:

  注入触发方式也是有软件触发和硬件触发两种,软件触发就是对MCR[JTRGEN]写1,而硬件触发就是通过TRGMUX模块来配置其他外设信号触发ADC注入通道转换。

  不同类型通道的转换顺利同上,当使能的注入通道全部转换完成后,JECH中断置位。

3.5.3 BCTU触发

  BCTU触发就是用外部模块BCTU发起信号去触发ADC模块。下图是两个模块之间的连接:

  其中BCTU发送给ADC触发信号Tregger和通道号Channel,而ADC模块则返回三个信号,分别是NextcmdEndcovdata, 其中Nextcmd表示ADC模块已经准备好接受下一次的触发信号了,Endcov表示当前转换完成,数据可用,至于data就是转换的结果数据。

  其中BCTU有两种模式去控制ADC,分别是BCTU Trigger mode和BCTU Control mode。

  1. BCTU Trigger mode
    这个模式其实就是增强型注入触发,处于该种模式下,当ADC模块接收到来自BCTU的触发信号时,ADC模块就会终止当前转换,立即响应BCTU的触发,原理和注入触发是一致的。也就是说三者的优先级关系为BCTU触发>注入触发>标准触发。所以当ADC处于响应BCTU的状态时,注入触发信号是无效的。
  2. BCTU Control mode
    这种模式就比较简单了,就是BCTU一家独大,完全接手ADC的控制权,此时只有BCTU可以启动转换,另外两种触发信号无效。

  另外值得注意的点就是BCTU触发信号一定在ADC校准成功后才能发出,不然会导致ADC校准失败,BCTU触发转换完成后,EOBCTU中断置位。

3.6 校准和自检

3.6.1 校准

  在介绍BCTU触发时,讲到了校准,校准就是ADC模块会在受控条件下对已知参考电压进行采样和转换,以确定偏移、增益和电容失配的校正值(校准值)。校准期间必须禁止一切触发信号。

3.6.2 自检

  对应安全应用,定期验证操作是否正确非常重要。因为S32K3是可以达到ASIL-D的MCU,为此,ADC具有自检功能。启用自检后,ADC会自动检查其组件,并在发现错误时标记错误。这里的自检功能非常复杂,在这里就不多介绍了,感兴趣的可以自行参考RM手册的Analog-to-Digital Converter (ADC)–>Functional description->Calibration and self-test章节。

3.7 模拟门狗

  模拟看门狗就是可以设置两个值THRHTHRL,当满足以下条件的一种时会产生中断信号,非常简单。

3.8 DMA和中断

  任何通道转换完成后都可以产生一个DMA请求信号,一旦启用,片上DMA控制器可以在每个通道转换后获取DMA请求并搬运结果。 可以在DMA Request Enable For Precision Inputs (DMAR0),DMA Request Enable For Standard Inputs (DMAR1), DMA Request Enable For Precision Inputs (DMAR0)寄存器中设置相应的屏蔽字段来激活和屏蔽相应通道的DMA。DMA屏蔽寄存器必须在开始任何转换之前进行编程。

  整个ADC模块有以下几种中断信号:

3.9 转换时间的计算

  转换时间当然是由ADC时钟来确定的了,至于ADC的时钟源配置在前面已经介绍过了,接下来就直接说计算方式了。

  1. 预采样时间(PST,等于ST并延时1个AD_clk周期,一般预采样不使能,所以一般等于0)
  2. 采样时间(ST,可配置,最小值为8个AD_clk周期)
  3. 比较时间(CT,固定,每bit 4个AD_clk周期)
  4. 数据处理时间(DP,固定,2个AD_clk周期)
  5. 触发处理时间(TPT,固定,1个AD_clk周期)

  所以,总转换时间=([(PST+ST+CT+DP)*通道数]+TPT)*AD_clk周期。

  举个例子:

  1. 转换时钟频率(AD_clk)为80 MHz(T=12.5 ns)
  2. ADC分辨率12位+1位用于特殊电容器(CS)
  3. 3个通道在NCMRx寄存器中编程(通道数=3)
  4. 未使能预采样(PST,0个周期)
  5. 采样时间保持默认(ST,22个周期)
  6. 转换时间(CT,每位4个周期)
  7. 数据处理时间固定(DP,2个周期)
  8. 触发处理时间是固定的(TPT,1个周期)

  所以,总转换时间=[( 0 + 22 +(4*13)+2)*3 ] + 1 = 229个周期~=2.862μs。

4 使用注意事项

4.1 CDR寄存器

  CDR寄存器是用来存储ADC转换结果的寄存器,每一个通道都对应一个CDR,其中低16位用来存储转换结果,但是只有其中15位有效,可以配置为是左对齐(即**CDR[15:1]有效)还是右对齐(即CDR[14:0]**有效)。

  另外不管你配置的ADC分别是多少位,最后CDR中存储的转换结果数据都是15bit,这个时候就需要通过软件移位来得到有效数据了,当然了这些SDK驱动都会帮做了。

  说到这里我们不得不提一下ADC的分辨率问题,虽然在ADC介绍中,提到ADC模块支持8/10/12/14bit分辨率,举个例子,如果说配置ADC模块为14bit分辨率,其实并不是说最后转换结果的精度为14bit,这里的意思指的是ADC模块在转换的时候会将最后结果比较到第14bit,至于结果是达不到14bit精度的,ADC的precision channel最高支持的精度为12bit,Standard channel最高支持的精度为10bit。

5 MCAL配置

待续。。。。。。

待续。。。。。

小猫爪:S32K3学习笔记05-S32K3之ADC相关推荐

  1. 小猫爪:S32K3学习笔记09-S32K3之Safety简介

    小猫爪:S32K3学习笔记09-S32K3之Safety简介 1 前言 2 Safety相关硬件介绍 3 Safety相关软件介绍 4 Safety文章目录 END 1 前言   接下来,就要开始进学 ...

  2. 小猫爪:S32K3学习笔记10-S32K3之EIM和ERM

    小猫爪:S32K3学习笔记10-S32K3之EIM和ERM 1 前言 2 EIM(Error Injection Module) 3 ERM(Error Reporting Module) 4 MCA ...

  3. 小猫爪:S32K3学习笔记11-S32K3之FCCU

    小猫爪:S32K3学习笔记11-S32K3之FCCU 1 前言 2 FCCU的功能框图 2.1 错误输入 2.2 时钟输入 2.3 FSM 2.4 FOSU 3 FCCU的状态机 4 MCAL配置 5 ...

  4. 小猫爪:S32K3学习笔记04-S32K3之LCU

    小猫爪:S32K3学习笔记04-S32K3之LCU 1 前言 2 LCU的框架 3 LC逻辑运算单元 3.1 input&output&sync&force 3.2 LUT b ...

  5. 小猫爪:S32K3学习笔记21-S32K3之SAF及其应用

    小猫爪:S32K3学习笔记21-S32K3之SAF及其应用 1 前言 2 SAF简介 3 SAF框架 4 SAF组件 4.1 eMcem和Bist 4.2 sReco 4.3 mSel 4.4 sBo ...

  6. 小猫爪:S32K3学习笔记03-S32K3之eMIOS

    小猫爪:S32K3学习笔记03-S32K3之eMIOS 1 前言 2 eMIOS资源介绍 3 CNT和Counter Bus 4 UC的工作模式 4.1 General-Purpose Input a ...

  7. 小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段

    小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段 1 前言 2 三个保障 2.1 EDC 2.2 XBIC 2.3 ECC 3 一个手段 END 1 前言   大家都知道,怎样保证数 ...

  8. 小猫爪:S32K3学习笔记18-S32K3之Safety外设总结

    小猫爪:S32K3学习笔记18-S32K3之Safety外设总结 总结 END 总结   在前面已经对S32K3对功能安全这一块相关的外设大致都介绍了一遍,这篇文章就来对S32K3与Safety有关的 ...

  9. 小猫爪:S32K3学习笔记20:S32K3之SCST及其应用

    小猫爪:S32K3学习笔记20:S32K3之SCST及其应用 1 前言 2 SCST简介 3 移植 4 应用 4.1 启动测试 4.2 使能FPU相关测试项 4.3 49号测试项中的MPU配置 4.4 ...

最新文章

  1. 用友伟库“抢劫”金算盘,调研数据究竟谁说了算?
  2. c语言推箱子给上颜色,本人的C语言大作业——推箱子
  3. rstudio 保存_Rstudio学习笔记
  4. python redis 哨兵_Redis哨兵机制
  5. yum配合rpm查看软件包安装位置
  6. 重载map排序(降序)及结构体新的赋值方式
  7. Microsoft SQL Server Protocols
  8. Delphi XE 操作sqlite数据库
  9. 秋招准备之——计算机操作系统
  10. 陀螺精选 | 2020年最值得重读的10篇文章
  11. macos 设置内外网同时访问
  12. 【POJ3207】Ikki's Story IV - Panda's Trick
  13. 【电子商务法】北邮国际学院大三上期末复习
  14. 数据科学 IPython 笔记本 四、Keras(下)
  15. 请仔细核对自己的信息
  16. 全民投资人游戏服务器维护,欢乐园《全民仙战》2月3日14时合服公告
  17. FishEye Crucible分析
  18. xp找不到局域网内其它计算机,在W10局域网内找不到其它共享电脑的解决方案
  19. 头歌 数据结构与算法答案 善用目录
  20. 【苹果CMS技术教程】苹果CMSV10宝塔全自动定时采集教程

热门文章

  1. 我的token鉴权机制hanhan
  2. 实战 | OpenCV如何将不同轮廓合并成一个轮廓(附Python / C++源码)
  3. 2022年制冷与空调设备运行操作考试模拟100题及答案
  4. 浅谈git rebase命令 -- git修改历史提交信息
  5. RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总
  6. 关于Notion导出PDF的建议
  7. 阿龙学堂-Spark 数据倾斜如何处理
  8. 自动关机及取消代码,bat文件代码
  9. 小型直播系统系列-乐聊TV的开发(二)
  10. 计算机专业大学排名评估,2020全国计算机专业大学排名