1.0 ADC簡介
ADC(Analog-to-Digital Converter) 指模數轉換器。是指將連續變化的模擬信號轉換為離散的數字信號的器件。真實世界的模擬信號,例如溫度、壓力、聲音或者圖像等,需要轉換成更容易儲存、處理和發射的數字形式。模數轉換器可以實現這個功能,在各種不同的產品中都可以找到它的身影。與之相對應的 DAC(Digital-to-Analog Converter),它是 ADC 模數轉換的逆向過程。ADC 最早用于對無線信號向數字信號轉換。如電視信號,長短播電臺發射接收等。
1.1 I/O 設備模型框架
如下圖所示模數轉換一般要經過采樣、保持和量化、編碼這幾個步驟。在實際電路中,有些過程是合并進行的,如采樣和保持,量化和編碼在轉換過程中是同時實現的。
1.2 訪問 ADC 設備
應用程序通過 RT-Thread 提供的 ADC 設備管理接口來訪問 ADC 硬件,相關接口如下所示:
函數 | 描述 |
---|---|
rt_device_find() | 根據 ADC 設備名稱查找設備獲取設備句柄 |
rt_adc_enable() | 使能 ADC 設備 |
rt_adc_read() | 讀取 ADC 設備數據 |
rt_adc_disable() | 關閉 ADC 設備 |
2. RT-theard配置
2.1 硬件需求
實現功能:
板載Arduino拓展口六處模擬信號讀取。
1、RA6M4開發板
2、USB下載線,ch340串口和附帶2根母母線,rx---p613;tx---p614
實驗中J13六處模擬信號需要焊接插針,方便調試
2.2 軟件配置
Renesas RA6M4開發板環境配置參照:【基于 RT-Thread Studio的CPK-RA6M4 開發板環境搭建】
1、新建項目RA6M4-ADC工程
2、在RT-theard Setting 硬件下開啟ADC,使能ADC0
3、打開RA Smart Congigurator,在Stacks中New Stack添加r_adc
4、在Property的Module的Channel中勾選Channel0~5
5、確認端口一一對應P000~P005
6、然后Generate Project Content 同步更新剛剛配置的文件
圖形化配置已經完成,接下來配置相關代碼
3. 代碼分析
在src文件下新建test_adc.c和test_adc.h文件,其他不變。
test_adc.c
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#include
#include
#define ADC_NAME "adc0" /* ADC 設 備 名 稱 */
#define ADC_CHANNEL 6 /* ADC 通 道個數 */
#define REFER_VOLTAGE 330 /* 參 考 電 壓 3.3V,數 據 精 度 乘 以100保 留2位 小 數
*/
#define CONVERT_BITS (1 << 12) /* 轉 換 位 數 為12位 */
static int adc_sample(int argc, char *argv[])
{
rt_adc_device_t adc_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/* 查 找 設 備 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!
", ADC_NAME);
return RT_ERROR;
}
for (int var = 0; var < ADC_CHANNEL; ++var) {
/* 使 能 設 備 */
ret = rt_adc_enable(adc_dev, var);
/* 讀 取 采 樣 值 */
value = rt_adc_read(adc_dev, var);
rt_kprintf("the value is :%d
", value);
/* 轉 換 為 對 應 電 壓 值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d
", vol / 100, vol % 100);
/* 關 閉 通 道 */
ret = rt_adc_disable(adc_dev, var);
}
return ret;
}
/* 導 出 到 msh 命 令 列 表 中 */
MSH_CMD_EXPORT(adc_sample, adc voltage convert sample);
test_adc.h
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#ifndef TEST_ADC_H_
#define TEST_ADC_H_
static int adc_sample(int argc, char *argv[]);
#endif /* TEST_ADC_H_ */
保存完是灰色,沒有保存是藍色。
adc_sample
導 出 到 msh 命 令 列 表 中,采樣1次
4. 下載驗證
1、編譯重構
編譯成功
2、下載程序
下載成功
3、CMD串口調試
然后板載復位,輸入:adc_sample
效果如下
這樣我們就可以天馬行空啦!
審核編輯:湯梓紅
-
adc
+關注
關注
99文章
6531瀏覽量
545395 -
Renesas
+關注
關注
0文章
1758瀏覽量
22861 -
開發板
+關注
關注
25文章
5119瀏覽量
97938 -
Arduino
+關注
關注
188文章
6477瀏覽量
187546 -
RA6M4
+關注
關注
0文章
51瀏覽量
471
發布評論請先 登錄
相關推薦
評論