Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

STM32 DAC 基礎配置教程:定電壓輸出與波形生成

編輯:Linux 教學

STM32F103 DAC 概覽

STM32F103VCT6 內置兩路 12 位 DAC,轉換速度官方未明確給出,網上常引用 1 MHz(即 1 μs)作為參考。對比 ADC 在 56/72 MHz 下約 1 μs 轉換時間,DAC 時序特性與 ADC 存在對稱關係。本文以定電壓輸出為例,講解 DAC 配置要點。

定電壓輸出與波形輸出的關鍵差異

兩者配置流程幾乎相同,定電壓輸出只需額外調用一個函數觸發更新:

DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);

此函數將數據寄存器的值實際搬運到輸出緩衝器,否則 DAC 保持舊值不變。

完整配置代碼示例

void DAC_VOLTAGE_Configuration(void)
{
    DAC_InitTypeDef DAC_InitStructure;

    DAC_DeInit();  // 復位 DAC 外設

    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;        // 軟件觸發
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; // 不產生波形
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;  // 關閉輸出緩衝(可根據負載決定)

    DAC_Init(DAC_Channel_1, &DAC_InitStructure);
    DAC_Cmd(DAC_Channel_1, ENABLE);

    // 關鍵:軟件觸發更新輸出
    DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
}

數據更新流程

配置完成後,使用 DAC_SetChannel1Data(DAC_Align_12b_R, value) 寫入數據。每次修改數據必須雙重調用:

DAC_SetChannel1Data(DAC_Align_12b_R, 4000);  // 寫入 12 位右對齊數據
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE); // 觸發更新

為什麼需要雙重調用?

DAC 數據寄存器與輸出緩衝器分離,寫入數據寄存器後不會立即反映到輸出腳。由於未使用定時器/DMA 硬件觸發,必須手動調用軟件觸發命令將數據搬移到輸出緩衝器,完成實際電壓更新。

常見踩坑指南

  1. 對齊參數不可硬編碼地址:DAC_Align_12b_R 等枚舉值不包含外設基址,切勿嘗試按 ADC 配置方式計算絕對地址傳入。
  2. 輸出緩衝器選擇:驅動高阻抗負載時建議開啟緩衝器(DAC_OutputBuffer_Enable),但會引入輸出電壓偏移;直連 ADC 或高阻輸入可關閉以獲得軌到軌輸出。
  3. 通道獨立性:兩路 DAC 共享觸發源配置,但數據寄存器、觸發命令完全獨立,互不干擾。

進階應用提示

  • 波形生成:配置 DAC_WaveGeneration_Noise/Triangle 並設置 DAC_Trigger_Tx_TRGO 連接定時器,可產生噪聲/三角波。
  • DMA 雙緩衝:結合定時器觸發 + DMA 循環傳輸,實現零 CPU 干預的任意波形輸出(如正弦波、音頻回放)。
  • 校準與精度:出廠校準值存放在系統存儲區,可通過 DAC_GetCalibrationValue() 讀取並應用於高精度場合。
Copyright © Windows教程網 All Rights Reserved