SemiDrive E3 MCAL 開發系列(8)– Adc 模塊的使用

一、概述

本文將會介紹 SemiDrive E3 MCAL Adc 模塊的簡介以及基本配置。此外會結合實際操作的介紹,幫助新手快速了解並掌握這個模塊的使用,文中的 MCAL 是基於 PTG3.0 的版本,開發板是官方的 E3640 網關板。

二、Adc 模塊簡介

首先了解下 Autosar 中關於 Adc 模塊的一些概念,以下結合圖 2.1 進行說明。

圖 2.1 Autosar Adc 模塊

  • ADC Channel:表示綁定到一個埠引腳的 ADC 實體。
  • ADC Channel Group:一組 ADC 通道鏈接到同一個 ADC 硬體單元,整個組的轉換由一個觸發源觸發。
  • ADC Result Buffer: ADC 驅動程序中用戶必須為每一個組提供一個緩衝區,如果選擇了流訪問模式,該緩衝區可以保存同一組通道的多個樣本,如果選擇單一訪問模式,每個組通道的一個樣本將保存在緩衝區中。
  • Conversion Mode:包括兩種轉換模式:① One-Shot 模式:ADC 通道組的轉換在觸發後執行一次,並將結果寫入分配的結果緩衝區,可以是軟體觸發或硬體事件觸發。② ADC 通道組的轉換在軟體 API 調用後連續執行,並將結果寫入分配的結果緩衝區,連續轉換可以通過軟體 API 調用停止。
  • Sampling Time/Sample Time:採樣模擬信號的時間,可以在 EB 中進行配置。
  • Conversion Time:採樣模擬信號轉換成數字信號的時間。
  • Acquisition Time:等於 Sampling time 加上 Conversion time。

從圖 2.1 可以看出,ADC Group 下必須要綁定 Channel,不然沒有意義,Group 下的 Channel 必須屬於同一個 ADC 硬體單元。另外同一個 Channel 可以綁定到不同的 Group 中。

三、Adc 模塊的主要配置

下面介紹 Adc 模塊的配置,這裡會以 GPIO_B5和 GPIO_B6 兩個引腳為例子介紹,首先需要再 Mcu 模塊中使能 Adc 模塊。具體操作如圖 3.1 所示。

3.1 Mcu 模塊配置

接著在 Port 模塊中配置 Adc 引腳,如圖 3.2 所示。

圖 3.2 模塊配置

然後開始配置 Adc 模塊,首先添加 ADC 模塊,E3 最多可以添加 3 個 ADC 模塊,如圖 3.3 所示。

圖 3.3 添加新的 Adc 模塊

接著配置 ADC 的 Channel,Channel 配置中 AdcChannelId 和 AdcLogicalChannelId 這兩項都按照默認的連續值即可,AdcChannelMux 和 AdcPhysicalChannelId 需要根據實際使用的 ADC 引腳進行配置,下面參照圖 3.5 舉例進行說明。

比如我們使用的 ADC 引腳是 GPIO_B6,使用的 ADC 模塊是 ADC1,通過查看數據手冊可以知道該引腳連接到 ADC 的 CH3_N 通道,從圖中可以看出 ADC1 的 N3 通道只有 GPIO_B6 一個引腳輸入,因此 AdcChannelMux 配置為 0,對於 N5 通道則有多個 GPIO 引腳輸入,其對應的 AdcChannelMux 分別為 0~7,AdcChannelMux 的計算則按照圖中所示公式計算:3 x 2 = 6


圖 3.4 配置 ADC Channel

圖 3.5 AdcChannelMux 和 AdcPhysicalChannelId 計算方法

接著配置 ADC 模塊的 Group 參數,具體各參數的說明如下圖所示。需要注意的是 Group 最多可以配置 4 組。

圖 3.6 ADC Group 參數配置

最後配置 ADC Group 組別內部的 Channel,每個 Group 最多可以添加 16 個 Channel,並且這些 Channel 都是屬於同一個 ADC 硬體單元的,具體配置如圖 3.7 所示。

圖 3.7 配置每個 Group 中的 Channel

四、實際操作

完成以上的配置後,接著使用測試代碼進行驗證,測試代碼如圖 4.1所示。

圖 4.1 ADC 測試代碼

配置完以後編譯生成配置文件,然後重新編譯工程,調試運行,按照圖 4.2 輸入相關命令進行測試,測試前我們將 GPIO_B5 和 GPIO_B6 兩個引腳都接到 3.3V。可以看到 ADC 轉換的結果為 3.294V,跟實際電壓一致。

圖 4.2 串口列印信息

五、使用注意事項

對於 ADC 模塊的使用需要注意以下事項:

  • 每一個 ADC 單元,只允許同時一個 Group 正常進行轉換。
  • 如果是硬體觸發 Group,需要配置在每個 ADC 單元的第 0 個 Group。
  • DMA 模式只支持軟體觸發,並且如果當一個 ADC 單元已經有一個 DMA Group,那麼該單元無法配置其他的 Group。另外需要注意的是 DMA 模式下提供 Group 存放數據的 Buffer 需要 32 字節對齊。
  • 對於 CIRCULAR 模式下跟 AUTOSAR 規範不完全適配:在調用 Adc_ReadGroup 之前,如果 group 達到 ADC_STREAM_COMPLETED 狀態,不調用 Adc_ReadGroup 接口,那麼不會開啟下一輪採樣,也不會覆蓋 Buffer 中的採樣數據。
  • 建議在硬體觸發模式下,如果完成轉換後,關閉觸發源或者 Xtrg 的 Tmux。
  • 如果需要做通道的過壓測試(比如某個通道短路超過 9V,查看其他通道的採樣值是否準確),需要打開 Adc_Channel_Detect 的宏,並且根據硬體電路進行驗證以找到合適的電壓閾值進行屏蔽。此功能只支持軟體採樣、中斷模式的 Group;使用此功能時,第一輪採樣的數據會用作檢測過壓的通道,第二輪以後得數據才會返回上層調用者。

六、參考資料

1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論