S32K ADC配置详解 EB tresos

本文详细介绍了如何配置S32K312微控制器(MCU)的ADC功能,包括在MCU层面启用ADC模块,设置PORT模块将PTC11配置为ADC输入,以及在ADC模块中选择中断模式进行转换。此外,还涉及到在PORT界面配置通道,以及在ADC界面添加通道和定义触发模式,特别是软件触发的使用。

ADC配置详解

涉及模块:MCU、PORT、ADC

MCU

ADC功能模块需要在MCU进行使能,312有两个ADC模块(ADC0和ADC1),需要用到哪些ADC资源,就在MCU对应位置进行使能。新增MCU modesettingcof时,peripheral内容为空,点击Add required elements即可添加基本的外设模块

一般来说MCU主要功能为配置时钟和模式,时钟配置比较复杂后续单独讲解

在MCU/MCU modesettingcof/McuModeSettingConf_0/MCUperipheral选项卡对ADC外设进行使能。使能时,在对应模块的peripheral clock enable 进行勾选即可,比如我们ADC0和ADC1都有使用,在此处两个ADC模块都有勾选。

PORT

我们需要在PORT模块将对应端口配置为ADC,再用于ADC功能

将PTC11配置为ADC功能

首先确定PTC11的MSCR值,提供两种方法:

  1. 根据推算

每个端口组有32个引脚,以PTA为例,从PTA0到PTA31对应了MSCR取值0到31,那么对于PTB0到PTB31就从31到63,以此类推;

  1. 根据S32DS查看

打开S32DS,打开工程右上角的pins选项,选择所需的封装格式,例如我们选择了S32K312 100脚的封装格式

点击PTC11,75即为该管教的MSCR值,同时再该界面还可以查看PTC11能配置的模式

我们在PORT界面配置一个通道,命名为ADC_CH1,portpin mode选择为ADC0_S17,direction选择为In

ADC

接下来在ADC界面进行配置,首先添加ADC硬件模块,312有两个ADC模块(ADC0和ADC1)

ADC_CH1对应的ADC通道为ADC0_S17,所以我们选择ADC0,双击进入,在general界面可配置ADC模块的转换类型,有中断和DMA两种模式,中断模式适合通道数比较少,速率不高的时候,DMA适合通道较多,速率高的时候,这里我们选择中断

中断模式:转换结果通过中断进行通知

DMA:DMA的意思为直接访问内存,不经过CPU,在一定程度上可以降低CPU负载  

      

在Adcinterrupt添加所需中断

接下来在ADC channel新增一个channel,配置如下:

命名为ADC_channel1;

Logical ID为默认分配,一般不需要进行修改;

Physical channel name 选择S17_ChanNum41;

Physical Channel ID  选择41,即S17_ChanNum41的后缀

ADC触发模式主要分为两种:软件触发和硬件触发,硬件触发又分为普通的硬件触发和BCTU触发,关于硬件触发后续进行讲解,这里我们采样软件触发的模式

在AUTOSAR的架构中,软件触发意味着通过Adc_ReadGroup(groupID,buffer)去操作ADC,即操作对象为group而非channel,因此我们需要定义group,添加一个group

配置如下:

Adc Group Access Mode:选择single,如果选择stream则表示采样流模式;

Adc Group Conversion Mode:选择oneshot(单次触发),continious为循环触发;

Adc Group Conversion Type:选择normal

Adc Group Trigger Source:触发源选择SW,即软件触发

最后在AdcGroupDefination中添加我们配置的ADC通道,也就是说我们当前配置的通道组中含有一个ADC通道,对当前通道组进行操作即可实现ADC的转化与数据读取

配置EB(Elektrobit)工具链下的ADC模块通常涉及多个步骤,包括使用EB Tresos等工具进行配置、生成代码以及编写必要的应用层代码。以下是一个基于NXP S32K144微控制器的ADC配置指南,适用于EB Tresos工具链[^3]。 ### 三、EB ADC配置流程 #### 1. 启动EB Tresos并加载项目 - 打开EB Tresos Studio。 - 加载或创建一个新的MCAL项目,并选择正确的ECU型号(如S32K144)。 #### 2. 配置ADC模块 在EB Tresos中找到ADC模块并开始配置: ##### a. 创建ADC实例 - 在组件树中找到`Adc`模块,并添加一个实例。 - 为该实例命名,例如`Adc_0`。 ##### b. 设置全局参数 - **Clock Settings**:选择ADC模块使用的时钟源和频率。 - **Resolution**:设置分辨率(如12位)[^1]。 - **Conversion Mode**:选择转换模式,如单次转换或连续转换[^1]。 - **Trigger Source**:定义触发ADC转换的方式,可以是软件触发或硬件事件(如PWM中断)[^3]。 ##### c. 配置ADC通道 - 展开`Adc_0`实例,进入`AdcChannel`子项。 - 添加需要使用的通道(如`AdcChannel_0`),并指定: - **Channel ID**:对应于物理引脚上的ADC通道(如ADC0)[^1]。 - **Input Channel**:选择具体的模拟输入通道。 - **Reference Voltage**:参考电压设置(如内部VREF或外部VDDA/VSSA)。 ##### d. 配置扫描组(Scan Group) - 创建一个`AdcScanGroup`对象来组织多个通道。 - 将之前创建的通道加入到这个扫描组中。 - 设置每个通道的采样时间和其他特定属性。 ##### e. 配置DMA支持(可选) - 如果希望使用DMA进行高效的数据传输,则需启用DMA功能。 - 指定DMA通道并与ADC结果缓冲区关联。 #### 3. 生成代码 完成所有配置后,点击“Generate Code”按钮以生成符合AUTOSAR规范的驱动程序代码。这将自动生成`Adc_Cfg.h`和`Adc_Cfg.c`文件,其中包含所有必要的结构体和初始化函数。 #### 4. 应用层代码编写 最后,在应用程序中调用生成的API来启动ADC转换并处理数据: ```c #include "Adc.h" // 初始化ADC void InitAdc(void) { Adc_Init(&AdcConfig); // 使用配置结构体初始化ADC } // 启动一次转换 void StartConversion(void) { Adc_StartGroupConversion(ADC_GROUP_0); // 假设已定义GROUP_0 } // 获取转换结果 uint16 GetAdcResult(void) { uint16 result; Adc_GetGroupResult(ADC_GROUP_0, &result); return result; } ``` ### 四、注意事项 - 确保GPIO端口被正确配置为模拟输入模式,否则ADC无法正常工作。 - 当使用DMA时,务必检查内存对齐要求以及DMA控制器的能力限制。 - 对于实时性要求较高的场景,考虑中断服务例程(ISR)与DMA结合使用的优化策略[^3]。 - 测试期间应仔细监控电源稳定性及噪声水平,因为它们直接影响ADC精度。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值