cuter

【STM32最强F7】简易波形发生器

0
阅读(6653)

1、前言

对波形发生器这个玩意,算是有一点经验了,利用多款芯片做过,简单的有51,复杂一些的有FPGA,以前做的都是外接DAC生成模拟信号。STM32F767内置了两路DAC,大大简化了外围电路,所以在最初申请开发板的时候,已经定下了波形发生器的思路。本文只起到抛砖引玉的作用,主要是为了展示如何利用库函数操作DAC,关键部分的代码很少。

 

2、波形发生器设计思路

 对于DAC而言,最重要的寄存器莫过于数据寄存器。数据寄存器里的数据就是DAC的转换对象。所以,只要改变数据寄存器内的数据,就可以实现不同电压信号的输出,随着时间的延续,就产生了波形。如果想要改变波形频率,只要改变数据寄存器内数据保持的时间就可以了。

  

3、DAC使用

首先来看一下DAC的结构图。

主要分为几大块:触发模块、控制逻辑、DAC转换器,比较重要的寄存器有,DORxDHRx以及DAC控制寄存器,其中DORx是不能够直接操作的,它的值是由控制逻辑从DHRx中更新过来的。

DHRx指的是数据保持寄存器(Data Holding Register),一般被命名为DAC_DHRxxxx,最后几位根据DAC使用方法(单通道、双通道),数据位数(8位、12位、16位),数据对齐方式(左对齐,右对齐)等有所不同,例如单通道、8位、右对齐数据寄存器命名为:DAC_DHR8R1。关于这部分更详细地描述,请参考官方资料。

对DAC有所熟悉之后,接下来就简单了,下图所示的是DAC的操作流程。

图片2.png 

流程图是为了让学习的思路更加清晰,实际操作时可以直接参考PACK里给的样例工程进行代码的设计。

 

4、数据的计算

转换数据的产生可以通过查表或者计算的方式实现,查表是以空间换时间,计算量小,速度快;计算的话,设计到浮点数的运算,耗时会多一些。这里使用的计算的方式,公式如下:

 

其中,ns是采样点数,DAC_MaxDigitalvalue是数据保持寄存器最大值,如采用8位数据位,该值为0xFF12位该值为0xFFF

输出模拟信号电压值计算公式如下:

 

本设计采用8位数据位,对应的电压范围为0~3.3V,使用的通道1,模拟输出引脚为PA4


5、测量结果

测量结果如下图所示:

输出引脚为PA4,如下图所示:


6、三角波与方波

三角波和方波就不多说了,按照本文的思路来的话,比正弦波还简单一些。要说的是F7的DAC本身具备三角波发生功能,关于如何使用DAC的三角波发生功能,可以参考Pack里的样例工程,如果F767没有样例的话,就参考别的型号的例子。其他外设也是同样的道理。

此外,如果想要更加精确地控制波形频率,可以采用定时器触发DHR的写操作。 


版权声明:

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

博客官方地址:

ChinaAET:http://blog.chinaaet.com/cuter521