STM32学习笔记--DAC
目錄:
- 一、DAC原理
- 1.DAC定義
- 2.STM32DAC簡介
- 3.STM32DAC工作原理
- 二、STM32DAC庫函數配置
- 參考資料
一、DAC原理
1.DAC定義
? DAC是Digital-to- Analog Converter的縮寫,數字/模擬轉換模塊的簡稱,它的作用就是把輸入的數字編碼,轉換成對應的模擬電壓輸出,它的功能與ADC相反。
2.STM32DAC簡介
? 數字/模擬轉換模塊(DAC)是12位數字輸入,電壓輸出的數字/模擬轉換器。DAC可以配置為8位或12位模式,也可以與DMA控制器配合使用。DAC工作在12位模式時,數據可以設置成左對齊或右對齊。DAC模塊有2個輸出通道,每個通道都有單獨的轉換器。在雙DAC模式下,2個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新2個通道的輸出。DAC可以通過引腳輸入參考電壓VREF+以獲得更精確的轉換結果。
? 主要功能特點如下:
? ● 2個DAC轉換器:每個轉換器對應1個輸出通道
? ● 8位或者12位單調輸出
? ● 12位模式下數據左對齊或者右對齊
? ● 同步更新功能
? ● 噪聲波形生成
? ● 三角波形生成
? ● 雙DAC通道同時或者分別轉換
? ● 每個通道都有DMA功能
? ● 外部觸發轉換
? ● 輸入參考電壓VREF+
? STM32DAC結構框圖如下:
3.STM32DAC工作原理
(1)電源、參考電壓及輸出通道
? VDDA和VSSA為DAC模塊模擬部分的供電;VREF+則是DAC模塊的參考電壓。
? DAC_OUTx就是DAC的輸出通道了。
(2)DAC轉換及輸出
? 數字至模擬轉換器x是DAC核心部件,它以VREF+作為參考電源,以DAC 的數據寄存器“DORx”的數字信號作為輸入,經過它轉換得的模擬信號由“DAC_OUTx”通道輸出。但是,用戶不能直接對寄存器DAC_DORx寫入數據,任何輸出到DAC通道x的數據都必須寫入DHRx寄存器。
◆ DHR相關寄存器
? ? 用戶寫入的數據保持寄存器:
? ? 單DAC通道模式:總共有6個DAC_DHRyyyx寄存器
? ? ? ● DAC通道x的12位右對齊數據保持寄存器 DAC_DHR12Rx (x=1、2)
? ? ? ● DAC通道x的12位左對齊數據保持寄存器 DAC_DHR12Lx (x=1、2)
? ? ? ● DAC通道x的8位右對齊數據保持寄存器 DAC_DHR8Rx (x=1、2)
? ? 雙DAC通道模式:總共有3個DAC_DHRyyyD寄存器
? ? ? ● 雙DAC的12位右對齊數據保持寄存器 DAC_DHR12RD
? ? ? ● 雙DAC的12位左對齊數據保持寄存器 DAC_DHR12LD
? ? ? ● 雙DAC的8位右對齊數據保持寄存器 DAC_DHR8RD
? 內部的數據保存寄存器x
? ● 內部的數據保存寄存器1:DHR1
? ● 內部的數據保存寄存器2:DHR2
◆ DAC數據格式
? 根據選擇的配置模式,數據按照下文所述寫入指定的寄存器:
? ● 單DAC通道x,有3種情況:
? ? ─ 8位數據右對齊:用戶須將數據寫入寄存器DAC_DHR8Rx[7:0]位(實際是存入寄存器DHRx[11:4]位)
? ? ─ 12位數據左對齊:用戶須將數據寫入寄存器DAC_DHR12Lx[15:4]位(實際是存入寄存器DHRx[11:0]位)
? ? ─ 12位數據右對齊:用戶須將數據寫入寄存器DAC_DHR12Rx[11:0]位(實際是存入寄存器DHRx[11:0]位)
? 根據對DAC_DHRyyyx寄存器的操作,經過相應的移位后,寫入的數據被轉存到DHRx寄存器中(DHRx是內部的數據保存寄存器x)。隨后,DHRx寄存器的內容或被自動地傳送到DORx寄存器,或通過軟件觸發或外部事件觸發被傳送到DORx寄存器。
◆ DAC通道x數據輸出寄存器DAC_DORx寄存器
? DAC通道2數據輸出寄存器(DAC_DOR1)
? DAC通道1數據輸出寄存器(DAC_DOR2)
◆ 觸發配置
?由DAC控制寄存器DAC_CR的第2位TEN1和第18位TEN2分別控制DAC的通道1和通道2是否使能觸發。
?如果使能觸發,即寄存器DAC_CR的TENx位置’1’,DAC轉換可以配置為由某外部事件或軟件觸發。
?配置DAC_CR寄存器的控制位TSELx[2:0]可以選擇8個觸發事件之一觸發DAC轉換。
?如果配置為軟件觸發,則需要通過對DAC軟件觸發寄存器DAC_SWTRIGR相應的SWTRIGx位置’1’ 。
?觸發發生后,3個APB1時鐘周期后,最近存放在寄存器DAC_DHRx中的數據會被傳送到寄存器DAC_DORx中,轉換即開始。
◆ DAC轉換及輸出總結:
?針對單DAC模式,無觸發
?● 不能直接對寄存器DAC_DORx寫入數據,任何輸出到DAC通道x的數據都必須寫入DAC_DHRyyyx數據保持寄存器。
?● 寫入DAC_DHRyyyx寄存器的數據經過相應的移位后,被轉存到內部的數據保存寄存器x(DHRx寄存器)中。
?● 如果沒有使能觸發(寄存器DAC_CR的TENx位置’0’),存入寄存器DAC_DHRx的數據會在一個APB1時鐘周期后自動傳至寄存器DAC_DORx。
?● 一旦數據從DAC_DHRx寄存器裝入DAC_DORx寄存器,在經過時間tSETTLING之后,輸出即有效,這段時間的長短依電源電壓和模擬輸出負載的不同會有所變化。
(3)DAC輸出電壓
? 數字輸入經過DAC被線性地轉換為模擬電壓輸出,其范圍為0到VREF+。
? 任一DAC通道引腳上的輸出電壓滿足下面的關系:
? ? DAC輸出 = VREF x (DOR / 4095)
(4)使能DAC通道
? 將DAC_CR寄存器的ENx位置’1’即可打開對DAC通道x的供電。經過一段啟動時間tWAKEUP,DAC通道x即被使能。
? 注意: ENx位只會使能DAC通道x的模擬部分,即便該位被置’0’,DAC通道x的數字部分仍然工作。
(5)DAC輸出緩存
? DAC集成了2個輸出緩存,可以用來減少輸出阻抗,無需外部運放即可直接驅動外部負載。每個DAC通道輸出緩存可以通過設置DAC_CR寄存器的BOFFx位來使能或者關閉。
二、STM32DAC庫函數配置
? 以設置DAC模塊的通道1來輸出模擬電壓為例
1.開啟PA口和DAC時鐘,設置PA4為模擬輸入
RCC_APB1PeriphClockCmd()
RCC_APB2PeriphClockCmd()
GPIO_Init()
2.初始化DAC,設置DAC的工作模式
void DAC_Init(uint32_t DAC_Channel,
DAC_InitTypeDef* DAC_InitStruct)
? 參數設置結構體類型DAC_InitTypeDef的定義:
typedef struct { uint32_t DAC_Trigger; //用來設置是否使用觸發功能 uint32_t DAC_WaveGeneration; //用來設置是否使用波形發生 uint32_t DAC_LFSRUnmask_TriangleAmplitude;//用來設置屏蔽/幅值選擇器,這個變量只在 使用波形發生器的時候才有用 uint32_t DAC_OutputBuffer; //用來設置輸出緩存控制位 }DAC_InitTypeDef? 第一個參數 DAC_Trigger 用來設置是否使用觸發功能,前面已經講解過這個的含義,這里我們不是用觸發功能,所以值為 DAC_Trigger_None。
? 第二個參數 DAC_WaveGeneratio 用來設置是否使用波形發生,這里我們前面同樣講解過不使用。所以值為 DAC_WaveGeneration_None。
? 第三個參數 DAC_LFSRUnmask_TriangleAmplitude 用來設置屏蔽/幅值選擇器,這個變量只在使用波形發生器的時候才有用,這里我們設置為 0 即可,值為DAC_LFSRUnmask_Bit0。
? 第四個參數 DAC_OutputBuffer 是用來設置輸出緩存控制位。
? 代碼:
3.使能DAC轉換通道
void DAC_Cmd(uint32_t DAC_Channel
FunctionalState NewState)
4.設置DAC的輸出值
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
? 第一個參數設置對齊方式。可以為:
? ? 12位右對齊DAC_Align_12b_R,
? ? 12位左對齊DAC_Align_12b_L,
? ? 8位右對齊DAC_Align_8b_R方式。
? 第二個參數就是DAC的輸入值了。
? 讀出DAC的數值,函數是:
uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)
DAC_GetDataOutputValue(DAC_Channel_1);參考資料
? 1.STM32 DAC工作原理
? 2.【STM32】DAC基本原理、寄存器、庫函數(DAC一般步驟)
總結
以上是生活随笔為你收集整理的STM32学习笔记--DAC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win 7 远程桌面报错“出现身份验证错
- 下一篇: osgearth操作器EarthMani