【STM32最强F7】简易波形发生器
0赞1、前言
对波形发生器这个玩意,算是有一点经验了,利用多款芯片做过,简单的有51,复杂一些的有FPGA,以前做的都是外接DAC生成模拟信号。STM32F767内置了两路DAC,大大简化了外围电路,所以在最初申请开发板的时候,已经定下了波形发生器的思路。本文只起到抛砖引玉的作用,主要是为了展示如何利用库函数操作DAC,关键部分的代码很少。
2、波形发生器设计思路
对于DAC而言,最重要的寄存器莫过于数据寄存器。数据寄存器里的数据就是DAC的转换对象。所以,只要改变数据寄存器内的数据,就可以实现不同电压信号的输出,随着时间的延续,就产生了波形。如果想要改变波形频率,只要改变数据寄存器内数据保持的时间就可以了。
3、DAC使用
首先来看一下DAC的结构图。
主要分为几大块:触发模块、控制逻辑、DAC转换器,比较重要的寄存器有,DORx、DHRx以及DAC控制寄存器,其中DORx是不能够直接操作的,它的值是由控制逻辑从DHRx中更新过来的。
DHRx指的是数据保持寄存器(Data Holding Register),一般被命名为DAC_DHRxxxx,最后几位根据DAC使用方法(单通道、双通道),数据位数(8位、12位、16位),数据对齐方式(左对齐,右对齐)等有所不同,例如单通道、8位、右对齐数据寄存器命名为:DAC_DHR8R1。关于这部分更详细地描述,请参考官方资料。
对DAC有所熟悉之后,接下来就简单了,下图所示的是DAC的操作流程。
流程图是为了让学习的思路更加清晰,实际操作时可以直接参考PACK里给的样例工程进行代码的设计。
4、数据的计算
转换数据的产生可以通过查表或者计算的方式实现,查表是以空间换时间,计算量小,速度快;计算的话,设计到浮点数的运算,耗时会多一些。这里使用的计算的方式,公式如下:
其中,ns是采样点数,DAC_MaxDigitalvalue是数据保持寄存器最大值,如采用8位数据位,该值为0xFF,12位该值为0xFFF。
输出模拟信号电压值计算公式如下:
本设计采用8位数据位,对应的电压范围为0~3.3V,使用的通道1,模拟输出引脚为PA4。
5、测量结果
测量结果如下图所示:
输出引脚为PA4,如下图所示:
6、三角波与方波
三角波和方波就不多说了,按照本文的思路来的话,比正弦波还简单一些。要说的是F7的DAC本身具备三角波发生功能,关于如何使用DAC的三角波发生功能,可以参考Pack里的样例工程,如果F767没有样例的话,就参考别的型号的例子。其他外设也是同样的道理。
此外,如果想要更加精确地控制波形频率,可以采用定时器触发DHR的写操作。
版权声明:
本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。
博客官方地址:
ChinaAET:http://blog.chinaaet.com/cuter521