Hands-On 基於 Flagchip FC4150 MCAL-ADC 讀取電位器值

關鍵字 :FlagchipFC4150MCAL-ADCfc4150mcu

簡介

       本文將詳細介紹如何使用 EB 工具配置 Flagchip FC4150 MCAL ADC 讀取電位器值。並重點強調了配置 ADC 模塊的過程以及對 ADC 模塊的詳細解釋。關於 mcu、port 、dio、icu 模塊可參考之前發布的博文。本次示例演示將會使用 ADC0_SE0、ADC0_SE4 通道、採用中斷方式進行電位器值的讀取

硬體平台:旗芯微 FC4150 DEMO BOARD V2 開發板

軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04

MCAL: V1.1.0 & V1.1.1

一、MCAL 配置

        1.1 配置 MCU 模塊

        1.1.1 根據 demo board 電位器原理圖所示,我們需要在MCU模塊-> PCC下添加Port A 、E、ADC 0的外設並配置為時鐘使能。


▲ 圖 1.1.1



▲ 圖 1.1.2

       1.1.2 在 McuClockReferencePoint 設置添加 McuClockReferencePoint_Adc0 參考時鐘源


▲ 圖 1.1.3

1.2 配置 PORT 模塊

        1.2.1 進入 Port A  的 PortPin 界面下,添加  PTA25 引腳並命名為 Varistor1,配置 PTA25 為 ADC_SE0 、輸入模式,默認電平為低。

▲ 圖 1.2.1

1.2.2 進入 Port E  的 PortPin 界面下,添加  PTE4 引腳並命名為 Varistor2,配置 PTE4 為 ADC_SE04、輸入模式,默認電平為低。

▲ 圖 1.2.2

1.3配置 ADC 模塊

        1.3.1 在Module Configurations 中添加 ADC模塊,在 ADC模塊中的  AdcHwUnit下添加 ADC 0 外設。    


▲ 圖 1.3.1 

        1.3.2 雙擊 Index 0 進入 Adc HwUnit_0 配置界面,在 General 下配置 ADC 時鐘參考源、ADC 位數 12 位、ADC 參考電壓源為內部、AdcSampleTimeOptions 默認即可。  


▲ 圖 1.3.2 

        1.3.3 進入 AdcChannel的 配置界面,添加兩個 ADC 通道,將 Adc Hardware Channel Id 更改為與原理圖對應的 ADC0_SE0、ADC0_SE4 通道


▲ 圖 1.3.3

1.3.4 進入 AdcGroup 的配置界面添加 AdcGroup_0


▲ 圖 1.3.4

       1.3.4.1 雙擊 Index 0 進入 AdcGroup_0 配置界面,在 General 下配置 ADC 組,將 ADC 組配置模式設置為單次讀取,轉換模式設置為單次轉換,觸發模式設置為軟體觸發、設置轉換類型為中斷方式,填寫組轉換完成的回調函數 IoHwAb_Adc_Notification_0


▲ 圖 1.3.4.1

        1.3.4.2 在 AdcGroupDefinition下添加剛剛配置好的兩個通道,分配給 ADC 組 0


▲ 圖 1.3.4.2

1.3.5 在 AdcInterrupt 下選擇 ADC 0 中斷使能


▲ 圖 1.3.5 

二、示例代碼解析

2.1 將 EB 配置好的工程編譯並更新代碼至 FCIDE 中

2.2 Main 函數

       將 Bsp_Adc_Init、BSP_FCUART_Init 函數取消屏蔽,Bsp_Adc_20ms_Task_Event、Bsp_Adc_1s_Task_Event 函數添加至任務時間片函數中


▲ 圖 2.2.1


▲ 圖 2.2.2

2.3  Adc_PBcfg.c

       我們可以看到 ADC0_SE0、ADC0_SE4 在EB 工具配置好的屬性與回調函數的聲明


▲ 圖 2.3.1(ADC硬體模塊配置屬性)


▲ 圖 2.3.2(ADC通道配置屬性)

▲ 圖 2.3.2(ADC組配置屬性)

2.4 Bsp_Adc.c

       2.4.1 在 demo 示例中編寫 IoHwAb_Adc_Notification_0 函數實體,添加  Adc0_Group0_Ready = TRUE;


▲ 圖 2.4.1

         2.4.2 找到 Bsp_Adc_Init、Bsp_Adc_20ms_Task_Event、Bsp_Adc_1s_Task_Event 這是 demo 示例對 MCAL API 的調用


▲ 圖 2.4.2.1


▲ 圖 2.4.2.2

三、燒錄 & 調試

3.1 將工程編譯並燒錄到開發板

       打開串口助手軟體,波特率設置為 115200 ,觀察到兩個電位器的 ADC 值已被 MCU 成功讀取



▲ 圖 3.1

四、MCAL ADC 模塊詳解

FC4150 ADC 模塊提供 8/10/12 位轉換精度、單次/連續轉換模式、軟/硬觸發、單通道採樣時間配置、硬體均值濾波等功能

4.1 General 配置


▲ 圖 4.1

       ①AdcGeneral

  • Adc_DeInit API:復位 ADC 配置
  • Adc Development Error Detection :ADC 模塊開發錯誤檢測使能
  • Adc Enable Limit Check:啟用 ADC 轉換結果進行上下限檢測
  • Adc Enable Queuing :ADC 隊列啟用,觸發源可以轉換一個隊列
  • Adc_StartStopGroup API :控制 ADC 組的啟動、停止轉換
  • Adc Group Notification Capability:啟用在 ADC 組轉換時的通知
  • Adc Hw Trigger API:啟用硬體觸發
  • Adc_ReadGroup API :讀一個 ADC 組的轉換結果
  • Adc_VersionInfo API: 讀 ADC 模塊版本信息
  • Adc Priority Mechanism:設置 ADC 轉換的優先級
  • Adc Result Alignment:ADC 轉換結果對齊方式
  • Adc Timeout:用於初始化時,對 ADC 校準時間計時,如果超出 Timeout 配置時間,則會返回超時狀態
  • Adc Dma Transfering Timeout:用於 DMA 傳輸時,對 DMA 傳輸時間計時,如果超出 Timeout 配置時間,則會返回超時狀態
  • Adc Max Queue Depth:ADC 轉換請求的最大隊列深度

       ②AdcPublishedInformation

  • 該模塊不需要配置

       ③IAutosarExt

  • Adc Disable Production Error Reporting:禁用 ADC 採集錯誤反饋
  • Adc Set Hardware Average Once:啟用 ADC 硬體均值濾波
  • Adc Global Enable DMA Transfer: 使能 ADC 組的 DMA 傳輸
  • Enable Adc User Mode Support:不需要配置
  • Adc Continuous Without Interrupt Uses:ADC 配置為連續模式的時候不觸發中斷

      ④Adc Dem Event Parameter Refs

  • 該模塊用不到

4.2 AdcHwUnit配置

       最多可添加2個ADC外設(硬體決定)


▲ 圖 4.2

       4.2.1 雙擊 Index0 進入AdcHwUnit0-> General配置界面


▲ 圖 4.2.1

  • Adc Hardware Unit: ADC 硬體外設 Id 號
  • Adc Logical Unit: ADC 邏輯 Id 號
  • Adc Clock Reference:ADC 參考時鐘源,在 MCU->McuClockReferencePoint 中配置
  • Adc Voltage Reference Selection: ADC 參考電壓源
  • Adc Dma Channel :配置 ADC DMA 傳輸通道
  • Adc Alignment:ADC 轉換結果對齊
  • Adc Resolution:ADC 解析度
  • ADC Startup Counter:在開始轉換前,設定一個 ADC 穩定時間
  • Adc Pre-Trigger Select:設定預觸發源
  • Adc Trigger Select :設定觸發源
  • Adc Sample Time Option x :設定 ADC 採樣時間
  • Adc Ptimer Prescaler Divider Select :ADC ptimer 的預分頻器配置
  • Adc Ptimer Multiplication Factor Select for Prescaler :ADC ptimer 的倍頻因子配置
  • Ptimer Sequence Error Interrupt Enable :使能 Ptimer 序列錯誤中斷
  • Ptimer Sequence Error Notification :填寫序列錯誤中斷的回調函數名稱
  • Adc Hardware Average Enable :ADC 硬體均值濾波使能
  • Adc Hardware Average Select :ADC 硬體均值濾波個數

       4.2.2 AdcHwUnit0-> AdcChannel 最多可支持 32 個外部通道 ,4 個內部通道


▲ 圖 4.2.2

       4.2.3 雙擊 Index0 進入 AdcHwUnit0-> AdcChannel-> AdcChannel_0 配置界面



▲ 圖 4.2.3

  • Adc Logical Channel ID: ADC 通道邏輯 ID 號
  • Adc Hardware Channel Id : ADC 硬體通道 Id 號,與 port 模塊中的配置對應
  • Adc Channel Limit Check: ADC 通道監測使能
  • Adc Channel Range Select : 選擇檢測限制類型,當 ADC 轉換結果在設定類型的邊界外時或邊界內時,可以生成通道事件,類型如下:                 
  •        ADC_RANGE_ALWAYS: 全範圍
  •        ADC_RANGE_BETWEEN: 在上限值與下限值之間,含上限值
  •        ADC_RANGE_NOT_BETWEEN: 超出上限值或低於下限值,含下限值
  •        ADC_RANGE_NOT_OVER_HIGH: 低於上限值,含上限值
  •        ADC_RANGE_NOT_UNDER_LOW: 高於下限值
  •        ADC_RANGE_OVER_HIGH: 高於上限值
  •        ADC_RANGE_UNDER_LOW:低於下限值,含下限值
  • Adc Channel Resolution:ADC 解析度,在 AdcHwUnit0-> General 配置界面已經配置好
  • Adc Channel Sample Time Option:ADC 採樣時間,可選 SAMPLE_TIME_OPTION:0-4
  • Adc Channel Sample Time:根據所選 SAMPLE_TIME_OPTIONx 自動計算出採樣時間數值

       4.2.4 AdcHwUnit0-> AdcGroup 配置界面,對 ADC 通道進行組合,進行組轉換


▲ 圖 4.2.4

       4.2.5 雙擊 Index0 ,進入 AdcGroup->AdcGroup_0->General 配置界面


▲ 圖 4.2.5

  • Adc Group Access Mode  : ADC 轉換結果訪問模式配置,單訪問模式、流訪問模式、流訪問模式需配合 Adc Group Streaming Buffer Mode  、Adc Group Streaming Number Samples 配置去使用
  • Adc Group Conversion Mode:ADC 轉換模式配置、單次轉換、連續轉換
  • Adc Group Id: ADC 組 id 號
  • Adc Group Priority: ADC 組的優先級配置,在 ADC->General->Adc Priority Mechanism 下配置為非 ADC_PRIORITY_NONE 時,可以啟用 ADC 組的優先級配置
  • Adc Group Replacement: 在轉換過程中,ADC 組被高優先級 ADC 組打斷時的替換機制。ADC_GROUP_REPL_ABORT_RESTART 中止/重啟機制:在轉換過程中,當前 ADC 組被更高優先級的 ADC 組打斷時,則會在更高優先級的 ADC 組轉換完成後重新啟動當前 ADC 組轉換

          ADC_GROUP_REPL_SUSPEND_RESUME 掛起/恢復機制:在轉換過程中,當前 ADC 組被更高優先級的 ADC 組打斷時,則會在更高優先級的 ADC 組轉換完成後繼續當前 ADC 組轉換

  • Adc Transfer Type  : ADC 傳輸類型
  • Adc Group Notification  :啟用 ADC 組轉換完成後的通知機制,填入回調函數名稱
  • Adc Group Streaming Buffer Mode:將緩存區為線性緩衝區(buffer 滿時停止轉換)或循環緩衝區(buffer 滿時進行覆蓋)
  • Adc Group Streaming Number Samples: 在流訪問模式下,每個通道需要獲取的 ADC 值的數量,單訪問模式下默認為 1
  • Adc Group In Back to Back Mode:使能表示通道按順序發生轉換,儘可能的快,並且不會導致內部 Ptimer 錯誤
  • Adc Group Uses Channel Delays:啟用用戶自定義通道延時,在 AdcGroup_0-> AdcChannelDelay 配置
  • Adc Delay Next Ptimer: Ptimer 預觸發器有 8 個通道用來觸發 ADC 組轉換,當使用 Ptimer 預觸發器來觸發 ADC 組轉換時,不同的 Ptimer 預觸發器通道之間應根據當前組的轉換時間來間隔相應的時間,避免同時觸發導致 ADC error
  • Adc Ptimer Period For Continous Mode:如使用 Ptimer 連續進行預觸發 ADC 組轉換時,應設定 Ptimer 周期值大於 ADC 組轉換時間     
  • Adc Hardware Average Enable: ADC 硬體採樣均值濾波使能
  • Adc Hardware Average Select: 選擇 ADC 硬體採樣均值濾波時間

       4.2.6 AdcGroup->AdcGroup_0->AdcGroupDefinition 配置界面,添加該 ADC 組的通道


▲ 圖 4.2.6

       4.2.7 AdcGroup->AdcGroup_0->AdcChannelDelay 配置界面,當在 AdcGroup->AdcGroup_0->General 啟用 Adc Group Uses Channel Delays 時,可以添加通道轉換延遲時間



▲ 圖 4.2.7

4.3 AdcPowerStateConfig 配置

不支持低功耗


▲ 圖 4.3

4.4 AdcInterrupt 配置

       可以添加 ADC 外設0、1用於 ADC硬體中斷。


▲ 圖 4.4

 

4.5 PublishedInformation ADC 模塊版本信息

4.6 ADC 模塊常用函數

  • Adc_Init:初始化 ADC 模塊
  • Adc_SetupResultBuffer:配置 ADC 組轉換結果緩衝區
  • Adc_DeInit:將 ADC 模塊復位至默認狀態
  • Adc_StartGroupConversion:開始 ADC 組模數轉換
  • Adc_StopGroupConversion:停止 ADC 組模數轉換
  • Adc_ReadGroup:讀取 ADC 組的最後一輪轉換結果,並存入指定的結果緩衝區地址
  • Adc_EnableHardwareTrigger:使能 ADC 組轉換為硬體觸發方式
  • Adc_DisableHardwareTrigger:失能 ADC 組轉換為硬體觸發方式
  • Adc_EnableGroupNotification: 使能 ADC 組轉換的事件通知
  • Adc_DisableGroupNotification:失能 ADC 組轉換的事件通知
  • Adc_GetGroupStatus:返回當前 ADC 組的狀態
  • Adc_GetStreamLastPointer:獲取每個通道的有效採樣數,獲取指向緩衝區的最後一個結果位置的指針位置
  • Adc_GetVersionInfo:獲取 ADC 模塊的版本信息

五、總結

        本文以 adc 讀取電位器值為示例,詳細介紹了如何配置和使用 ADC(模數轉換)模塊,通過本文的講解,讀者可以了解到如何正確配置 ADC 模塊,以實現模數轉換的功能。

六、參考文獻

(1)  AUTOSAR_SWS_AdcDriver.pdf

(2)  FC4150 Reference Manual V3.0.pdf

 

 歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:Memory


更多資訊,請掃碼關注我們!


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

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

評論