打印
[应用相关]

国民技术N32G45试用:利用片上DAC做一个信号发生器

[复制链接]
369|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang6623|  楼主 | 2023-10-29 02:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
开发环境
RT-THREAD 4.0.2

N32G45 Library 2.0.0

开发板N32G45XVL-STB

详细介绍
N32G457系列微控制器产品采用高性能32位ARM Cortex™-M4F内核,集成浮点运算单元(FPU)和数字信号处理(DSP),支持并行计算指令。性能很强大。还有丰富的外设,DAC,运放等等。本文介绍了我利用该单片机设计的简陋的信号发生器,目前只生能成1Hz~100KHz正弦波。



使用特权

评论回复
沙发
wang6623|  楼主 | 2023-10-29 02:24 | 只看该作者
本程序的时钟配置为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.输出正弦波。

在代码里还设计了一个根据输出信号频率调整输出序列点数的功能,在保证信号波形完整的情况下,减少内存空间占用,也有利于输出高频信号。

使用特权

评论回复
板凳
wang6623|  楼主 | 2023-10-29 02:25 | 只看该作者
注意事项:

使用特权

评论回复
地板
wang6623|  楼主 | 2023-10-29 02:25 | 只看该作者
2个通道的数据放在一个32位寄存器中,本程序使用DAC1和DAC2输出同样的信号,因此在代码中有一段复制DAC寄存器的数值的代码。

开发板的VREF没有接,要跳线接到3.3V上。

计算过程利用了单片机的FPU和arm的dsp库。在arm_math.h中定义#define ARM_MATH_CM4

使用特权

评论回复
5
wang6623|  楼主 | 2023-10-29 02:25 | 只看该作者
测试结果
正弦波信号的频率范围为1Hz~100KHz。幅度和直流偏置可调,受限于单片机的供电,信号的电压范围为0~3.3V。测试结果见下图,可以看出频率还是很准的。

使用特权

评论回复
6
wang6623|  楼主 | 2023-10-29 02:26 | 只看该作者
后续计划:

1.利用RT-Thread的强大软件包,丰富本程序的功能,比如用上位机控制产生的信号的波形和频率等参数。

2.测试DAC的带负载能力,与片上运放结合。

3.生成更多的波形。

4.测试DAC和IO口的性能,比如转换速度等等。

使用特权

评论回复
7
yangjiaxu| | 2023-10-31 16:41 | 只看该作者
确实可以,这芯片的DAC方面是OK的,而且主频啊性能啊都是很强大的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

256

帖子

0

粉丝