文章目錄
- 1.DAC輸出
-
- 1.1 DAC簡單介紹
- 1.2 DAC主要特點、功能和輸出公式
- 1.3 工程配置
- 1.4 代碼編寫
- 1.5 電路圖和實物連接配接
- 1.6 現象觀測
- 2.PWM DAC實驗
-
- 2.1 PWM DAC簡單介紹
- 2.2 PWM DAC實作
1.DAC輸出
1.1 DAC簡單介紹
上面,我們介紹了 STM32F4 的 ADC 使用,在此将介紹 STM32F4 的 DAC功能。
來自原子哥STM32開發指南HAL庫版本。
STM32F4 的 DAC 子產品(數字/模拟轉換子產品)是 12 位數字輸入,電壓輸出型的 DAC。DAC可以配置為 8 位或 12 位模式,也可以與 DMA 控制器配合使用。 DAC 工作在 12 位模式時,資料可以設定成左對齊或右對齊。 DAC 子產品有 2 個輸出通道,每個通道都有單獨的轉換器。在雙 DAC 模式下, 2 個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新 2 個通道的輸出。 DAC 可以通過引腳輸入參考電壓 Vref+(通 ADC 共用) 以獲得更精确的轉換結果。
1.2 DAC主要特點、功能和輸出公式
① 2 個 DAC 轉換器:每個轉換器對應 1 個輸出通道
② 8 位或者 12 位單調輸出
③ 12 位模式下資料左對齊或者右對齊
④ 同步更新功能
⑤ 噪聲波形生成
⑥ 三角波形生成
⑦ 雙 DAC 通道同時或者分别轉換
⑧ 每個通道都有 DMA 功能
當 DAC 的參考電壓為 Vref+的時候, DAC 的輸出電壓是線性的從 0~Vref+, 12 位模式下 DAC 輸出電壓與 Vref+以及 DORx 的計算公式如下:
DACx 輸出電壓=Vref ×(DORx/4095)
1.3 工程配置
開啟DAC1和ADC1_IN1。保持預設配置。
開啟序列槽1。
1.4 代碼編寫
重寫printf函數:
#include “stdio.h”
int fputc(int c,FILE *stream)
{
uint8_t ch[1]={c};
HAL_UART_Transmit(&huart1,ch,1,0xFFFF);
return c;
}
while:
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,4095);
HAL_Delay(10);
HAL_ADC_Start(&hadc1);
uint16_t Value=HAL_ADC_GetValue(&hadc1);
HAL_Delay(10);
printf("Value = %d\r\n",Value);
HAL_Delay(200);
1.5 電路圖和實物連接配接
P12 是多功能端口,我們隻需要通過跳線帽短接 P14 的 ADC 和 DAC,就可以開始做實驗了。
1.6 現象觀測
但通過電壓表測量可以發現确實輸出電壓受輸出值的調制。實驗結果沒錯。
2.PWM DAC實驗
上面介紹了 STM32F4 自帶 DAC 子產品的使用,但有時候,可能兩個 DAC 不夠
用,此時,我們可以通過 PWM+RC 濾波來實一個 PWM DAC。在此将向大家介紹如何使用 STM32F4 的 PWM 來設計一個 DAC。
來自原子哥STM32開發指南HAL庫版本。
2.1 PWM DAC簡單介紹
有時候, STM32F4 自帶的 2 路 DAC 可能不夠用,需要多路 DAC,外擴 DAC 成本又會高不少。此時,我們可以利用 STM32F4 的 PWM+簡單的 RC 濾波來實作 DAC 輸出,進而節省成本。 在精度要求不是很高的時候, PWM+RC 濾波的 DAC 輸出方式,是一種非常廉價的解決方案。
2.2 PWM DAC實作
個人感覺和PWM控制占空比輸出電壓差不多。
本人在這篇部落格中記錄了PWM輸出的内容。
STM32應用(一)控制舵機SG90/MG996R/數字舵機