打印
[研电赛技术支持]

GD32 DAC+TIMER+DMA实现正弦波

[复制链接]
1898|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、目的

1.使用GD32的DAC、TIMER、DMA实现正弦波

二、原理

1.正弦波:周期一定,相同时间间隔时能够取得不同的数值(符合SIN函数)。

三、芯片功能组合实现SIN

1.DAC:能够输出不同的电压值(0-3.3v)

2.TIMER:能够提供均匀的时间

3.DMA:能够将数据从存储器传输到外设而不占用CPU资源

4.SIN数据:本工程中使用的是“野火”DAC正弦波工程中提供的正弦数据

使用特权

评论回复
沙发
慢动作|  楼主 | 2022-1-28 15:46 | 只看该作者
四、GD32实现正弦波的步骤图

使用特权

评论回复
板凳
慢动作|  楼主 | 2022-1-28 15:51 | 只看该作者
1.步骤一:定时器按固定间隔触发DAC

2.步骤二:DAC被触发后,发送DMA请求

3.步骤三:DMA接收到DAC请求后,将一个数据发送到DAC的数据保持寄存器中

4.步骤四:DAC被外部触发后,会将DAC数据保持寄存器中的数据转移到数据输出寄存器中,输出数据对应的电压

使用特权

评论回复
地板
慢动作|  楼主 | 2022-1-28 15:54 | 只看该作者
五、实现环境

1.引脚:PA4

2.芯片:GD32F103X

3.开发板:GD32103C-START

4.显示环境:数字示波器

使用特权

评论回复
5
慢动作|  楼主 | 2022-1-28 15:55 | 只看该作者
-详讲GD32中DAC+TIMER+DMA如何实现------------------------------

六、DAC(基础:可以将数据转换为模拟输出电压)

1.DAC结构图

使用特权

评论回复
6
慢动作|  楼主 | 2022-1-28 15:57 | 只看该作者
1)TIMER6_TRGO,为外部定时器触发;配置触发源时选择它,对应函数:timer_master_output_trigger_source_select()

2)DMA requestx,DMA请求;在有外部触发同时DAC中的DMA功能使能后,会发送DMA触发请求,对应函数:dac_dma_enable()
————————————————

使用特权

评论回复
7
慢动作|  楼主 | 2022-1-28 15:59 | 只看该作者

使用特权

评论回复
8
慢动作|  楼主 | 2022-1-28 15:59 | 只看该作者
3)DHx,DAC数据保持寄存器;用于保存将要转移到输出寄存器(DOx)的数据,及下一个输出的数据。在DMA传输时,这个寄存器就是DAC的接收地址。

使用特权

评论回复
9
慢动作|  楼主 | 2022-1-28 16:00 | 只看该作者
2.DAC输出电压的计算


使用特权

评论回复
10
慢动作|  楼主 | 2022-1-28 16:01 | 只看该作者
七、TIMER6(基本定时器)

1.结构图


使用特权

评论回复
11
慢动作|  楼主 | 2022-1-28 16:01 | 只看该作者
1)触发选择,这里说的是主输出的触发源要选择相应的参数,之后发送TIMERx_TRGO触发信号;对应函数:timer_master_output_trigger_source_select

使用特权

评论回复
12
慢动作|  楼主 | 2022-1-28 16:02 | 只看该作者
2.相应参数如何选择(老实说这个比较坑,在文档的功能说明中没找到,是直接看寄存器才发现的,-_-||)

使用特权

评论回复
13
慢动作|  楼主 | 2022-1-28 16:22 | 只看该作者
1)TIMERx_CTL1,就是进行同步时需要进行配置的寄存器

使用特权

评论回复
14
慢动作|  楼主 | 2022-1-28 16:26 | 只看该作者
2)MMC,中选择更新(010)为定时器触发TIMERx_TRGO的时间。对应函数:timer_master_output_trigger_source_select

使用特权

评论回复
15
慢动作|  楼主 | 2022-1-28 16:30 | 只看该作者
3.为什么要选择更新(010)为定时器触发???

使用特权

评论回复
16
慢动作|  楼主 | 2022-1-28 16:31 | 只看该作者

使用特权

评论回复
17
慢动作|  楼主 | 2022-1-28 16:47 | 只看该作者
1)阅读资料可知,定时器一旦超过阈值(自动重装载值),就会产生更新事件,同时更新所有寄存器。

使用特权

评论回复
18
慢动作|  楼主 | 2022-1-28 16:48 | 只看该作者
2)结论是,更新事件发生时,时间已到设定的时间,反复实现更新事件就会产生定时触发TIMERx_TRGO。

使用特权

评论回复
19
慢动作|  楼主 | 2022-1-28 16:49 | 只看该作者
3)防止额外因素,使能定时器更新事件;对应函数timer_update_event_enable

使用特权

评论回复
20
慢动作|  楼主 | 2022-1-28 16:50 | 只看该作者
八、DMA

1.结构框图

使用特权

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

本版积分规则

72

主题

719

帖子

0

粉丝