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