- 前言
- 一、STM32 帶 DAC 的系列
- 二、DAC 基礎(chǔ)簡(jiǎn)介
- 2.1 DAC輸出引腳
- 2.2 引腳配置
- 2.3 DAC輸出電壓計(jì)算方法
- 三、CubeMX DAC配置
- 3.1 觸發(fā)源 software trigger 與 None 的區(qū)別
- 四、 測(cè)試
- 4.1 基礎(chǔ)測(cè)試
- 4.2 波形輸出
一、STM32 帶 DAC 的系列
目前博主產(chǎn)品使用的芯片為 STM32L051C8 系列,本來(lái)還想著直接CubeMX 設(shè)置一下,直接測(cè)試,才發(fā)現(xiàn)這個(gè)片片根本沒(méi)有 DAC = =! 好吧,尷尬,后來(lái)查了下 L 系列確實(shí)都沒(méi)有 DAC。
STM32L0:
STM32L0 系列都沒(méi)有 DAC。(ST產(chǎn)品線一直在完善,也可能是我自己不知道有,有錯(cuò)誤請(qǐng)指出?。?/p>
那么想著就用 STM32F103 系列把,然后又查了下資料,48pin 的STM32F103C系列 也沒(méi)有 DAC ,自己最常用的兩款芯片都沒(méi)有,網(wǎng)上也沒(méi)有直接說(shuō)哪些有哪些沒(méi)有的,只能去找 ST 的資料看看,果然在某份文檔中找到了。
STM32F103:
STM32F103 系列帶有 DAC 的型號(hào)如下圖列表所示(從 STM32F103RC 起往上都有DAC):
那這么看到,如果使用STM32F系列,那么至少也得從64pin 的 STM32F103RC 開始使用了。
至于 STM32F1 系列的其他型號(hào),比如 F100、F101、F102、F105/7 等系列,因?yàn)椴怀S?,我也沒(méi)有特意去查找。
考慮到想找一個(gè)與 STM32F103 Pin to Pin 的,我又去找了另外一個(gè)常用的系列,STM32L1系列 ,居然發(fā)現(xiàn)了 STM32L151C8 居然也有 DAC, 這倒是可以用用。
STM32L1:
STM32L1 系列都帶有 DAC : STM32L151xxxx 、STM32L152xxxx 。
STM32F4:
更高端的 F4 系列芯片,想想都知道,全系列帶有 DAC ,就是貴啊。
STM32F4 系列都帶有 DAC 。
這里再多余的補(bǔ)充一下,為什么我找芯片都是從最低端的型號(hào)開始,而且找到合適的基本不會(huì)再往功能更強(qiáng)的去找了:
因?yàn)閷?shí)際產(chǎn)品! 做產(chǎn)品不可能和學(xué)習(xí)一樣,大家學(xué)習(xí)買的開發(fā)板,都是上百個(gè)腳,一步到位,基本都是系列旗艦芯片了,功能越強(qiáng)越好,性能越強(qiáng)越好。但是作為實(shí)際應(yīng)用的產(chǎn)品來(lái)說(shuō),需要考慮成本的,沒(méi)有一家公司會(huì)在滿足性能的低成本芯片的情況下,去找一個(gè)所謂更好,更強(qiáng)的芯片!
二、DAC 基礎(chǔ)簡(jiǎn)介
DAC把數(shù)字量轉(zhuǎn)換為模擬量,在單片機(jī)上 ,給指定的寄存器一個(gè)數(shù)字量,模塊就會(huì)轉(zhuǎn)化成對(duì)應(yīng)的模擬電壓輸出,理解和使用起來(lái)都是很簡(jiǎn)單的,如果想知道基本的理論,說(shuō)明大家可以網(wǎng)上搜索一下一大堆,這里我們直接用起來(lái)沒(méi)必要介紹那些 “沒(méi)用” 理論。
對(duì)于 STM32 而言,我們使用起來(lái)也是非常簡(jiǎn)單,只需要記住下面幾個(gè)點(diǎn),基本上就沒(méi)問(wèn)題了:
2.1 DAC輸出引腳
STM32 常用系列的 DAC 輸出通道都是固定的:
DAC_OUT1 : PA4
DAC_OUT2 : PA5
2.2 引腳配置
在 IO 配置的時(shí)候?yàn)榱吮苊忸~外的干擾, PA4 和 PA5 建議配置為模擬功能。
如果使用 CubeMX 軟件,選擇了 DAC 輸出,系統(tǒng)自動(dòng)會(huì)選擇成 Analog mode,使能 DAC 通道之后,相應(yīng)的 GPIO 引腳會(huì)自動(dòng)與 DAC 的模擬輸出相連。
2.3 DAC輸出電壓計(jì)算方法
12位模式下面:
DAC輸出電壓 = (DOR/2^12) * Vref+
上面 DOR 是寄存器,最終會(huì)拿到我們寫入的數(shù)字量的寄存器
關(guān)于到底用 4096 還是 4095 ,其實(shí)平時(shí)用起來(lái)差不多,ST 的手冊(cè)上面為 4095,那么建議4095 嚴(yán)謹(jǐn)一點(diǎn)吧,這里大家知道就行
一般來(lái)說(shuō),我們 Vref+ 可以連接至 VCC ,比如說(shuō)3.3V , 那就是 DAC輸出電壓 = (寫入的數(shù)字量 / 4095) * 3.3
那么同樣的,8位模式下面的計(jì)算方法:
DAC輸出電壓 = (寫入的數(shù)字量 / 255) * 3.3
三、CubeMX DAC配置
那么接下來(lái)我們來(lái)簡(jiǎn)單測(cè)試一下 DAC 的效果,這里我們使用 STM32CubeMX 軟件進(jìn)行配置。
DAC 的配置是相對(duì)很簡(jiǎn)單的,如下圖:
選擇兩個(gè)輸出通道,其中 External Trigger 選項(xiàng)為是否選擇 外部中斷EXTI9 觸發(fā),如下圖:
我們測(cè)試的時(shí)候使用軟件觸發(fā),不使用外部中斷,所以這里不選擇。
DAC 的基本設(shè)置,很簡(jiǎn)單,對(duì)于博主使用的 STM32L151 來(lái)說(shuō)就只有2個(gè)選項(xiàng):
關(guān)于輸出緩存:
DAC選擇了輸出緩存,可以用來(lái)減少輸出阻抗,無(wú)需外部運(yùn)放即可直接驅(qū)動(dòng)外部負(fù)載。但是輸出的電壓沒(méi)法低于20mv。
不使能輸出緩存,DAC可以輸出低于20mv的信號(hào)。
對(duì)于其他型號(hào)的 DAC ,可能還會(huì)有下面兩個(gè)選項(xiàng):
Wave generation mode
:
波形生成模式:可選 三角波發(fā)生器 ( Triangle wave generation
) 和 噪聲波形 ( noise wave generation
)
Maximum Triangle Amplitude
:
最大三角波幅: 0-4095 對(duì)應(yīng) 0V~3.3V
3.1 觸發(fā)源 software trigger 與 None 的區(qū)別
這里要額外說(shuō)明一下,最后一個(gè)選項(xiàng) software trigger
(軟件觸發(fā)) 與 選擇 None
(沒(méi)有觸發(fā)源)的區(qū)別。
這兩種觸發(fā)源很多小伙伴在使用的時(shí)候會(huì)搞糊涂,實(shí)際上這兩者是完全不同的,先用文字簡(jiǎn)單解釋一下(簡(jiǎn)單使用 HAL 庫(kù),不了解寄存器沒(méi)關(guān)系,這里只是為了說(shuō)明區(qū)別,):
選擇 None
(沒(méi)有觸發(fā)源):
只在向 DAC 數(shù)據(jù)寄存器 DHR 寫入數(shù)據(jù)之后,DAC 轉(zhuǎn)化模塊自動(dòng)轉(zhuǎn)換一次。
選擇 software trigger
(軟件觸發(fā)):
向軟件觸發(fā)寄存器 SWTRIGR 中寫入命令時(shí)觸發(fā)轉(zhuǎn)換,將 DOR 寄存器中的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。 但是在這個(gè)之間需要向 DAC 數(shù)據(jù)寄存器 DHR 寫入數(shù)據(jù), 再進(jìn)行軟件觸發(fā)操作。
可以說(shuō),software trigger
(軟件觸發(fā))就比 None
(沒(méi)有觸發(fā)源) 多一個(gè)步驟,首先都要寫 DHR 寄存器寫入數(shù)據(jù),寫完后 None
自動(dòng)轉(zhuǎn)換,但是 software trigger
需要多一步軟件觸發(fā)操作。
在標(biāo)準(zhǔn)庫(kù)中,使用步驟區(qū)別:
如果模式為 DAC_Trigger_None
:
直接使用 DAC_SetChannelxData()
設(shè)置輸出電壓,就可以設(shè)定輸出電壓的大小
如果模式為軟件觸發(fā):
每次在使用 DAC_SetChannelxData()
設(shè)置或者修改輸出電壓后, 還需要調(diào)用 DAC_SoftwareTriggerCmd()
,使能軟件觸發(fā)。
在 HAL 庫(kù)中,沒(méi)有單獨(dú)的軟件觸發(fā)的代碼,因?yàn)?HAL_DAC_Start()
函數(shù)中包含了軟觸發(fā)轉(zhuǎn)換的代碼。
所以在 HAL 庫(kù)中,建議的使用方法步驟為:
初始化完成后,先使用 HAL_DAC_SetValue();
,然后再使用 HAL_DAC_Start();
,這樣的先后順序不管是使用上面的那種方式,都能夠正常輸出電壓值。
明白了 軟件觸發(fā) 以后,在平時(shí)使用中需要謹(jǐn)慎使用,因?yàn)槊恳淮涡薷妮敵鲭妷汉?,都必須產(chǎn)生一次觸發(fā)信號(hào)來(lái)使得 DAC 觸發(fā) 。
四、 測(cè)試
接下來(lái)簡(jiǎn)單測(cè)試一下 STM32 的DAC。
4.1 基礎(chǔ)測(cè)試
基礎(chǔ)測(cè)試就是非常簡(jiǎn)單,使用 STM32CubMX 生成代碼后,直接加上兩句話就可以使得 DAC 有輸出了,比如下圖示例:
上面設(shè)置 value 為 2048 ,根據(jù)上面的 0-4095 對(duì)應(yīng) 0V~3.3V,可知,我們的電壓值為 1.6V 左右。
然后直接測(cè)量 通道2(PA5) 的電壓,如下:
4.2 波形輸出
上文我們說(shuō)過(guò),對(duì)于我目前使用的 STM32L151 不支持波形輸出,其他型號(hào)的可能可以直接設(shè)置,那么我們自己來(lái)簡(jiǎn)單實(shí)現(xiàn)一個(gè)波形輸出,也是比較簡(jiǎn)單的:
while (1)
{
for (mydac_value = 4095; mydac_value > 0; mydac_value--)
{
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_12B_R,mydac_value);
HAL_Delay(1);
}
for (mydac_value = 0; mydac_value < 4095; mydac_value++)
{
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_12B_R,mydac_value);
HAL_Delay(1);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
直接上一下波形圖:
上面的圖形,有個(gè)小小的疑問(wèn),按理來(lái)說(shuō),從 0 ~ 3.3V 需要的時(shí)間 4095 ms ,4s 多,但是實(shí)際上花的時(shí)間比這多得多(5s 一個(gè)格子快2個(gè)格子了),難道這里是單片機(jī)處理 DAC 的值所需要的花費(fèi)的時(shí)間 ? 這個(gè)問(wèn)題如果發(fā)現(xiàn)問(wèn)題的小伙伴還望告知!謝謝!
本文從應(yīng)用的角度介紹了 STM32 系列 DAC 的基本使用,小小的總結(jié)了一下一些常用的帶 DAC 的系列型號(hào)。
沒(méi)有過(guò)多的那些枯燥的寄存器什么的理論,雖然 DAC 的使用確實(shí)比較簡(jiǎn)單,但是還是有些細(xì)節(jié)問(wèn)題文章也給到了說(shuō)明,只希望大家能夠簡(jiǎn)單快速的把 DAC 使用起來(lái)。
好了,本文就到這里,謝謝大家!
-
芯片
+關(guān)注
關(guān)注
459文章
51927瀏覽量
433711 -
單片機(jī)
+關(guān)注
關(guān)注
6058文章
44822瀏覽量
644737 -
dac
+關(guān)注
關(guān)注
43文章
2353瀏覽量
192748 -
STM32
+關(guān)注
關(guān)注
2283文章
10986瀏覽量
361310
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用STM32微控制器系列中的DAC生成音頻和波形之DAC特性
STM32U5系列TIMER+DMA+DAC應(yīng)用演示

使用STM32F0xx系列微控制器的DAC模塊實(shí)現(xiàn)音頻和生產(chǎn)波形
STM32 F1系列 DAC的示例詳解

STM32-快速上手DAC

STM32 DAC的配置與使用

AN4566 STM32系列單片機(jī)DAC性能增強(qiáng)方法介紹

STM32 系列DAC的基本使用

STM32數(shù)模轉(zhuǎn)換器(DAC)簡(jiǎn)析

使用STM32微控制器系列中的DAC生成音頻和波形

評(píng)論