Hi3518EV200平臺ADC多通道採樣

来源:http://www.cnblogs.com/microxiami/archive/2017/11/22/7878308.html
-Advertisement-
Play Games

本文針對Hi3518EV200平臺處理器,通過ADC單次採樣方式,實現對多通道(1~4通道)ADC進行採樣控制。本文僅僅是對Hi3518EV200晶元ADC的用法的介紹,不涉及ADC具體的工作原理、轉換原理等細節內容。 ...


Hi3518EV200平臺ADC多通道採樣流程

Hi3518EV200 ADC


本文針對Hi3518EV200平臺處理器,通過ADC單次採樣方式,實現對多通道(1~4通道)ADC進行採樣控制。本文僅僅是對Hi3518EV200晶元ADC的用法的介紹,不涉及ADC具體的工作原理、轉換原理等細節內容。廢話不多說,直入正題!

Hi3518EV200晶元ADC模塊簡介:

特性:

 電源電壓:3.3V
 掃描頻率不能高於200K/s
 獨立通道:4路

特點:

 支持單次啟動,每次掃描一個通道,不濾毛刺,提供中斷以及查詢。
 支持連續掃描功能:
      根據ch_vld自動輪詢各通道
      根據Tscan(掃描間隔)啟動連續查詢
      根據Tglitch進行濾毛刺,完成對毛刺的有效判定
      上報LSADC轉換結果、對應的通道號
      上報中斷:有按鍵中斷,按鍵有變化中斷(此部分不太明白,是筆誤寫成了按鍵還是另有深意,不太清楚)

以上特性和特點摘自Hi3518EV200晶元手冊,文章還會摘取Hi3518EV200晶元手冊的部分寄存器截圖以作介紹。

ADC的實現方法簡述:

Hi3518EV200平臺的ADC模塊支持4個通道,分兩種模式採樣:
第一種是單次掃描模式,支持多通道掃描;
第二種是連續Scan掃描模式,支持多通道掃描(測試驗證未成功,在此處就不多說了)

單次掃描模式的工作實現方法

  1. 打開ADC時鐘
  2. 各個控制寄存器配置(參考手冊流程配置,含採樣值位數,通道使能,單次掃描,不支持powerdown等)
  3. 使用request_irq註冊ADC中斷,中斷號19
    以上配置封裝成Init函數,模塊載入時初始化ADC模塊使用

ADC開始採樣

具體操作函數封裝為ADC_Start(),包含以下工作:

  1. 判斷需要採樣的通道和上次工作的通道是否為同一個通道(為什麼要這麼做,在下麵內容會有說明)
  2. Disable中斷,停止ADC,清空所有通道中斷,清空通道使能,使能需要採樣的通道,備份該通道等下次採樣判斷
  3. 如果1中的判斷是同一個通道,就忽略2中操作
  4. 開始ADC採樣,使能ADC中斷
  5. 備份本次採樣的通道號,以備下次採樣時在1中進行判斷

中斷處理函數的工作

  1. 判斷使能的是哪個通道
  2. 判斷該使能的通道的中斷標誌是否置位(即該通道轉換是否完成,一般都會完成)
  3. 獲取該通道轉換後的值
  4. 如果註冊了其他對該數據操作的函數,就執行
  5. 清空該通道的中斷標誌位(此處需要小心操作,不然會引起不可知現象,詳細見下文說明)


需要在中斷處理函數中設置ADC轉換狀態,在調用開始ADC轉換的地方,判斷ADC採樣是否正在進行,如果ADC正在使用(即ADC轉換已經開始,轉換完成中斷還未發生),就延時等待,直到該中斷完成之後再開啟ADC轉換。

ADC採樣具體實現:

通過配置ADC模塊的相關配置寄存器使ADC正常工作。


ADC時鐘:

打開ADC時鐘
ADC時鐘配置在PERI_CRG31寄存器(參考下圖),要打開ADC的時鐘,需要將[1]置1。

ADC軟複位:

這裡的ADC軟複位是指SAR_ADC的軟複位請求,在PERI_CRG31寄存將[2]置1表示覆位,置0表示撤銷複位。

ADC參數配置:

ADC參數配置部分需要設置LSADC_CTRL0配置寄存器。


在初始化ADC時需要將ADC複位(為何要先複位,不太清楚,感覺這樣做對設備來說更安全),設置ADC進入複位狀態需要設置配置寄存器,把[15]置1即可。

ADC時鐘撤銷複位:將時鐘寄存器PERI_CRG3的[2]置0,通上述打開ADC時鐘。
ADC退出複位狀態:將LSADC_CTRL0配置寄存器的[15]置0。

ADC通道使能,選擇需要使用的ADC通道使能,將相應的位置1相應通道有效,置0則相應通道無效。
0通道 [8]置1
1通道 [9]置1
2通道 [10]置1
3通道 [11]置1

ADC轉換精度設置
[31:24] 設為0xFF 表示8bit精度,即採樣範圍:0~255

ADC掃描模式選擇
[13] 0 單次掃描模式

ADC的PowerDown支持選擇
[14] 0 不支持

到這裡,ADC的複位和初始化工作完成,具體的初始化操作ADC單次採樣流程可以參考下圖流程。每次複位都需要重新設置初始化參數。


ADC中斷設置

需要註冊ADC中斷,在ADC採樣完成時發出中斷,開始記錄採樣值。中斷流程和別的中斷處理類似(比如按鍵中斷),ADC的中斷號是19。具體中斷細節此處省略。

開始ADC採樣:

開始ADC採樣的一些操作步驟:

  1. 先要判斷ADC當前的採樣通道和要採樣的通道是否相同,如果ADC當前的採樣通道和要採樣的通道不相同,需要進行一些操作使ADC通道切換到需要採樣的通道。(這一步不是必須,如果要多路採樣,建議加上該部分,具體原因下文介紹)
  2. 將ADC的中斷使能關閉,即將中斷使能寄存器LSADC_CTRL4的[0]置0
  3. 停止ADC採樣,即將Stop配置寄存器LSADC_CTRL8的[31:0]寫入任意值就可以實現停止ADC採樣,比如寫入1
  4. 將ADC要採樣的通道的中斷清除,設置中斷清除寄存器LSADC_CTRL6的[3:0]位,將通道號相對應的位置1
  5. 關閉ADC各通道使能,在配置寄存器LSADC_CTRL0的[11:8]位全部清零
  6. 單獨使能要進行採樣的通道,設置配置寄存器LSADC_CTRL0的[11:8]位將相應通道使能,如將[8]置1使能A通道
  7. 備份本次採樣通道號,用來在開始工作時判斷通道是否相同時(第1步)使用
  8. 如果ADC當前的採樣通道號和要採樣的通道相同,就可以跳過第2.3.4.5.6.7直接啟動ADC採樣
  9. 啟動ADC採樣,設置Start配置寄存器LSADC_CTRL7的[31:0]位,寫入任意值就可以啟動ADC採樣,比如寫入1
  10. 最後要使能ADC採樣中斷,採樣完成後發出中斷,將中斷使能寄存器LSADC_CTRL4的[0]位置1

以上的ADC採樣操作可以用簡單的方法,只需第2.3.4.5.6.9.10步即可,如果只使用單通道採樣,只需要將這幾步操作放到ADC初始化操作中執行一次就可以,不用每次開始ADC採樣都設置。至於為什麼比較麻煩,是為了應對多路採樣時,有的通道採樣時間間隔比較小,有的通道採樣時間間隔比較大,造成的重覆無意義的操作。

舉例說明:ADC要採樣的是光照、溫度數據,在採樣時間間隔不多的時候,比如光敏一秒一次,溫度三秒一次,這樣的情況是沒有什麼差別的,但是如果時間間隔差的很多,比如光敏一秒一次,溫度30秒一次,這樣的情況,在兩次溫度採樣間隔內的30秒,光敏要採樣30次,就要初始化30次,這是沒有必要的。所以就需要加上第1步的判斷邏輯,如果需要採樣的通道和上次採樣的通道是同一個通道,就免去了重覆初始化同一個通道的操作,減輕處理負擔。

ADC中斷處理函數:

在中斷發生時需要做的工作:

  1. 逐個判斷各通道是否有效,也可以獲取配置寄存器LSADC_CTRL0的[11:8]位來確定當前採樣通道。
    因為使用的是單個通道逐個採樣的方法,所以同一時刻只有一個通道在工作,通過在中斷函數中檢測哪個通道被使能可以得到是由哪個通道採樣發生的中斷。
  2. 檢查中斷狀態寄存器,判斷相應通道的掃描值是否有效
    檢查中斷狀態寄存器LSADC_CTRL5的[3:0]位是否被置1,置1則相應通道的掃描值有效,否則無效。
  3. 如果中斷狀態有效,就可以讀取ADC採樣值
    直接讀取數據保持寄存器LSADC_CTRL3:
    [7:0] 通道A掃描值
    [15:8] 通道B掃描值
    [23:16] 通道C掃描值
    [31:24] 通道D掃描值
  4. 清除中斷狀態標誌
    設置中斷清除寄存器LSADC_CTRL6的[3:0]位,將相應的位置1,清除相應通道的中斷
  5. 需要添加保險機制,在中斷發生後即第1步之後,如果2、3步判斷失敗,就沒法進行4步的清中斷,這將導致ADC採樣卡死(不採樣也不運行中斷)
    此時的解決方法就是複位ADC,但是這樣做有點粗暴,比較好的方法還是避免出現這種卡死現象,比如添加第5步的保險機制,即判斷中斷都沒有執行時就清除4步寄存器中的對應通道中斷,或者清除所有通道中斷。

之後就是對獲取到的ADC採樣值進行處理了,略。

總結

至此,ADC通過單次採樣的方式對多通道採樣的方法介紹完畢,通過這種方法就能通過單次採樣的方式對多個通道的數據進行輪流採樣了,採樣獲取到的數據是在前邊設置的採樣精度範圍內,根據實際需要進行處理。有必要提醒下,實時採樣得到的數據會存在一些漂移,可以通過硬體濾波使數據穩定,或者在軟體中添加濾波演算法,對採樣得到的數據進行濾波處理。如果朋友們有更好的實現方法,還請指教一二,歡迎相互交流心得。

附:數據手冊上的ADC相關配置寄存器截圖




附:ADC採樣支持連續掃描處理

連續掃描處理過程在驗證時沒有得到想要的效果,在這裡不便多說,下麵僅列出文檔中連續掃描處理流程參考。


Over!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 索引是建立在數據表上的,因此需要首先創建一張數據表,創建SQL 語句如下:MYSQL、MSSQLServer、DB2資料庫:CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT)Oracle:CREATE TABL ...
  • 若發現sqlsrver所有帳號不小心被禁用了,這個時候怎麼辦?用重裝嗎?不用,仔細看小白是怎麼一步一步解開這個謎題的。首先需要Windows帳號設置里重新添加一個新帳號。並將其添加到管理員組裡面,然後按照以下步驟操作(註意/m是切換到單用戶的登錄模式下進行,修改完成後,建議切換到多用戶模式下):(1 ...
  • 1、一個文件的基本框架為:文件名、文件地址、文件大小、文件最大的大小、文件的增量(Filegrowth)。 2、文件有mdf、ndf、ldf 三種文件的區別。 3、文件組可以進行文件的管理 FileGroup 預設的文件組是 Primary 日誌文件無文件組的概念,存在Log文件中。 4、 alte ...
  • .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(註:tar是打包,不是壓縮!)———————————————.gz解壓1:gunzip FileName.gz解壓2:gzip -d FileName.gz壓縮:gzip File ...
  • 一、下載安裝包 (1). 下載MySQL源碼 (進入/usr/local/src目錄,使用wget下載) cd /usr/local/src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz (2). 下載 ...
  • 內部命令和外部命令 內部命令:系統集成的命令,集成到bash程式中的命令,可以用enable和help查看內部命令,直接和系統一樣運行在記憶體中,執行速度快。內部命令中的:相當於TRUE,即什麼都不幹。 enable cmd啟用內部命令 enable –n cmd 禁用內部命令 enable –n 查 ...
  • 1》交換空間概述: 交換空間(Swap Space)是Linux用於暫時補充物理記憶體,以提供更多記憶體空間的一種機制,交換空間對記憶體有限的電腦有所幫助,但不能取代物理記憶體,因為它位於硬碟 上,硬碟的存取速度比記憶體要慢幾個數量級,當同時運行很多程式,而他們不能同時都裝載進記憶體時,使用交換空間是一種很有 ...
  • 操作系統鏡像文件:CentOS-7-x86_64-DVD-1708 第一步:下載操作系統鏡像文件,地址如下: https://www.centos.org/download/ 第二步:載入進虛擬光碟機,單擊上圖中的“自動檢測”,使用ISO鏡像文件,瀏覽找到下載的鏡像文件即可。 第三步:單擊“開啟此虛擬 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...