hhpsr1990 发表于 2020-4-16 14:16:39

Stm32F407产生波形分析

一个DAC转换的例子:先来效果图示波器使用的是Loto示波器OSC802
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102521535.png
三角波20KHz示例
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102521839.png
三角波20KHz示例


正弦波20KHz示例
测试使用的是Loto虚拟示波器   以上两张图的波形每一个周期都是300个DAC点组成,DAC转换速度是3MHz


具体的实现代码如下:
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102521648.png
主要是最下面的三个函数一个是DAC的初始化函数,另一个是定时器4的初始化函数 最后一个是波形发生函数。
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102521832.png
这是DAC+DMA的初始化函数这要是设置DAC和DMA的基本参数
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102522401.png
DAC触发选择的是定时器4的触发引脚, 也可以换成以上的其他定时器


接下来是定时器的初始化
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102522267.png
定时器初始化部分很简单,不需要配置IO也不需要配置中断只需要把定时器的基本参数设置好然后记得打开输出


TIM_SelectOutputTrigger这样就可以定时输出一个触发信号来控制DAC进行DA转换   同时也会给DMA一个信号DMA会搬运一个新的数据给DAC。


以上就是输出的过程了


接下来就介绍如何产生波形
http://6.eewimg.cn/news/uploadfile/2020/0414/20200414102522917.png
产生波形大概有这几个参数是需要注意的以正弦波为例


第一个是波形的峰值我们知道sinx的最大值是1最小值是-1   然后应为ADC只能生成正的电压值,所以我们需要将波形向上平移


另一方面就是一个周期内的点数, 点数越多波形拟合的就越逼真,但是同样需要的转化时间就会正常,所以需要按照自己的需求选择合适的点数。 上图的算式是直接将点数所对应的的周期进行细分分别计算出每一个点上所对应的的值。需要其他波形还需要读者自行摸索

主板狂魔 发表于 2020-4-16 15:40:34

yangxf0120 发表于 2020-4-16 19:23:08

谢谢分享Stm32F407产生波形分析

mj8abcd 发表于 2020-4-16 19:50:39

feng1163974441 发表于 2020-4-16 20:45:37

多谢分享,

sen1 发表于 2023-4-13 08:48:15

页: [1]
查看完整版本: Stm32F407产生波形分析