開發(fā)環(huán)境:
RT-Thread Studio:v2.2.6
開發(fā)板:RA6M3 HMI Board開發(fā)板
MCU:R7FA6M3AH3CFB
1 RA6M3 DAC簡介
R7FA6M3有片上DAC外設(shè),總共有兩路DAC輸出通道,每路的分辨率可配置為12位, 這兩個(gè)通道之間互不影響,每個(gè)通道都可以使用ELC功能可外部觸發(fā)或者進(jìn)行與ADC單元1的同步轉(zhuǎn)換。
2 RT-Thread 的DAC簡介
DAC(Digital-to-Analogl Converter) 指數(shù)模轉(zhuǎn)換器。是指把二進(jìn)制數(shù)字量形式的離散數(shù)字信號(hào)轉(zhuǎn)換為連續(xù)變化的模擬信號(hào)的器件。在數(shù)字世界中,要處理不穩(wěn)定和動(dòng)態(tài)的模擬信號(hào)并不容易,基于 DAC 的特性,在各種不同的產(chǎn)品中都可以找到它的身影。與之相對(duì)應(yīng)的 ADC(Analog-to-Digital Converter)),它是 DAC 數(shù)模轉(zhuǎn)換的逆向過程。DAC 主要應(yīng)用于音頻放大,視頻編碼,電機(jī)控制,數(shù)字電位計(jì)等。
應(yīng)用程序通過 RT-Thread 提供的 DAC 設(shè)備管理接口來訪問 DAC 硬件,相關(guān)接口如下所示:
函數(shù) | 描述 |
---|---|
rt_device_find() | 根據(jù) DAC設(shè)備名稱查找設(shè)備獲取設(shè)備句柄 |
rt_dac_enable() | 使能 DAC設(shè)備 |
rt_dac_read() | 讀取 DAC設(shè)備數(shù)據(jù) |
rt_dac_disable() | 關(guān)閉 DAC設(shè)備 |
關(guān)于DAC的更多資料請(qǐng)參看RT-Thread官方手冊(cè):
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac
3 硬件連接
P014引腳可以連接到MCU內(nèi)部的 DAC 外設(shè),從而輸出外部電壓。
4 RA6M3 DAC配置
接下來配置DAC,只需要簡單配置就可使用。雙擊工程中的 RA Smart Configurator 圖標(biāo),第一次打開需要配置正確的 FSP 安裝路徑。
- FSP配置DAC
1.配置掃描通道對(duì)應(yīng)的引腳
2.修改通道號(hào)為 0,與 DAC0 對(duì)應(yīng)
- 配置DAC通道
然后打開對(duì)應(yīng)的通道
4 DAC代碼實(shí)現(xiàn)
筆者這里使用的DAC通道0,然后接到ADC的通道1,核心代碼如下:
#define DEV_ADC "adc0"
#define DEV_ADC_CHANNEL 1
#define DEV_DAC "dac0"
#define DEV_DAC_CHANNEL 0
#define REFER_VOLTAGE 330
#define CONVERT_BITS (1 < < 12)
void dac_test(void)
{
rt_adc_device_t dev_adc = (rt_adc_device_t)rt_device_find(DEV_ADC);
rt_dac_device_t dev_dac = (rt_dac_device_t)rt_device_find(DEV_DAC);
rt_uint32_t vol, value = 2048;
if(dev_adc == RT_NULL)
{
rt_kprintf("no adc device named %s\\n", DEV_ADC);
}
rt_adc_enable(dev_adc, DEV_ADC_CHANNEL);
if(dev_dac == RT_NULL)
{
rt_kprintf("no dac device named %s\\n", DEV_DAC);
}
rt_dac_enable(dev_dac, DEV_DAC_CHANNEL);
rt_dac_write(dev_dac, DEV_DAC_CHANNEL, value);
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the dac voltage is :%d.%02d \\n", vol / 100, vol % 100);
rt_thread_mdelay(100);
value = rt_adc_read(dev_adc, DEV_ADC_CHANNEL);
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc voltage is :%d.%02d \\n", vol / 100, vol % 100);
rt_adc_disable(dev_adc, DEV_ADC_CHANNEL);
rt_dac_disable(dev_dac, DEV_DAC_CHANNEL);
}
MSH_CMD_EXPORT(dac_test, dac_test);
5 測試驗(yàn)證
從以上打印信息可以看出,dac0和adc0已經(jīng)使能,將P001和P014連接,然后使用MSH命令‘dac_test’即可使能DAC線程。
DAC輸出電壓和ADC通道1的值相同。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
16900瀏覽量
349951 -
dac
+關(guān)注
關(guān)注
43文章
2261瀏覽量
190757 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
4900瀏覽量
97068 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1261瀏覽量
39842 -
RA6M3
+關(guān)注
關(guān)注
0文章
52瀏覽量
92
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論