社区导航

 

搜索
查看: 1387|回复: 7

[原创] stm32g474正弦信号发生器

[复制链接]

7069

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-9-2 14:11 | 显示全部楼层 |阅读模式

STM32G4743121MSPSDAC通道

通过STM32CubeMX软件可以很方便的进行配置

比如下边就介绍如何使用NUCLEO-G474实现正弦信号发生器

首先是配置时钟,可以根据需求配置时钟频率和时钟源,G474最大支持170MHz的主频,这里设置成最大170MHz

image001.jpg

然后左边找到DAC1,单击后在中边的DAC1 Mode and Configuation里选择OUT1 modeConnected to external pin only意思是配置DAC1_OUT1为外部输出

为了精准控制DAC的输出频率需要配置为定时器触发,我准备使用TIMER4来触发DAC1_OUT1输出,所以在Trigger里选择Timer r Trigger Out event

image002.jpg

DACDMA选项卡中将DMA Request选择为DAC1_CH1(也只能选这个),Channel选择DMA1 Channel 1DMA Request SettingsMode设置为CircularMode是用来选择数据输出的模式,假如有10个数据,模式选择Normal时输出完第10个数据时DAC会停止输出,直到再次执行HAL_DAC_Start_DMA函数,选择Circular时数据会循环输出,当输出到完第        10个数据后会从0开始循环输出,重复将一组数据正弦数据通过DAC输出就能生成连续的正弦波了,Data WidthPeripheral处选择Word其它默认即可。

image003.jpg

配置好DAC以后需要再对定时器进行配置

选择TIM4(也可以是任意定时器,只要DACTrigger选择对应的定时器即可),Clock Source选择Internal Clock,下边的Prescaler分频值设置为0Counter Period选择170-1TriggerEventSelectionTRGO选择Update Event,主频是170MHz,每170个周期产生一个Update Event事件,这样DAC的更新频率就是1MHz

image004.jpg

配置好以后生成工程文件,然后打开对应工程

在工程里加入正弦数据数组

image005.jpg

在主函数里加入启用DAC和定时器的函数即可

image006.jpg

 

将工程下载到开发板并支行,就能看到漂亮的正弦信号,频率是DAC的更新频率除正弦表的长度,1Msps/60=16.66KHz,如果要修改频率可以修改Timer4Update Event时间,也可以修改正弦表的数据长度

image007.jpg


工程文件:

adc_dac.rar (11.36 MB, 下载次数: 161)

虾扯蛋

回复

使用道具 举报

828

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-9-2 19:30 | 显示全部楼层

谢谢版主分享,下载学习。


回复

使用道具 举报

419

TA的帖子

6

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2019-9-3 09:48 | 显示全部楼层

多年前用STM32做LCR玩,用的是片上DAC来生成正弦波参考信号,总是发现相位跳动严重,后来就放弃了,当时就是怀疑是STM32的DAC的关系,直到今年年初的时候偶尔看到ST官方新出的关于DAC的一篇文章,里面就用了一页的篇幅说明了DAC的触发问题,貌似用TIMER触发DAC转换有个延时,这个延时官方资料好像是2.5个周期,实际上因为同步关系运行时是2~3个时钟是不确定的随机变化的,故此由STM32的内置DAC来产生波形会有一定的抖晃。最近又在找这篇文章想确认下可是一直没找到,现在看到这个G474貌似DAC时钟树貌似跟之前的好像有不一样,不知道是不是还存在这个问题,这个也只能等ST官方来给出答案了

点评

STM32的DAC产生正弦波频率应该很低,十几纳秒的抖动对测量影响大吗?  详情 回复 发表于 2019-9-3 09:58
如果天空是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默...但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。人可以卑微如尘土,不可扭曲如蛆虫。

回复

使用道具 举报

7069

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-9-3 09:58 | 显示全部楼层
jackfrost 发表于 2019-9-3 09:48 多年前用STM32做LCR玩,用的是片上DAC来生成正弦波参考信号,总是发现相位跳动严重,后来就放弃了,当时就 ...

STM32的DAC产生正弦波频率应该很低,十几纳秒的抖动对测量影响大吗?

虾扯蛋

回复

使用道具 举报

419

TA的帖子

6

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2019-9-3 18:06 | 显示全部楼层

应该是不止十几纳秒,LCR测量上面就大了,相位不稳副参数就跳得厉害,后来改成直接用PWM产生方波滤波成正弦波,副参数跳动就降了不少

点评

如果提前在ISR中做好准备,希望达到如下的理想效果[attachimg]459522[/attachimg]    详情 回复 发表于 2020-2-18 17:48
[attachimg]459517[/attachimg] 例如这个pwm两次切换就导致不可控的瞬态pwm    详情 回复 发表于 2020-2-18 17:45
LCR需要的相位这么严格吗? 扫频仪好像一般使用DDS吧?   G474的DAC波动是否在ISR中刷新DAC的内部寄存器,导致DAC瞬间的输出有不可控的混乱期? 我在看HRTIM,好像也看到这个瞬间    详情 回复 发表于 2020-2-18 17:37
如果天空是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默...但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。人可以卑微如尘土,不可扭曲如蛆虫。

回复

使用道具 举报

385

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-2-18 17:37 | 显示全部楼层
本帖最后由 threetigher 于 2020-2-18 17:51 编辑
jackfrost 发表于 2019-9-3 18:06 应该是不止十几纳秒,LCR测量上面就大了,相位不稳副参数就跳得厉害,后来改成直接用PWM产生方波滤波成正弦 ...

LCR需要的相位这么严格吗?

扫频仪好像一般使用DDS吧?

 

stm32的DAC波动是否在ISR中刷新DAC的内部寄存器,导致DAC瞬间的输出有不可控的混乱期?

我在看stm32的手册,好像也看到这个瞬间

 


回复

使用道具 举报

385

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-2-18 17:45 | 显示全部楼层
jackfrost 发表于 2019-9-3 18:06 应该是不止十几纳秒,LCR测量上面就大了,相位不稳副参数就跳得厉害,后来改成直接用PWM产生方波滤波成正弦 ...

瞬态PWM.png

例如这个pwm两次切换就导致不可控的瞬态pwm

 


回复

使用道具 举报

385

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-2-18 17:48 | 显示全部楼层
jackfrost 发表于 2019-9-3 18:06 应该是不止十几纳秒,LCR测量上面就大了,相位不稳副参数就跳得厉害,后来改成直接用PWM产生方波滤波成正弦 ...

如果提前在ISR中做好准备,希望达到如下的理想效果 瞬态PWM2.png

 


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-4-6 20:00 , Processed in 0.267388 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表