那曲檬骨新材料有限公司

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

    文章

    7651

    瀏覽量

    152120
  • 濾波器
    +關注

    關注

    161

    文章

    7862

    瀏覽量

    178936
  • 串口中斷
    +關注

    關注

    0

    文章

    67

    瀏覽量

    14009
  • ADC轉換器
    +關注

    關注

    1

    文章

    28

    瀏覽量

    8360
  • ADC模塊
    +關注

    關注

    1

    文章

    19

    瀏覽量

    11110

原文標題:靈動微課堂 (第268講)|MindSDK應用基礎——ADC模塊樣例

文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于cc2541程序代碼

    CC2541哪里有cc2541的模數轉換模塊和藍牙模塊的程序代碼呀?初學不懂
    發表于 01-20 07:14

    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 ?67次下載
    STM32多個<b class='flag-5'>ADC</b><b class='flag-5'>模塊</b>同時采樣轉換的應用示例

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

    MindSDK(mm32-mcu-sdk)是由靈動官方的軟件團隊開發和維護的基于靈動微控制器的軟件開發平臺。
    的頭像 發表于 08-12 09:10 ?1504次閱讀

    基于OpenHarmony開發的步驟

    單絲不成線,獨木不成林,一個社區想要健康蓬勃發展離不開社區參與者的持續貢獻。而社區貢獻點有很多種,本文以貢獻OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)開發,圍繞以下5個問題,帶大家了解
    的頭像 發表于 09-20 10:30 ?1426次閱讀

    31107液晶C語言編程

    31107液晶 C語言編程
    發表于 10-17 15:17 ?4次下載

    PCF8563時鐘芯片 C語言編程

    PCF8563 時鐘芯片 C語言編程
    發表于 10-17 14:46 ?31次下載

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

    ADC模塊了,由于最近開始使用Infineon TC3xx芯片,在配置ADC模塊的時候發現ADC模塊
    的頭像 發表于 01-29 16:45 ?8879次閱讀

    MindSDK搭建Keil MDK開發環境

    本文介紹基于Windows操作系統構建嵌入式系統開發環境過程中需要使用的主要軟件Keil MDK,并對一些需要特別關注的要點重點說明。Keil MDK是靈動官方的軟件開發平臺MindSDK支持的主要編譯工具之一。
    的頭像 發表于 05-04 10:42 ?1713次閱讀
    為<b class='flag-5'>MindSDK</b>搭建Keil MDK開發環境

    MindSDK中FlexCAN驅動程序及工程

    和MM32F0140微控制器,其中就有FlexCAN外設模塊的驅動程序以及工程,以及對CAN總線通信協議CANopen的適配工程。本文將介紹MindSDK中FlexCAN驅動程序及
    的頭像 發表于 06-23 15:41 ?1339次閱讀
    <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 ?914次閱讀

    MindSDK為MM32實現了一組TIM工程

    MindSDK為MM32使用星辰處理器內核的系列微控制器,實現了一組TIM工程,MindSDK中的TIM模塊對應硬件定時器TIM外設。
    的頭像 發表于 06-30 17:32 ?931次閱讀

    MindSDK應用基礎—SPI模塊簡介

    MindSDK為MM32主流的微控制器,實現了一系列SPI驅動的工程。本文通過講解 SPI 模塊
    的頭像 發表于 08-10 17:14 ?1107次閱讀

    MindSDK應用基礎——TIM模塊

    MindSDK應用基礎——TIM模塊
    的頭像 發表于 10-25 16:25 ?659次閱讀
    百家乐百姓话题| 玩百家乐技巧巧| 百家乐投注平台信誉排名| 沙龙百家乐怎申请| 喜来登百家乐的玩法技巧和规则| 唐人博彩论坛| 葵青区| 永利百家乐官网娱乐场| 真人百家乐导航| 丹东亿酷棋牌下载| 百家乐官网游戏开发技术| 回力百家乐官网的玩法技巧和规则| 宝博百家乐娱乐城| 苏尼特左旗| 百家乐官网娱乐场开户注册 | 百家乐赌博机吧| 百家乐网真人真钱群| 大发888游戏官方下| 最好的百家乐官网论坛| 百家乐庄闲下载| 百家乐澳门赌| 乌兰县| 百家乐官网专打方法| 百家乐论坛| 现场百家乐官网平台源码| 百家乐开户送18元| 威尼斯人娱乐城真钱赌博| 顶尖百家乐官网开户| 百家乐官网国际赌场娱乐网规则| 唐人街百家乐的玩法技巧和规则| 抚顺市| 百家乐小型抽水泵| 嘉义县| 百家乐博彩通网| 胜博国际娱乐城| 百家乐的必赢方法| 铜川市| 新葡京百家乐现金| 贵族娱乐城| 百家乐平台开户哪里优惠多| 乐百家国际娱乐城|