25.6
實(shí)驗(yàn):電位器電壓采集
25.6.1
硬件設(shè)計(jì)
野火啟明6M5開發(fā)板的ADC電位器電路圖如下圖所示。

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

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

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

25.6.2
軟件設(shè)計(jì)
25.6.2.1
新建工程
對(duì)于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“25_ADC”,最后再將它導(dǎo)入到我們的e2studio工作空間中。
對(duì)于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“25_ADC”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開該工程。
工程新建好之后,在工程根目錄的“src”文件夾下面新建“key”文件夾,再進(jìn)入“key”文件夾里面新建源文件和頭文件:“bsp_adc.c”和“bsp_adc.h”。工程文件結(jié)構(gòu)如下。
列表1:文件結(jié)構(gòu)
左右滑動(dòng)查看完整內(nèi)容
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配置界面進(jìn)行配置。
首先依次點(diǎn)擊“Stacks”->“Pins”->“Peripherals”->“ADC0”來(lái)配置通道AN000對(duì)應(yīng)的引腳為P000。如下圖所示。

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

點(diǎn)擊可查看大圖
ADC的屬性配置:

點(diǎn)擊可查看大圖
表4:ADC屬性介紹

點(diǎn)擊可查看大圖
配置完成之后可以按下快捷鍵“Ctrl+S”保存,最后點(diǎn)右上角的“Generate Project Content”按鈕,讓軟件自動(dòng)生成配置代碼即可。
25.6.2.3
ADC初始化函數(shù)
列表2:代碼清單25?1 ADC初始化函數(shù)
左右滑動(dòng)查看完整內(nèi)容
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);
}
R_ADC_Open()為整個(gè)外設(shè)設(shè)置操作模式、觸發(fā)源、中斷優(yōu)先級(jí)和配置。如果啟用了中斷,該函數(shù)將注冊(cè)一個(gè)回調(diào)函數(shù)指針,以便在掃描完成時(shí)通知用戶。
R_ADC_ScanCfg()配置ADC掃描參數(shù)。通道特定設(shè)置是在這個(gè)函數(shù)中設(shè)置的。
25.6.2.4
ADC中斷回調(diào)函數(shù)
列表3:代碼清單25?2 ADC中斷回調(diào)函數(shù)
左右滑動(dòng)查看完整內(nèi)容
//ADC 轉(zhuǎn)換完成標(biāo)志位
volatilebool scan_complete_flag =false;
voidadc_callback(adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag =true;
}
在FSP配置頁(yè)面注冊(cè)回調(diào)函數(shù)以及優(yōu)先級(jí),我們就可以使用來(lái)自ADC的中斷回調(diào)函數(shù)了。
在每種模式中,模擬通道按通道數(shù)的升序進(jìn)行轉(zhuǎn)換,然后掃描溫度傳感器和電壓傳感器(如果它們也被勾選了的話)。每一種掃描模式都有著它的優(yōu)點(diǎn)和缺點(diǎn),但具體使用什么模式進(jìn)行ADC轉(zhuǎn)換,就需要通過(guò)我們的項(xiàng)目的需求需要什么樣的效果來(lái)決定。
注
我們通過(guò)ADC的中斷回調(diào)函數(shù)來(lái)判斷ADC是否轉(zhuǎn)換完成。我們需要定義了一個(gè)布爾類型的數(shù)據(jù)scan_complete_flag來(lái)當(dāng)做ADC讀取完成的標(biāo)志位。當(dāng)沒有轉(zhuǎn)換完成的時(shí)候scan_complete_flag的值一直為false,單ADC觸發(fā)中斷的時(shí)候?qū)can_complete_flag的值變?yōu)閠rue。
25.6.2.5
如果未啟用中斷
如果未啟用中斷,則可使用R_ADC_StatusGet()API用于輪詢ADC以確定掃描何時(shí)完成。讀取API函數(shù)用于訪問(wèn)轉(zhuǎn)換后的ADC結(jié)果。這適用于支持校準(zhǔn)的MCU的普通掃描和校準(zhǔn)掃描。
25.6.2.6
ADC讀取轉(zhuǎn)換結(jié)果函數(shù)
ADC讀取思路,我們?cè)谶@里調(diào)用R_ADC_ScanStart觸發(fā)相應(yīng)的adc通道轉(zhuǎn)換,當(dāng)ADC轉(zhuǎn)換完成之后會(huì)將scan_complete_flag標(biāo)志位變?yōu)閠rue。當(dāng)我們判斷到標(biāo)志位變?yōu)閠rue后我們使用R_ADC_Read()或R_ADC_Read32()讀取轉(zhuǎn)換完成的數(shù)值。
列表4:代碼清單25?3 ADC讀取轉(zhuǎn)換結(jié)果函數(shù)
左右滑動(dòng)查看完整內(nèi)容
/* 進(jìn)行ADC 采集,讀取ADC 數(shù)據(jù)并轉(zhuǎn)換結(jié)果*/
doubleRead_ADC_Voltage_Value(void)
{
uint16_tadc_data;
doublea0;
(void)R_ADC_ScanStart(&g_adc0_ctrl);
while(!scan_complete_flag)//等待轉(zhuǎn)換完成標(biāo)志
{
;
}
scan_complete_flag =false;//重新清除標(biāo)志位
/* 讀取通道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);
returna0;
}
R_ADC_ScanStart()啟動(dòng)軟件掃描或啟用掃描的硬件觸發(fā)器,具體取決于觸發(fā)器在R_ADC_Open調(diào)用中的配置方式。如果該單元被配置為ELC或外部硬件觸發(fā),那么該功能允許觸發(fā)信號(hào)到達(dá)ADC單元。該函數(shù)不能控制觸發(fā)器本身的生成。如果該單元被配置為軟件觸發(fā),則該功能啟動(dòng)軟件觸發(fā)掃描。
R_ADC_Read()從單通道或傳感器寄存器讀取轉(zhuǎn)換結(jié)果,返回的數(shù)據(jù)為uint16_t型。
R_ADC_Read32()從單通道或傳感器寄存器讀取轉(zhuǎn)換結(jié)果,返回的數(shù)據(jù)為uint32_t型。
25.6.2.7
hal_entry入口函數(shù)
列表5:代碼清單25?4 hal_entry入口函數(shù)
左右滑動(dòng)查看完整內(nèi)容
voidhal_entry(void)
{
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化
/* ADC 初始化*/
ADC_Init();
printf("這是一個(gè)讀取電位器ADC 電壓轉(zhuǎn)換值的例程
");
printf("打開串口助手查看ADC 轉(zhuǎn)換結(jié)果,旋鈕電位器,可以看到ADC 值在一定范圍之內(nèi)發(fā)生
變化
");
printf("開始讀取ADC 轉(zhuǎn)換值:
");
while(1)
{
printf("a0 = %f
",Read_ADC_Voltage_Value());
R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);//大概0.5 秒鐘
讀取一次
LED1_TOGGLE;
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
25.6.3
下載驗(yàn)證
用USBTYPE-C線連接開發(fā)板“USB TO UART”接口跟電腦,在電腦端打開串口調(diào)試助手,把編譯好的程序下載到開發(fā)板。在串口調(diào)試助手可看到從ADC引腳讀出的模擬電壓數(shù)值。
-
電位器
+關(guān)注
關(guān)注
14文章
1030瀏覽量
69423 -
adc
+關(guān)注
關(guān)注
100文章
7883瀏覽量
556694 -
瑞薩
+關(guān)注
關(guān)注
37文章
22506瀏覽量
91079 -
電壓采集
+關(guān)注
關(guān)注
2文章
26瀏覽量
14732
原文標(biāo)題:ADC電壓值轉(zhuǎn)換&實(shí)驗(yàn):電位器電壓采集——瑞薩RA系列FSP庫(kù)開發(fā)實(shí)戰(zhàn)指南(93)
文章出處:【微信號(hào):瑞薩嵌入式小百科,微信公眾號(hào):瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RA系列FSP庫(kù)開發(fā)實(shí)戰(zhàn)指南之I2C讀寫EEPROM實(shí)驗(yàn)
RA MCU眾測(cè)寶典 | ADC/DAC之【RA2L1】DAC電壓輸出及ADC電壓采集實(shí)驗(yàn)
瑞薩RA系列FSP庫(kù)開發(fā)實(shí)戰(zhàn)指南之ADC電位器電壓采集實(shí)驗(yàn)
評(píng)論