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

littleshrimp   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)
(下载次数: 475, 2019-9-2 14:11 上传)

 


此内容由EEWORLD论坛网友littleshrimp原创,如需转载或用于商业用途需征得作者同意并注明出处

虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复评论 (10)

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

点赞  2019-9-2 19:30

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

如果天空是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默...但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。人可以卑微如尘土,不可扭曲如蛆虫。
点赞 (1) 2019-9-3 09:48
引用: jackfrost 发表于 2019-9-3 09:48 多年前用STM32做LCR玩,用的是片上DAC来生成正弦波参考信号,总是发现相位跳动严重,后来就放弃了,当时就 ...

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

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-9-3 09:58

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

如果天空是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默...但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。人可以卑微如尘土,不可扭曲如蛆虫。
点赞 (1) 2019-9-3 18:06
jackfrost 发表于 2019-9-3 18:06 应该是不止十几纳秒,LCR测量上面就大了,相位不稳副参数就跳得厉害,后来改成直接用PWM产生方波滤波成正弦 ...

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

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

 

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

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

 

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

瞬态PWM.png

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

 

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

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

 

点赞  2020-2-18 17:48

非常感谢,参考你的代码试下了DAC功能


点赞  2024-7-10 20:17
stm32g474正弦信号发生器
点赞  2024-9-22 00:41

stm32g474正弦信号发生器

点赞  2024-9-22 00:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复