基于野火STM3開發板
【*】 程序簡介
-工程名稱:DAC 輸出正弦波
-實驗平臺: 野火STM32 F407 開發板
-MDK版本:5.16
-ST固件庫版本:1.8.0
【 !】功能簡介:
使用STM32的DAC輸出正弦波.
學習目的:學會使用STM32 DAC,使用定時器觸發控制信號頻率
【 !】實驗操作:
下載本程序,使用示波器檢測開發板的PA4、PA5引腳,可測得正弦波。
【 !!】注意事項:
PA4與攝像頭引腳共用,做本實驗時不要與攝像頭同時使用。
跳線帽:PA5引腳與電容按鍵引腳共用,做本實驗時把電容按鍵上方的跳線帽拔掉。
/*********************************************************************************************/
【*】 引腳分配
STM32引腳DAC直接引出。
DAC_CH1<--->PA4
DAC_CH2<--->PA5(注意要拔掉電容按鍵的跳帽)
串口(TTL-USB TO UART):
CH340的收發引腳與STM32的發收引腳相連。
CH340 RXD <-----> USART1 TX (PA9)
CH340 TXD <-----> USART1 RX (PA10)
【*】 程序描述
<bsp_dac.c>
1.通過腳本計算填充正弦波數據表
2.使能DAC的時鐘,初始化GPIO
3.配置DAC通道1、通道2
4.配置TIM
5.配置DMA
6.DAC初始化函數
為方便起見,我們使用了 Python 和 Matlab 腳本制作正弦波表,腳本的代碼存儲在本工程的目錄下
本章實驗中需要控制正弦波的頻率,就需要定時器定時觸發DAC進行數據轉換
v = sin(t)+1 ,此時,v 的輸出范圍為 [0:2]
v = 3.3*(sin(t)+1)/2 ,此時,v 的輸出范圍為 [0:3.3]
電壓值以 DAC 寄存器的形式表示:Reg_val = 2^12/3.3 * v = 2^11*(sin(t)+1),此時,存儲到 DAC
寄存器的值范圍為 [0:4096]
實踐證明,取 32 個點進行電壓輸出已經能較好地還原正弦波形
正弦波頻率的計算方式:
Tsystick = 1/84000000,
定時器 TIM2 的單個時鐘周期:
Ttim = (TIM_Prescaler + 1) × Tsystick,
定時器觸發周期:
Tupdate = (TIM_Period + 1) × Ttim,
根據正弦波單個周期的點數 N,求出正弦波單個周期時間為:
Tsin = Tupdate × N,
對應正弦波的頻率為:
fsin =1/Tsin=1/(Tsystick × (TIM_Prescaler + 1) × (TIM_Period + 1) × N)
根據上述公式,代入本工程的配置,可得本實驗中的正弦波頻率為 131250:
fsin =1/Tsin=84000000/((0 + 1) × (19 + 1) × 32)= 131250
在實際應用中,可以根據工程里的正弦波點數和定時器配置生成特定頻率的正弦波。
需要留意的是無論是要生成什么波形,一個周期內的點數是和DAC外設最高輸出頻率有關系的
若縮短時間間隔,提高單個周期內的輸出點數,可以得到逼近連續正弦波的圖形
/*********************************************************************************************/
【*】 時鐘
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz
B.各總線運行時鐘:
-系統時鐘 = SYCCLK = AHB1 = 168MHz
-APB2 = 84MHz
-APB1 = 42MHz
C.浮點運算單元:
不使用
原理圖: 無
仿真: 無
代碼:
DAC—輸出正弦波.7z
(1.06 MB, 下載次數: 20)
2024-1-4 10:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|