電壓值轉(zhuǎn)換
模擬電壓經(jīng)過ADC轉(zhuǎn)換后,是一個12位的數(shù)字值,如果通過串口以16進制打印出來的話,可讀性比較差,那么有時候我們就需要把數(shù)字電壓轉(zhuǎn)換成模擬電壓,也可以跟實際的模擬電壓(用萬用表測)對比,看看轉(zhuǎn)換是否準確。
一般在設(shè)計硬件原理圖的時候會把ADC的輸入電壓范圍設(shè)定在:0~3.3V。若設(shè)置ADC的分辨率是12位的,那么12位滿量程對應(yīng)的電壓就是3.3V,12位滿量程對應(yīng)的數(shù)字值是:2^12,數(shù)值0對應(yīng)的就是0V。假設(shè)轉(zhuǎn)換后的數(shù)值為X,X對應(yīng)的模擬電壓為Y,那么會有這么一個等式成立:

點擊可查看大圖
因此在ADC轉(zhuǎn)換完成之后,我們可以調(diào)用FSP庫函數(shù)R_ADC_Read(),從ADC的數(shù)據(jù)寄存器里讀出上述等式中X的值,從而再經(jīng)過計算得出對應(yīng)的電壓值。
實驗:電位器電壓采集
硬件設(shè)計
野火啟明6M5開發(fā)板的ADC電位器電路圖如下圖所示。

點擊可查看大圖
野火啟明4M2開發(fā)板的ADC電位器電路圖如下圖所示。

點擊可查看大圖
野火啟明2L1開發(fā)板的ADC電位器電路圖如下圖所示。

點擊可查看大圖
可以看到,三塊開發(fā)板板載的電位器都是連接到P000引腳,P000引腳可以連接到MCU內(nèi)部的ADC外設(shè),從而對電位器輸入的模擬信號進行采集。
表3:ADC引腳

軟件設(shè)計
25.6.2.1
新建工程
對于e2 studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“25_ADC”,最后再將它導(dǎo)入到我們的e2 studio工作空間中。
對于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“25_ADC”,并進入該文件夾里面雙擊Keil工程文件,打開該工程。
工程新建好之后,在工程根目錄的“src”文件夾下面新建“key”文件夾,再進入“key”文件夾里面新建源文件和頭文件:“bsp_adc.c”和“bsp_adc.h”。工程文件結(jié)構(gòu)如下。
列表1:文件結(jié)構(gòu)
25_ADC├─ ......└─ src├─ led│ ├─ bsp_led.c│ └─ bsp_led.h├─ debug_uart│ ├─ bsp_debug_uart.c│ └─ bsp_debug_uart.h├─ adc│ ├─ bsp_adc.c│ └─ bsp_adc.h└─ hal_entry.c

25.6.2.2
FSP配置
打開該工程的FSP配置界面進行配置。
首先依次點擊“Stacks”->“Pins”->“Peripherals”->“ADC0”來配置通道AN000對應(yīng)的引腳為P000。如下圖所示。

點擊可查看大圖
然后依次點擊“Stacks”->“New Stack”->“Analog”->“ADC (r_adc)”來配置ADC模塊。如下圖所示。

點擊可查看大圖
ADC的屬性配置:

點擊可查看大圖
表4:ADC屬性介紹

點擊可查看大圖
配置完成之后可以按下快捷鍵“Ctrl+S”保存,最后點右上角的“Generate Project Content”按鈕,讓軟件自動生成配置代碼即可。
25.6.2.3
ADC初始化函數(shù)
列表2:代碼清單25?1 ADC初始化函數(shù)
voidADC_Init(void){fsp_err_t err;err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);assert(FSP_SUCCESS == err);}
25.6.2.4
ADC中斷回調(diào)函數(shù)
列表3:代碼清單25?2 ADC中斷回調(diào)函數(shù)
//ADC 轉(zhuǎn)換完成標志位volatilebool scan_complete_flag = false;voidadc_callback(adc_callback_args_t * p_args){FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;}
在FSP配置頁面注冊回調(diào)函數(shù)以及優(yōu)先級,我們就可以使用來自ADC的中斷回調(diào)函數(shù)了。
在每種模式中,模擬通道按通道數(shù)的升序進行轉(zhuǎn)換,然后掃描溫度傳感器和電壓傳感器(如果它們也被勾選了的話)。每一種掃描模式都有著它的優(yōu)點和缺點,但具體使用什么模式進行ADC轉(zhuǎn)換,就需要通過我們的項目的需求需要什么樣的效果來決定。
注
我們通過ADC的中斷回調(diào)函數(shù)來判斷ADC是否轉(zhuǎn)換完成。我們需要定義了一個布爾類型的數(shù)據(jù)scan_complete_flag來當做ADC讀取完成的標志位。當沒有轉(zhuǎn)換完成的時候scan_complete_flag的值一直為false,單ADC觸發(fā)中斷的時候?qū)can_complete_flag的值變?yōu)閠rue。
25.6.2.5
如果未啟用中斷
如果未啟用中斷,則可使用R_ADC_StatusGet()API用于輪詢ADC以確定掃描何時完成。讀取API函數(shù)用于訪問轉(zhuǎn)換后的ADC結(jié)果。這適用于支持校準的MCU的普通掃描和校準掃描。
25.6.2.6
ADC讀取轉(zhuǎn)換結(jié)果函數(shù)
ADC讀取思路,我們在這里調(diào)用R_ADC_ScanStart觸發(fā)相應(yīng)的adc通道轉(zhuǎn)換,當ADC轉(zhuǎn)換完成之后會將scan_complete_flag標志位變?yōu)閠rue。當我們判斷到標志位變?yōu)閠rue后我們使用R_ADC_Read()或R_ADC_Read32()讀取轉(zhuǎn)換完成的數(shù)值。
列表4:代碼清單25?3 ADC讀取轉(zhuǎn)換結(jié)果函數(shù)
/* 進行ADC 采集,讀取ADC 數(shù)據(jù)并轉(zhuǎn)換結(jié)果*/doubleRead_ADC_Voltage_Value(void){uint16_t adc_data;double a0;(void)R_ADC_ScanStart(&g_adc0_ctrl);while (!scan_complete_flag) //等待轉(zhuǎn)換完成標志{;}scan_complete_flag = false; //重新清除標志位/* 讀取通道0 數(shù)據(jù)*/R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data);/* ADC 原始數(shù)據(jù)轉(zhuǎn)換為電壓值(ADC 參考電壓為3.3V) */a0 = (double)(adc_data*3.3/4095);return a0;}
25.6.2.7
hal_entry入口函數(shù)
列表5:代碼清單25?4 hal_entry入口函數(shù)
voidhal_entry(void){LED_Init(); // LED 初始化Debug_UART4_Init(); // SCI4 UART 調(diào)試串口初始化/* ADC 初始化*/ADC_Init();printf("這是一個讀取電位器ADC 電壓轉(zhuǎn)換值的例程\r\n");printf("打開串口助手查看ADC 轉(zhuǎn)換結(jié)果,旋鈕電位器,可以看到ADC 值在一定范圍之內(nèi)發(fā)生變化\r\n");printf("開始讀取ADC 轉(zhuǎn)換值:\r\n");while(1){printf("a0 = %f\r\n", Read_ADC_Voltage_Value());R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); //大概0.5 秒鐘讀取一次LED1_TOGGLE;}#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();#endif}
下載驗證
用USBTYPE-C線連接開發(fā)板“USB TO UART”接口跟電腦,在電腦端打開串口調(diào)試助手,把編譯好的程序下載到開發(fā)板。在串口調(diào)試助手可看到從ADC引腳讀出的模擬電壓數(shù)值。
如您在使用瑞薩MCU/MPU產(chǎn)品中有任何問題,可識別下方二維碼或復(fù)制網(wǎng)址到瀏覽器中打開,進入瑞薩MCU/MPU官方技術(shù)論壇尋找答案或獲取在線技術(shù)支持。
https://bbs.21ic.com/renesas
未完待續(xù)
推薦閱讀

基本函數(shù)及說明和實驗驗證——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(90)

ADC簡介——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(91)

ADC掃描模式、轉(zhuǎn)換時間——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(92)

