简易信号发生器
详细介绍N32G457系列微控制器产品采用高性能32位ARM Cortex™-M4F内核,集成浮点运算单元(FPU)和数字信号处理(DSP),支持并行计算指令。性能很强大。还有丰富的外设,DAC,运放等等。本文介绍了我利用该单片机设计的简陋的信号发生器,目前只生能成1Hz~100KHz正弦波。https://i-blog.csdnimg.cn/blog_migrate/40566e4c31e10f0897dddff50ef9507c.png本程序的时钟配置为HSE=8M,PLL=144M,AHB=144M,APB1=36M,APB2=72M,DAC CLK=36M,TIM4 CLK=72M,DMA CLK=144M代码参考了国民技术的官方例子,DoubleModeDMASineWave。该例子验证了N32的DAC和DMA功能,由TIM4定时器触发DAC转换。我的代码执行流程:1.计算出一个正弦波序列,长度为n;2.设置输出的正弦波信号的幅度和偏置电压,以及频率;3.根据正弦波参数和初始正弦波序列,计算出交给DAC转换的序列,其中的每一个值为12bit;4.设置单片机的DAC、DMA和TIM4,其中定时器TIM4的周期和分频根据正弦波频率f计算得出;5.输出正弦波。在代码里还设计了一个根据输出信号频率调整输出序列点数的功能,在保证信号波形完整的情况下,减少内存空间占用,也有利于输出高频信号。注意事项:https://i-blog.csdnimg.cn/blog_migrate/16174494b2eb63b83371b11d62a7b161.png2个通道的数据放在一个32位寄存器中,本程序使用DAC1和DAC2输出同样的信号,因此在代码中有一段复制DAC寄存器的数值的代码。开发板的VREF没有接,要跳线接到3.3V上。计算过程利用了单片机的FPU和arm的dsp库。在arm_math.h中定义#define ARM_MATH_CM4测试结果正弦波信号的频率范围为1Hz~100KHz。幅度和直流偏置可调,受限于单片机的供电,信号的电压范围为0~3.3V。测试结果见下图,可以看出频率还是很准的。https://i-blog.csdnimg.cn/blog_migrate/12c21d7e732ac8c5f716f07727d58c9e.pnghttps://i-blog.csdnimg.cn/blog_migrate/67248c2c46429ce91eb0e4156b720c3c.pnghttps://i-blog.csdnimg.cn/blog_migrate/df678b41392691eafa6bbb064c1d2669.pnghttps://i-blog.csdnimg.cn/blog_migrate/41f01897b446adaa73190f44d3894441.pnghttps://i-blog.csdnimg.cn/blog_migrate/4d0e751f91c93c6ae245198a1c1c6d0a.png下图是修改信号的电压 https://i-blog.csdnimg.cn/blog_migrate/f5cee54309d9fb7d39fd4277832d4705.png
用FFT模式观察单片机产生的10K信号https://i-blog.csdnimg.cn/blog_migrate/ed38a24cf0e5ccbc89f423697fb5f18a.png
https://gitee.com/nanjideqie/multinstrument
信号发生器要是想做个不错的,其实还得配合DDS使用啊
页:
[1]