開(kāi)發(fā)環(huán)境:
RT-Thread Studio:v2.2.6
開(kāi)發(fā)板:RA6M3 HMI Board開(kāi)發(fā)板
MCU:R7FA6M3AH3CFB
1 RA6M3 ADC簡(jiǎn)介
R7FA6M3有2個(gè)ADC單元,每個(gè)ADC單元有12位、10位、8位讀取數(shù)據(jù)的格式可以選擇,在單元0上有13個(gè)ADC通道,而在單元1上有16個(gè)ADC通道。 ADC單元具有三種掃描方式分別為:?jiǎn)未蚊枘J?、連續(xù)掃描模式和分組掃描模式,
2 RT-Thread 的ADC簡(jiǎn)介
ADC(Analog-to-Digital Converter) 指模數(shù)轉(zhuǎn)換器。是指將連續(xù)變化的模擬信號(hào)轉(zhuǎn)換為離散的數(shù)字信號(hào)的器件。
A/D轉(zhuǎn)換主要包括兩個(gè)內(nèi)容:采樣保持和量化編碼,將一個(gè)模擬信號(hào)進(jìn)行采樣,得到的樣點(diǎn)轉(zhuǎn)化為數(shù)字量,這是整個(gè)A/D轉(zhuǎn)換過(guò)程的核心,量化編碼分為好多算法,這里不深入研究了。ADC主要參數(shù)如下:
1.分辨率
AD轉(zhuǎn)換器輸出的數(shù)字量的最低位變化一個(gè)數(shù)時(shí),對(duì)應(yīng)輸入模擬量的變化量,A/D轉(zhuǎn)換器的位數(shù)越多,能夠分辨的最小模擬電壓值就越小,分辨率就越大,GD32的A/D轉(zhuǎn)換器是12位的,位數(shù)越多,表示分辨率越高,恢復(fù)模擬信號(hào)時(shí)會(huì)更精確。
2.相對(duì)精度
A/D轉(zhuǎn)換器實(shí)際輸出數(shù)字量與理論值之間的最大差值稱為相對(duì)精度。
3.轉(zhuǎn)換速度
A/D轉(zhuǎn)換器完成一次轉(zhuǎn)換所需要的時(shí)間,一般是us級(jí)別的。
應(yīng)用程序通過(guò) RT-Thread 提供的 ADC 設(shè)備管理接口來(lái)訪問(wèn) ADC 硬件,相關(guān)接口如下所示:
函數(shù) | 描述 |
---|---|
rt_device_find() | 根據(jù)ADC設(shè)備名稱查找設(shè)備獲取設(shè)備句柄 |
rt_adc_enable() | 使能ADC設(shè)備 |
rt_adc_read() | 讀取ADC設(shè)備數(shù)據(jù) |
rt_adc_disable() | 關(guān)閉ADC設(shè)備 |
關(guān)于ADC的更多資料請(qǐng)參看RT-Thread官方手冊(cè):
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc
3 硬件連接
P001引腳可以連接到MCU內(nèi)部的 ADC 外設(shè),從而對(duì)電位器輸入的模擬信號(hào)進(jìn)行采集。
4 RA6M3 ADC配置
接下來(lái)配置ADC,只需要簡(jiǎn)單配置就可使用。雙擊工程中的 RA Smart Configurator 圖標(biāo),第一次打開(kāi)需要配置正確的 FSP 安裝路徑。
- FSP配置ADC
1.配置掃描通道對(duì)應(yīng)的引腳
2.配置 name、unit、mode,選擇掃描的通道編號(hào)
- 配置ADC通道
然后打開(kāi)對(duì)應(yīng)的通道
5 ADC代碼實(shí)現(xiàn)
筆者這里使用的通道1,核心代碼如下:
#define ADC_DEV_NAME "adc0" /* ADC 設(shè)備名稱 */
#define ADC_DEV_CHANNEL 1 /* ADC 通道 */
#define REFER_VOLTAGE 330 /* 參考電壓 3.3V,數(shù)據(jù)精度乘以100保留2位小數(shù)*/
#define CONVERT_BITS (1 < < 12) /* 轉(zhuǎn)換位數(shù)為12位 */
static int adc_vol_sample(int argc, char *argv[])
{
rt_adc_device_t adc_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/* 查找設(shè)備 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!\\n", ADC_DEV_NAME);
return RT_ERROR;
}
/* 使能設(shè)備 */
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
/* 讀取采樣值 */
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
rt_kprintf("the value is :%d \\n", value);
/* 轉(zhuǎn)換為對(duì)應(yīng)電壓值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d \\n", vol / 100, vol % 100);
/* 關(guān)閉通道 */
ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
return ret;
}
/* 導(dǎo)出到 msh 命令列表中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
6 測(cè)試驗(yàn)證
從以上打印信息可以看出,adc0已經(jīng)使能,然后使用MSH命令‘a(chǎn)dc_vol_sample’即可使能ADC線程。
筆者這里將P001接到GND和3.3V電壓上,和實(shí)際的電壓是相符的。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350975 -
adc
+關(guān)注
關(guān)注
98文章
6495瀏覽量
544456 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1285瀏覽量
40079 -
RA6M3
+關(guān)注
關(guān)注
0文章
52瀏覽量
110
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論