STM32库中用DAC输出正弦波的表格

2019-08-14 17:28发布

最近学习用DAC输出正弦波,看到3.0库里面有个例程,看完之后有一些问题:
    1,就是正弦波的表格它是怎样弄出来的呢?表格中元素数量的多少对波形的有哪些影响呢?越多精度越高?

    2.为什么它里面需要这样呢?
    for (Idx= 0; Idx<32; Idx++)
  {
    DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
  }
是不是高位与低位是对应正弦波的上下两个部分呢?

    3.TIM8的更新时间和DMA的DMA_InitStructure.DMA_BufferSize = 16;
这两个变量对输出的波形的频率是怎样的影响呢?是不是有一条公式可以计算出波形的频率呢?

小弟最近遇到上述这些问题,希望原子哥和各位前辈给小弟指点一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
雨念
1楼-- · 2019-08-14 22:27
回复【楼主位】内有元基:
---------------------------------
关于第二个问题,我说说我的理解。
   这个程序的运行结果应该是PA4和PA5都能输出一样的正弦波,也就是两路是同时输出的,那使用的应该就是DAC_DHR12RD寄存器,使用DMA传输的话,就只需使用一个DMA通道,因为DAC_DHR12RD寄存器(32位)的[27:16]位存放的是DAC通道2的输出数据(12位),[11:0]位存放的是DAC通道1的输出数据(12位),所以给这一个寄存器赋值就能输出两路波形。而Sine12bit[]是12位的正弦波数据,要输出两路正弦波,就得在[27:16]位和[11:0]位都写入正弦波数据。DualSine12bit[Idx] 是32位的,最终是通过DMA传入DAC_DHR12RD寄存器的,所以需要在DualSine12bit[Idx]的[27:16]位和[11:0]位写入12位的正弦数据。
   DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);中Sine12bit[Idx] << 16是左移16位的意思,然后再加上Sine12bit[Idx],就给两路通道都写入值了,内容是一样的,并不是正弦
的上下两个部分。
正点原子
2楼-- · 2019-08-15 03:32
1,一般都是通过程序生成的,理论上,元素当然是越多,精度越高,当然是指一个周期里面的元素.呵呵.
2,这段代码貌似有问题.Sine12bit的使用有点怪.
3,频率和你的DAC转换速率有关系,貌似STM32的DAC最快也就100多KB左右的转换速率了.没事测过.
wwjdwy
3楼-- · 2019-08-15 06:29
楼主效果怎么样啊?
Passenger123
4楼-- · 2019-08-15 09:37
 精彩回答 2  元偷偷看……

一周热门 更多>