0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MindSDK应用基础—ADC模块样例

灵动MM32MCU 来源:灵动MM32MCU 2023-08-17 17:16 次阅读

引言

MindSDK为MM32主流的微控制器,实现了一组ADC样例工程。本文通过讲解ADC模块的样例工程,介绍ADC模块的功能和用法。关于ADC模块对应的驱动程序,以及ADC外设模块硬件的实现细节,可具体查阅MindSDK工程的源文件,以及MM32微控制器(例如MM32F5270)的用户手册。

样例工程

MindSDK中为ADC驱动设计的样例工程包括:

adc_basic

adc_interrupt

adc_dma

adc_seq

adc_fixed_seq

adc_ext_seq

adc_awdg

adc_oversample

adc_sw_write_calib

其中, adc_baic 、 adc_interrupt 、 adc_dma 分别演示了ADC最典型的功能,包括通过轮询、中断、DMA来获取一个ADC转换通道的转换结果。adc_awdg 来展现ADC模拟看门狗的功能, adc_seq 、 adc_fixed_seq 、 adc_ext_seq 则展现ADC按照不同的转换序列来进行转换。还有一些用于特殊场景的功能,例如通过软件写入校准值,以及硬件实现的多次采样取平均值、基本滤波等。

adc_basic

adc_basic 描述了使用ADC模块最基本的方式,通过轮询方式对一个通道进行转换,并获取通道的转换值。在样例工程中,通过 ADC_Init() 函数,配置ADC数据有效数据位 ADC_Resolution_Alt0 ,ADC的转换模式为单通道单次转换模式 ADC_ConvMode_SingleSlot 、转换数据对其方式为右对齐 ADC_Align_Right 、通道转化结果通过单端转换方式,将通道与ADC内部参考电压VREF的差数字量化后输出 ADC_SingleDiffConvMode_SingleEnd 、配置单端转换方式的参考电压为内部参考电压 ADC_SingleConvVref_Internal ,配置待转换通道的序列和每个转换通道的采样周期。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_interrupt

adc_interrupt 相对于 adc_basic 样例工程,实现了ADC转换完成后触发中断服务,在中断服务中获取转换值的用法。

其实现原理,是在 adc_basic 的配置的基础上,通过 ADC_EnableInterrupts() 函数和 NVIC_EnableIRQ()函数开启ADC的中断。当ADC转换通道完成转换后,就进入中断服务函数。

实际运行程序时,用户在串口调试终端每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_dma

adc_dma 在 adc_basic 的基础上增加对DMA外设模块的使用。在应用层 app_adc_init() 函数中添加对DMA通道的配置,通过 DMA_InitChannel() 函数, DMA_XferMode_PeriphToMemory 配置传输方向为外设到内存、 MemAddr 和 PeriphAddr 配置内存和外设地址、 MemAddrIncMode 和 PeriphAddrIncMode 配置内存和外设的增量模式、 XferCount 传输的数据量、 DMA_ReloadMode_AutoReloadContinuous 自动重载传输量、 DMA_XferWidth_32b 以32位的数据进行传输。外设映射的DMA通道初始配置完成后,通过 DMA_EnableChannel() 函数使能DMA通道,通过 NVIC_EnableIRQ() 和 DMA_EnableChannelInterrupts() 函数开启DMA中断。之后,每次通过 ADC_DoSwTrigger() 函数触发ADC开始转换,当转换完成后DMA开始搬运,当DMA搬运完成后进入中断服务函数,以此循环往复。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_fixed_seq

adc_fixed_seq 在 adc_dma 样例的基础上,将转换的ADC通道由一个通道,设置为多个通道形成一个序列来进行转换,当序列转换完成后,就停止转换。通过 ADC_EnableSeqSlotFixed() 函数来配置转换序列的顺序为有低到高的顺序进行转换。DMA将ADC每个通道数据搬运到指定内存。通过在循环中调用 ADC_DoSwTrigger() 函数来进行一个序列的多次转换。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变配置的转换序列中每个通道的输入电压值,会看到串口调试终端界面对应数值变化。

adc_seq

adc_seq 与 adc_fixed_seq 样例的不同之处在于, adc_fixed_seq 样例只能实现一个由高到低或者由低到的通道转换序列进行转换,例如ch0-ch1-ch3或者ch3-ch1-ch0的转换顺序。adc_seq 样例则实现任意通道序列的转换,例如ch3-ch0-ch5,任意的序列。通过ADC_EnableSeqSlot () 函数配置具体的转换序列。ADC根据配置的转换序列开始进行转换。当序列转换完成后,停止转换。可以重复的调用 ADC_DoSwTrigger() 开启下一个序列的转换,一次循环往复。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_ext_seq

adc_ext_seq 实现在当前任意序列转换过程中插入额外的序列,当插入额外的序列时,当前任意序列中正在转换的通道完成,将切换到插入的序列中进行转换,当转换完成后在继续之前任意序列中剩余通道的转换。通过 ADC_EnableExtSeqSlot() 函数配置额外的序列。例如当前任意序列为ch3-ch0-ch5,额外的序列为ch1-ch4。ADC_EnableAutoExtSeqSlot() 函数开启自动注入模式,即任意序列转换完成后,开启注入通道的转换,转换额外的序列。这种注入模式增加了整个序列的长度。当一个完整序列转换完成后,停止转换,调用 ADC_DoSwTrigger() 函数来进行一个序列的多次转换。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_awdg

adc_awdg 在 adc_basic 的基础上增加对转换结果进行监控,通过 ADC_EnableHwComp() 函数配置需要监控的转换通道 ChnNum 、设置的上限值 HighLimit 和下限值 LowLimit ,可以根据上限值和下限值的大小关系设置监控范围,当上限值大于或等于下限值时,监控通道的转换值在两个阈值之外的数值,若开启中断则会进入中断服务函数;同理,当上限值小于下限值时,监控通道转换值在两个阈值之间的数值,若开启中断则会进入中断服务函数。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

实际运行时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,当电压值满足监控区间时,会看到串口终端界面当前转换数据。

adc_oversample

adc_oversample 在 adc_seq 的基础上通过 ADC_SetOverSample()`函数启动硬件的过采样模式, ADC_OverSampleRatio_256 配置过采样率为256, ADC_OverSampleDataDiv_8 配置数据右移8位, ADC_OverSampleTriggerMode_Multi 配置为所有通道的过采样转换只需要进行一次触发。injectOverSampleMode 配置是否开启注入通道的过采样模式。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

adc_sw_write_calib

adc_sw_write_calib 在 adc_basic 的基础上实现使用软件保存ADC的校准值,然后通过软件将校准值写入寄存器中。通过 ADC_GetCalibFactor() 函数获取校准值,通过 ADC_SetCalibFactor() 来写入校准值。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7423

    浏览量

    150785
  • 滤波器
    +关注

    关注

    160

    文章

    7693

    浏览量

    177391
  • 串口中断
    +关注

    关注

    0

    文章

    64

    浏览量

    13844
  • ADC转换器
    +关注

    关注

    1

    文章

    28

    浏览量

    8308
  • ADC模块
    +关注

    关注

    1

    文章

    19

    浏览量

    11049

原文标题:灵动微课堂 (第268讲)|MindSDK应用基础——ADC模块样例

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求LABVIEW的资料和

    LABVIEW的资料和提供一些
    发表于 05-24 15:27

    FRDM-KL02_Mini-Dock

    kl02代码、以及驱动模块等介绍。
    发表于 10-29 15:47

    Hardware Semaphore 2 工程

    介绍了Hardware Semaphore 2的使用方法以及工作模式(Direct和Indirect),本工程基于CCSv4,可在C6678EVM板上运行,内附模块介绍以及代码流程的PPT文件。
    发表于 06-21 14:21

    STM32多个ADC模块同时采样转换的应用示例

    STM32多个ADC模块同时采样转换的应用示例(深圳市普德新星电源技术有限公司怎么)-本文重点介绍利用含有3个ADC模块的STM32F4、
    发表于 08-04 18:47 66次下载
    STM32多个<b class='flag-5'>ADC</b><b class='flag-5'>模块</b>同时采样转换的应用示例

    MindSDK概述、使用方法及应用案例

    MindSDK(mm32-mcu-sdk)是由灵动官方的软件团队开发和维护的基于灵动微控制器的软件开发平台。
    的头像 发表于 08-12 09:10 1311次阅读

    基于OpenHarmony开发的步骤

    单丝不成线,独木不成林,一个社区想要健康蓬勃发展离不开社区参与者的持续贡献。而社区贡献点有很多种,本文以贡献OpenAtom OpenHarmony(以下简称“OpenHarmony”)开发,围绕以下5个问题,带大家了解
    的头像 发表于 09-20 10:30 1311次阅读

    31107液晶C语言编程

    31107液晶 C语言编程
    发表于 10-17 15:17 4次下载

    PCF8563时钟芯片 C语言编程

    PCF8563 时钟芯片 C语言编程
    发表于 10-17 14:46 29次下载

    AUTOSAR MCAL-基于Infineon TC3xx芯片的ADC模块

    ADC模块了,由于最近开始使用Infineon TC3xx芯片,在配置ADC模块的时候发现ADC模块
    的头像 发表于 01-29 16:45 8053次阅读

    MindSDK搭建Keil MDK开发环境

    本文介绍基于Windows操作系统构建嵌入式系统开发环境过程中需要使用的主要软件Keil MDK,并对一些需要特别关注的要点重点说明。Keil MDK是灵动官方的软件开发平台MindSDK支持的主要编译工具之一。
    的头像 发表于 05-04 10:42 1509次阅读
    为<b class='flag-5'>MindSDK</b>搭建Keil MDK开发环境

    MindSDK中FlexCAN驱动程序及工程

    和MM32F0140微控制器,其中就有FlexCAN外设模块的驱动程序以及工程,以及对CAN总线通信协议CANopen的适配工程。本文将介绍MindSDK中FlexCAN驱动程序及
    的头像 发表于 06-23 15:41 1126次阅读
    <b class='flag-5'>MindSDK</b>中FlexCAN驱动程序及<b class='flag-5'>样</b><b class='flag-5'>例</b>工程

    MindSDK应用基础—TIM模块

    MindSDK为MM32使用星辰处理器内核的系列微控制器,实现了一组TIM工程,MindSDK中的TIM模块对应硬件定时器TIM外设。
    的头像 发表于 06-29 17:16 801次阅读

    MindSDK为MM32实现了一组TIM工程

    MindSDK为MM32使用星辰处理器内核的系列微控制器,实现了一组TIM工程,MindSDK中的TIM模块对应硬件定时器TIM外设。
    的头像 发表于 06-30 17:32 851次阅读

    MindSDK应用基础—SPI模块简介

    MindSDK为MM32主流的微控制器,实现了一系列SPI驱动的工程。本文通过讲解 SPI 模块
    的头像 发表于 08-10 17:14 1022次阅读

    MindSDK应用基础——TIM模块

    MindSDK应用基础——TIM模块
    的头像 发表于 10-25 16:25 525次阅读