全部
  • 全部
  • 解决方案
  • 技术问答
  • 视频中心
  • 知识分享
  • 技术资讯
  • SEED产品
400-048-1230
订阅
  • 首页
  • 解决方案
  • 技术问答
  • 视频中心
  • 知识分享
  • 技术资讯
  • SEED产品
连载 | 带你深入了解NXP汽车通用控制器S32K3 (三):ADC入门篇
来源:Arrow 发布:2022/03/02 浏览量:1327

32K3系列MCU有多达3个硬件ADC,ADC通道分为3组:精度组、标准组和外部组

 

ADC配置一览

 

S32K3系列MCU有多达3个硬件ADC,ADC通道分为3组:精度组、标准组和外部组(每个组具有独立的配置设置和不同的精度/性能级别),下表是目前S32K3的ADC配置情况:

 

表格1  ADC配置

 

表格2  ADC分组配置

 

表格3  ADC最大时钟频率

 

特性:

 

  • 分辨率:可选择的分辨率8、10、12、14位,但是转换结果总是15bit,即使我们选择了8bit 分辨率;如果需要较高的转换速率,可以尝试将分辨率选择为8bit,此时转换速度会有提高,但是转换结果仍为15bit。

  • 采样转换时间:1us,高达采样率1M samples/second。

  • 转换模式:

        ✓ 标准转换:单次模式或者连续模式
         注入转换:仅支持单次转换
         BCTU转换:单通道或者列表转换
  • DMA通道可编程

  • 通道预采样可编程

  • 硬件平均以及模块自检

 

ADC模块硬件结构框图

 

 

上图,数据流从左—>右,ADC从采集到转化,基本经历以下几个过程:

 

  1. Normal,Injection,BCTU三组信号采集以后,首先警告优先级复用器,进行优先级仲裁。

  2. 通道选择由Channel Select 模块进行确认,这个取决于我们软件的实际配置情况。

  3. FSM模块将从IDLE模式切换到CONVERT模式。

  4. FSM状态机切换到转换模式以后,输出信号给ConversionControl模块,准备启动通道转换,转换通道由Channel Select模块提供。

  5. 转换:Conversion Control采集选定的采样通道,采样以后将数据进行处理并保存,其中包括误差校正,采样结果+err_correction[14:0],这个值在ADC校准时可得到,采样N次以后,进行硬件平均,将经过硬件平均的采样值[14:0]写入采样结果寄存器;(硬件平均功能需要使能,MCR[AVGEN] = 1)。

  6. 单次采样完成以后,FSM状态机自动回到IDLE模式,Channel Select模块选择下一个需要转换的通道,FSM切换会转换模式,重复以上3-5步骤,直到所有转换完成。

  7. 当然,以上是正常转换过程,如果出现异常情况,可以查看用户手册,进行处理,这里不一一列举。

 

ADC的触发机制

S32K3目前主要支持BCTU,Normal,以及Injection三种转换方式,对应软件以及硬件两种触发方式,标准组合注入组大家会比较熟悉,这里主要是介绍一下BCTU的软件以及硬件触发。

 

软件触发

  • Normal转换模式:设置NSTART位

  • Injection转换模式:设置JSTART位

  • BCTU转换模式:设置SFTRGn位

 

硬件触发

  • Normal转换模式:通过配置TRGMUX来配置硬件触发源

  • Injection转换模式:通过配置TRGMUX来配置硬件触发源

  • BCTU转换模式:共计72个触发源,其中69个通过eMIOS通道来触发,剩余3个是其他模块通过TRGMUX触发

 

ADC引脚映射

前面讲到ADC主要有精度组、标准组和外部组,目前对应的引脚如下:

 

在实际开发时,为了加快开发进度,我们可以通过打开ADC的例程,利用S32DS IDE来确认引脚是属于精度组、标准组和外部组的哪个分类。

 

以下三张图,分别是选择了对应外部组,精度组以及标准组的输入引脚,选择对应的引脚配置引脚属性,重新生产代码即可。

 

 

 

ADC实战配置

这里我们先实际通过Tresos Studio 28.0来配置一个ADC软件触发扫描模式的Demo,边操作边介绍。

 

1.  导入模板工程

如需该模板,请联系我们。

 

 

2.  添加ADC模块

 

3.  配置ADC模块

 

4.  确认对应的ADC引脚

评估板上,电位器输入引脚为PTA11,查询该引脚如下图:

 

PTA1为ADC1_S10输入通道,以上为S32DS 3.4Z 中截图,该IDE可以直接查看对应引脚以及寄存器配置,因此我们没有浓墨重彩去介绍寄存器配置。

 

5.  DIO模块配置

S32K3引脚数众多,因此K3系列在进行引脚命名时,定义了ABCDEF等Port,每一个Port对应至多32个GPIO,其中Port AL=PTA[15-0],Port AH = PTA[16-31],这里引脚对应的是PTA11,因此在A_L里面定义。当然在EB Studio里面,任何设置如果不明白,可以直接将鼠标置于对应的位置,Studio右下角会有对应帮助文档。

 

帮助文档:

 

6.  双击A_L的索引 Index 0,打开DioChannel选项卡,点击“+”按钮,增加如下节点:PTA11_ADC1_Port0_In10,同时需要修改General选项卡,Dio Port ID为0,因为A_L的GPIO都是属于Port0,可以看上图,否则会报错。

 

7.  DIO以上已经配置完成,目前还有部分报错,我们继续配置Port模块,点开Port → PortConfigSet → PortContainer → PortPin,增加IO后,General选项卡的io number也应该+1,否则会报错。

 

增加PTA_ADC1_S10配置后,双击PTA_ADC1_S10的Index,进入该PTA_ADC1_S10条目进行配置,主要设置PortPinMscr的ID为11,同时修改该IO的复用为ADC1_ADC1_S10,其他保持缺省设置即可,这个时候对应的IO就已经配置为ADC1的输入通道AN_11。

 

8.  ADC时钟配置

这里PTA11在ADC1,因此我们需要使能ADC1的时钟,板级时钟配置都在MCU模块。打开Mcu → McuModuleConfiguration → McuModeSettingConf → McuModeSettingConf_Run → McuPartitionConfiguration → McuPeripheral,Peripheral Clock Enable选项卡,在ADC1一栏对应打 ✓。            

 

9.  配置ADC模块,如果按照上面配置,打开ADC模块选项卡,会发现如下错误:

 

这里我们需要仿照已经添加的节点,增加ADC1的配置;主要是增加EOC,以及WD两个中断,分别对应转换完成中断以及看门狗中断。如果仅仅添加我们用到的ADC1也是不够的,同时需要增加ADC2的EOC以及WD中断才行。

 

回到ADC General选项卡,设置为变量预编译

 

数据对齐模式为右对齐

 

Adc Timeout Method选择为系统时钟

 

Adc Conversion Time Once 设置使能,主要是设置完成单次转换;

 

Adc Channel Indexes Symbolic Names设置使能,这用于生成ADC符号名称,生成的符号名类似于:#define “ADC_GroupName”“ADC_ChannelName” “Channel index value”,主要是生成部分宏定义,方便我们程序使用。

 

Adc Enable Calibration API 主要是生产ADC校准相关API,填写对应的校准函数,用于获取上文提到的err_correction值。

 

打开ADC模块的AdcHwUnit,修改ADC硬件为Port0_ADC1_S10 以方便记忆,同时修改实际的ADC单元为ADC1,EB IDE里面默认为ADC0。

 

双击ADC1的Index索引0,进入ADC1的属性配置界面,修改数据传输模式为ADC中断模式;

 

设置预分频为2,校准分频为4,同时设置分辨率为10,通常来讲,如果我们选择的引脚是标准通道,也就是Standard引脚,分辨率通常选择12,如果选择是精准通道,分辨率我们选择为12或者14。

 

然后,使能AdcNormalConvTimings,后续如果我们需要使能硬件平均,直接勾选下面的硬件平均即可。

 

接着,选择Channel选项卡:修改AdcChannel的Name为Port0_ADC1_S10以方便区分。

 

接下来,双击AdcChannel索引,进入配置界面:Adc Physical Channel Name选择为S10_ChanNum34,同时修改Adc Physical Channel ID 为34。

 

修改AdcGroup,这里修改为Adc1Group1。

 

双击AdcGroup的Index值,进入Adc Group的配置阶段:

转换模式采用连续采样,转换类型采用正常模式,当然根据实际情况也可以选择注入组;Adc Group Trigger Source 选择为ADC_TRIGG_SRC_SW,因为我们目前是软件触发,如果是其他外设硬件触发,这里我们需要选择硬件触发。

 

由于是软件触发,因此Adc Group不需要额外中断触发:因此这里使能Adc Group Without Interrupts

 

配置完成以上后,会发现有其他错误

 

这里,需要去选择我们刚刚定义的AdcGroup,点击Adc → AdcConfigSet → AdcHwUnit → Port0_ADC1_S10 → AdcGroup → Adc1Group1 → AdcGroupDefinition,或者直接在上面填入:/Adc/Adc/AdcConfigSet/Port0_ADC1_S10/Port0_ADC1_S10

 

配置完成以上属性,我们基本完成所有配置,接下来就是根据配置生成MCAL的API。

 

10.  生成代码

 

到此,ADC简介以及MCAL的配置就结束了,后续根据MCAL生产的代码测试部分,将会在开发板上验证无误后给出。

 

参考资料:NXP® Semiconductors Official Site | Home

汽车电子 NXP
请使用浏览器分享功能 请点击右上角,进行分享