基于野火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)
|