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

    文章

    6812

    浏览量

    147648
  • 滤波器
    +关注

    关注

    158

    文章

    7332

    浏览量

    174788
  • 串口中断
    +关注

    关注

    0

    文章

    63

    浏览量

    13613
  • ADC转换器
    +关注

    关注

    1

    文章

    27

    浏览量

    8251
  • ADC模块
    +关注

    关注

    1

    文章

    19

    浏览量

    10975

原文标题:灵动微课堂 (第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

    请问有32 MZ的代码吗?

    嗨,有一些32 MZ的代码吗?我在MLA找不到,谢谢
    发表于 11-06 13:10

    HarmonyOS时钟FA卡片开发

    HarmonyOS时钟FA卡片开发介绍
    发表于 06-19 13:54

    这个SAR ADC怎么

    这个SAR ADC怎么?2645 A 10 bit 320 MSps Low-Cost SAR ADC for IEEE 802.11ac Applications in 20 nm CMOS.pdf
    发表于 06-24 07:47

    ADC模块剩余代码的编写以及模块的运用方法

    在蓝桥杯电子类单片机组历年的省赛以及国赛中,ADC模块常常被考察到。而组委会为减轻考生负担,提前给出了关于ADC模块的代码,剩下的便需要我们自己去编写(以第十届为
    发表于 01-12 08:00

    基于MindSDK测试MM32F5270开发板IIC简析

    1、通过调用MindSDK例程查看内部集成电路接口IICMM32F5270 是基于安谋科技的 Armv-8 架构的“星辰”STAR-MC1 处理器开发的 32位微控制器产品。本篇文章通过调用
    发表于 08-26 15:05

    在mm32f3270上为micropython创建ADC模块(2)

    在mm32f3270上为micropython创建ADC模块(2)苏勇,2021年10月文章目录在mm32f3270上为micropython创建ADC模块(2)前情回顾实现启动
    发表于 12-04 18:21 9次下载
    在mm32f3270上为micropython创建<b class='flag-5'>ADC</b><b class='flag-5'>模块</b>(2)

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

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

    MindSDK中FlexCAN驱动程序及样例工程

    起来,让开发者通过软件开发平台的数据结构和用户可编程应用接口(API)函数使用FlexCAN模块。基于灵动微电子微控制器的软件开发平台MindSDK,包含了集成FlexCAN外设的MM32F5270
    的头像 发表于 06-23 15:41 726次阅读
    <b class='flag-5'>MindSDK</b>中FlexCAN驱动程序及样例工程

    MindSDK应用基础—TIM模块样例

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

    MindSDK为MM32实现了一组TIM样例工程

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

    MindSDK应用基础—SPI模块样例简介

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

    MindSDK应用基础——TIM模块样例

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