e2studio開發RA2E1.17-- ADC掃描多通道采樣
- 概述
- 視頻教學
- 樣品申請
- 硬件準備
- 參考程序
- 源碼下載
- ADC屬性配置
- 回調函數
- 主程序
- 演示結果
概述
在嵌入式系統中,ADC(模數轉換器)是一個非常重要的組件,它將模擬信號轉換為數字信號。為了提高采樣效率和擴展應用,瑞薩MCU支持多通道掃描模式,允許同時采集多個模擬信號。在本文中,將在上篇文章基礎上探討如何配置ADC模塊進行多通道掃描,并采集來自不同的輸入模擬信號。
最近在瑞薩RA的課程,需要樣片的可以加qun申請:925643491。
視頻教學
https://www.bilibili.com/video/BV1y7XRYeEBw/
e2studio開發RA2E1(17)----ADC掃描多通道采樣
樣品申請
https://www.wjx.top/vm/rCrkUrz.aspx
硬件準備
首先需要準備一個開發板,這里我準備的是自己繪制的開發板,需要的可以進行申請。
主控為R7FA2E1A72DFL#AA0
參考程序
https://github.com/CoreMaker-lab/RA2E1
https://gitee.com/CoreMaker/RA2E1
源碼下載
ADC屬性配置
添加P101通道。
● Name:g_adc0該 ADC 實例的名稱,在代碼中用于引用此 ADC 設備。
● Unit:0表示使用的是 ADC0 設備(MCU 可能有多個 ADC 單元,如 ADC0、ADC1 等)。
● Resolution:12-Bit選擇 ADC 分辨率為 12 位,即轉換后的數值范圍為 0~4095(2^12 = 4096)。
● Alignment:Right選擇數據右對齊,即 ADC 結果存儲時,低 12 位有效,高位填充 0。
● Clear after read:On每次讀取 ADC 結果后,寄存器會自動清除,防止舊數據干擾新采樣。
● Mode:Single Scan單次掃描模式,即每次觸發 ADC 轉換后,僅采樣一次選中的通道。
● Normal/Group A Trigger:SoftwareADC 觸發方式為軟件觸發,即需要手動調用 API R_ADC_ScanStart() 來啟動轉換。
● Callback(回調函數):指定回調函數 adc_callback,用于 ADC 轉換完成后的事件處理。
● Scan End Interrupt Priority(掃描結束中斷優先級):Priority 2ADC 掃描結束中斷的優先級設置為 2(數值越小,優先級越高)。
● AN019 → P103 :ADC 通道 19(AN019)映射到 P103 引腳,即 ADC 采樣的模擬信號輸入在 P103 引腳。
● AN021 → P101 :ADC 通道 21(AN021)映射到 P101 引腳,即 ADC 采樣的模擬信號輸入在 P101 引腳。
回調函數
實現了一個ADC回調函數,并在掃描完成時設置 scan_complete_flag 標志位為 true,以便通知主程序掃描已完成。
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{//宏將告知編譯器回調函數不使用參數 p_args,從而避免編譯器發出警告,FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;
}
主程序
通過ADC對多個通道進行采樣,并計算采樣數據的平均值與相應的電壓值,最后打印出每個通道的數字輸出和電壓值。
while(1){uint16_t adc_data19=0;double a19;uint16_t adc_data21=0;double a21;/* Enable scan triggering from ELC events. */(void) R_ADC_ScanStart(&g_adc0_ctrl);scan_complete_flag = false;while (!scan_complete_flag){/* Wait for callback to set flag. */}err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_19, &adc_data19);assert(FSP_SUCCESS == err);a19=(double)(adc_data19/4095.0)*3.3;printf("P103(AN19)=%d,voltage=%f\n",adc_data19,a19);err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_21, &adc_data21);assert(FSP_SUCCESS == err);a21=(double)(adc_data21/4095.0)*3.3;printf("P101(AN19)=%d,voltage=%f\n",adc_data21,a21);R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);}
演示結果
給P103接入3.3V,給P101接入GND,結果如下所示。