超详细教程 | Hands-On 基于 Flagchip FC4150 MCAL-ADC 读取电位器值

简介

       本文将详细介绍如何使用 EB 工具配置 Flagchip FC4150 MCAL ADC 读取电位器值。并重点强调了配置 ADC 模块的过程以及对 ADC 模块的详细解释。关于 mcu、port 、dio、icu 模块可参考之前发布的博文。本次示例演示将会使用 ADC0_SE0、ADC0_SE4 通道、采用中断方式进行电位器值的读取。

硬件平台:旗芯微 FC4150 DEMO BOARD V2 开发板

软件平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04

MCAL: V1.1.0 & V1.1.1

一、MCAL 配置

        1.1 配置 MCU 模块

        1.1.1 根据 demo board 电位器原理图所示,我们需要在MCU模块-> PCC下添加Port A 、E、ADC 0的外设并配置为时钟使能。

▲ 图 1.1.1

▲ 图 1.1.2

       1.1.2 在 McuClockReferencePoint 设置添加 McuClockReferencePoint_Adc0 参考时钟源

▲ 图 1.1.3

1.2 配置 PORT 模块

        1.2.1 进入 Port A  的 PortPin 界面下,添加  PTA25 引脚并命名为 Varistor1,配置 PTA25 为 ADC_SE0 、输入模式,默认电平为低。

▲ 图 1.2.1

1.2.2 进入 Port E  的 PortPin 界面下,添加  PTE4 引脚并命名为 Varistor2,配置 PTE4 为 ADC_SE04、输入模式,默认电平为低。

▲ 图 1.2.2

1.3配置 ADC 模块

        1.3.1 在Module Configurations 中添加 ADC模块,在 ADC模块中的  AdcHwUnit下添加 ADC 0 外设。    


▲ 图 1.3.1 

        1.3.2 双击 Index 0 进入 Adc HwUnit_0 配置界面,在 General 下配置 ADC 时钟参考源、ADC 位数 12 位、ADC 参考电压源为内部、AdcSampleTimeOptions 默认即可。  

▲ 图 1.3.2 

        1.3.3 进入 AdcChannel的 配置界面,添加两个 ADC 通道,将 Adc Hardware Channel Id 更改为与原理图对应的 ADC0_SE0、ADC0_SE4 通道

▲ 图 1.3.3

1.3.4 进入 AdcGroup 的配置界面添加 AdcGroup_0

▲ 图 1.3.4

       1.3.4.1 双击 Index 0 进入 AdcGroup_0 配置界面,在 General 下配置 ADC 组,将 ADC 组配置模式设置为单次读取,转换模式设置为单次转换,触发模式设置为软件触发、设置转换类型为中断方式,填写组转换完成的回调函数 IoHwAb_Adc_Notification_0

▲ 图 1.3.4.1

        1.3.4.2 在 AdcGroupDefinition下添加刚刚配置好的两个通道,分配给 ADC 组 0

▲ 图 1.3.4.2

1.3.5 在 AdcInterrupt 下选择 ADC 0 中断使能

▲ 图 1.3.5 

二、示例代码解析

2.1 将 EB 配置好的工程编译并更新代码至 FCIDE 中

2.2 Main 函数

       将 Bsp_Adc_Init、BSP_FCUART_Init 函数取消屏蔽,Bsp_Adc_20ms_Task_Event、Bsp_Adc_1s_Task_Event 函数添加至任务时间片函数中

▲ 图 2.2.1

▲ 图 2.2.2

2.3  Adc_PBcfg.c

       我们可以看到 ADC0_SE0、ADC0_SE4 在EB 工具配置好的属性与回调函数的声明

▲ 图 2.3.1(ADC硬件模块配置属性)

▲ 图 2.3.2(ADC通道配置属性)

▲ 图 2.3.2(ADC组配置属性)

2.4 Bsp_Adc.c

       2.4.1 在 demo 示例中编写 IoHwAb_Adc_Notification_0 函数实体,添加  Adc0_Group0_Ready = TRUE;

▲ 图 2.4.1

         2.4.2 找到 Bsp_Adc_Init、Bsp_Adc_20ms_Task_Event、Bsp_Adc_1s_Task_Event 这是 demo 示例对 MCAL API 的调用

▲ 图 2.4.2.1

▲ 图 2.4.2.2

三、烧录 & 调试

3.1 将工程编译并烧录到开发板

       打开串口助手软件,波特率设置为 115200 ,观察到两个电位器的 ADC 值已被 MCU 成功读取

▲ 图 3.1

四、MCAL ADC 模块详解

FC4150 ADC 模块提供 8/10/12 位转换精度、单次/连续转换模式、软/硬触发、单通道采样时间配置、硬件均值滤波等功能

4.1 General 配置

▲ 图 4.1

       ①AdcGeneral

  • Adc_DeInit API:复位 ADC 配置
  • Adc Development Error Detection :ADC 模块开发错误检测使能
  • Adc Enable Limit Check:启用 ADC 转换结果进行上下限检测
  • Adc Enable Queuing :ADC 队列启用,触发源可以转换一个队列
  • Adc_StartStopGroup API :控制 ADC 组的启动、停止转换
  • Adc Group Notification Capability:启用在 ADC 组转换时的通知
  • Adc Hw Trigger API:启用硬件触发
  • Adc_ReadGroup API :读一个 ADC 组的转换结果
  • Adc_VersionInfo API: 读 ADC 模块版本信息
  • Adc Priority Mechanism:设置 ADC 转换的优先级
  • Adc Result Alignment:ADC 转换结果对齐方式
  • Adc Timeout:用于初始化时,对 ADC 校准时间计时,如果超出 Timeout 配置时间,则会返回超时状态
  • Adc Dma Transfering Timeout:用于 DMA 传输时,对 DMA 传输时间计时,如果超出 Timeout 配置时间,则会返回超时状态
  • Adc Max Queue Depth:ADC 转换请求的最大队列深度

       ②AdcPublishedInformation

  • 该模块不需要配置

       ③IAutosarExt

  • Adc Disable Production Error Reporting:禁用 ADC 采集错误反馈
  • Adc Set Hardware Average Once:启用 ADC 硬件均值滤波
  • Adc Global Enable DMA Transfer: 使能 ADC 组的 DMA 传输
  • Enable Adc User Mode Support:不需要配置
  • Adc Continuous Without Interrupt Uses:ADC 配置为连续模式的时候不触发中断

      ④Adc Dem Event Parameter Refs

  • 该模块用不到

4.2 AdcHwUnit配置

       最多可添加2个ADC外设(硬件决定)

▲ 图 4.2

       4.2.1 双击 Index0 进入AdcHwUnit0-> General配置界面

▲ 图 4.2.1

  • Adc Hardware Unit: ADC 硬件外设 Id 号
  • Adc Logical Unit: ADC 逻辑 Id 号
  • Adc Clock Reference:ADC 参考时钟源,在 MCU->McuClockReferencePoint 中配置
  • Adc Voltage Reference Selection: ADC 参考电压源
  • Adc Dma Channel :配置 ADC DMA 传输通道
  • Adc Alignment:ADC 转换结果对齐
  • Adc Resolution:ADC 分辨率
  • ADC Startup Counter:在开始转换前,设定一个 ADC 稳定时间
  • Adc Pre-Trigger Select:设定预触发源
  • Adc Trigger Select :设定触发源
  • Adc Sample Time Option x :设定 ADC 采样时间
  • Adc Ptimer Prescaler Divider Select :ADC ptimer 的预分频器配置
  • Adc Ptimer Multiplication Factor Select for Prescaler :ADC ptimer 的倍频因子配置
  • Ptimer Sequence Error Interrupt Enable :使能 Ptimer 序列错误中断
  • Ptimer Sequence Error Notification :填写序列错误中断的回调函数名称
  • Adc Hardware Average Enable :ADC 硬件均值滤波使能
  • Adc Hardware Average Select :ADC 硬件均值滤波个数

       4.2.2 AdcHwUnit0-> AdcChannel 最多可支持 32 个外部通道 ,4 个内部通道

▲ 图 4.2.2

       4.2.3 双击 Index0 进入 AdcHwUnit0-> AdcChannel-> AdcChannel_0 配置界面

▲ 图 4.2.3

  • Adc Logical Channel ID: ADC 通道逻辑 ID 号
  • Adc Hardware Channel Id : ADC 硬件通道 Id 号,与 port 模块中的配置对应
  • Adc Channel Limit Check: ADC 通道监测使能
  • Adc Channel Range Select : 选择检测限制类型,当 ADC 转换结果在设定类型的边界外时或边界内时,可以生成通道事件,类型如下:                 
  •        ADC_RANGE_ALWAYS: 全范围
  •        ADC_RANGE_BETWEEN: 在上限值与下限值之间,含上限值
  •        ADC_RANGE_NOT_BETWEEN: 超出上限值或低于下限值,含下限值
  •        ADC_RANGE_NOT_OVER_HIGH: 低于上限值,含上限值
  •        ADC_RANGE_NOT_UNDER_LOW: 高于下限值
  •        ADC_RANGE_OVER_HIGH: 高于上限值
  •        ADC_RANGE_UNDER_LOW:低于下限值,含下限值
  • Adc Channel Resolution:ADC 分辨率,在 AdcHwUnit0-> General 配置界面已经配置好
  • Adc Channel Sample Time Option:ADC 采样时间,可选 SAMPLE_TIME_OPTION:0-4
  • Adc Channel Sample Time:根据所选 SAMPLE_TIME_OPTIONx 自动计算出采样时间数值

       4.2.4 AdcHwUnit0-> AdcGroup 配置界面,对 ADC 通道进行组合,进行组转换

▲ 图 4.2.4

       4.2.5 双击 Index0 ,进入 AdcGroup->AdcGroup_0->General 配置界面


▲ 图 4.2.5

  • Adc Group Access Mode  : ADC 转换结果访问模式配置,单访问模式、流访问模式、流访问模式需配合 Adc Group Streaming Buffer Mode  、Adc Group Streaming Number Samples 配置去使用
  • Adc Group Conversion Mode:ADC 转换模式配置、单次转换、连续转换
  • Adc Group Id: ADC 组 id 号
  • Adc Group Priority: ADC 组的优先级配置,在 ADC->General->Adc Priority Mechanism 下配置为非 ADC_PRIORITY_NONE 时,可以启用 ADC 组的优先级配置
  • Adc Group Replacement: 在转换过程中,ADC 组被高优先级 ADC 组打断时的替换机制。ADC_GROUP_REPL_ABORT_RESTART 中止/重启机制:在转换过程中,当前 ADC 组被更高优先级的 ADC 组打断时,则会在更高优先级的 ADC 组转换完成后重新启动当前 ADC 组转换

          ADC_GROUP_REPL_SUSPEND_RESUME 挂起/恢复机制:在转换过程中,当前 ADC 组被更高优先级的 ADC 组打断时,则会在更高优先级的 ADC 组转换完成后继续当前 ADC 组转换

  • Adc Transfer Type  : ADC 传输类型
  • Adc Group Notification  :启用 ADC 组转换完成后的通知机制,填入回调函数名称
  • Adc Group Streaming Buffer Mode:将缓存区为线性缓冲区(buffer 满时停止转换)或循环缓冲区(buffer 满时进行覆盖)
  • Adc Group Streaming Number Samples: 在流访问模式下,每个通道需要获取的 ADC 值的数量,单访问模式下默认为 1
  • Adc Group In Back to Back Mode:使能表示通道按顺序发生转换,尽可能的快,并且不会导致内部 Ptimer 错误
  • Adc Group Uses Channel Delays:启用用户自定义通道延时,在 AdcGroup_0-> AdcChannelDelay 配置
  • Adc Delay Next Ptimer: Ptimer 预触发器有 8 个通道用来触发 ADC 组转换,当使用 Ptimer 预触发器来触发 ADC 组转换时,不同的 Ptimer 预触发器通道之间应根据当前组的转换时间来间隔相应的时间,避免同时触发导致 ADC error
  • Adc Ptimer Period For Continous Mode:如使用 Ptimer 连续进行预触发 ADC 组转换时,应设定 Ptimer 周期值大于 ADC 组转换时间     
  • Adc Hardware Average Enable: ADC 硬件采样均值滤波使能
  • Adc Hardware Average Select: 选择 ADC 硬件采样均值滤波时间

       4.2.6 AdcGroup->AdcGroup_0->AdcGroupDefinition 配置界面,添加该 ADC 组的通道

▲ 图 4.2.6

       4.2.7 AdcGroup->AdcGroup_0->AdcChannelDelay 配置界面,当在 AdcGroup->AdcGroup_0->General 启用 Adc Group Uses Channel Delays 时,可以添加通道转换延迟时间

▲ 图 4.2.7

4.3 AdcPowerStateConfig 配置

不支持低功耗

▲ 图 4.3

4.4 AdcInterrupt 配置

       可以添加 ADC 外设0、1用于 ADC硬件中断。

▲ 图 4.4

4.5 PublishedInformation ADC 模块版本信息

4.6 ADC 模块常用函数

  • Adc_Init:初始化 ADC 模块
  • Adc_SetupResultBuffer:配置 ADC 组转换结果缓冲区
  • Adc_DeInit:将 ADC 模块复位至默认状态
  • Adc_StartGroupConversion:开始 ADC 组模数转换
  • Adc_StopGroupConversion:停止 ADC 组模数转换
  • Adc_ReadGroup:读取 ADC 组的最后一轮转换结果,并存入指定的结果缓冲区地址
  • Adc_EnableHardwareTrigger:使能 ADC 组转换为硬件触发方式
  • Adc_DisableHardwareTrigger:失能 ADC 组转换为硬件触发方式
  • Adc_EnableGroupNotification: 使能 ADC 组转换的事件通知
  • Adc_DisableGroupNotification:失能 ADC 组转换的事件通知
  • Adc_GetGroupStatus:返回当前 ADC 组的状态
  • Adc_GetStreamLastPointer:获取每个通道的有效采样数,获取指向缓冲区的最后一个结果位置的指针位置
  • Adc_GetVersionInfo:获取 ADC 模块的版本信息

五、总结

        本文以 adc 读取电位器值为示例,详细介绍了如何配置和使用 ADC(模数转换)模块,通过本文的讲解,读者可以了解到如何正确配置 ADC 模块,以实现模数转换的功能。

六、参考文献

(1)  AUTOSAR_SWS_AdcDriver.pdf

(2)  FC4150 Reference Manual V3.0.pdf

欢迎在博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   作者:Memory

更多资讯,请扫码关注我们!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值