完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前段时间需要使用到正弦波的变频,于是就把野火哥的程序拿来进行了相应的改造和升级。改造完之后,觉得放到这里也许,大概,可能会有那么一点用处,于是……
(上变频为例) 首先,就是采集待变频的正弦波的频率。这一步呢,需要用到定时器的捕获/比较功能,相关的知识请移步野火哥的相关教程。简单讲就是,当正弦波的幅值超过一个幅度时被认定为高电平,否则为低电平。当定时器采集到高电平时开始计时,采集到下一个高电平时停止计数,这时两个高电平的时间间隔就是正弦波频率的倒数,进行相应的转换就得到了频率。相关的程序如下: ulTime = strCapture .usPeriod * macTIM_Period + strCapture .usCtr; time = ulTime / ulTmrClk + ulTime % ulTmrClk; Time = (float)time/1000; Period = (float)1000 / time; (其中,ulTime 为两个高电平间的定时器计数次数;ulTmrClk 为定时器分频后的频率,这里为1000000;Time为周期的倒数;Period 为正弦波的周期。) 采集到频率后,就到了输出需要的相应频率的正弦波了(这里是上变频7K)。这里采用DAC来输出正弦波,而DAC通过DMA来传输,通过TIM来控制输出正弦波的频率。相关的程序如下: Input_Period = (uint16_t)(1120 / (7+Period) - 1); TIM2-》PSC = Input_Period; TIM_Cmd(TIM2, ENABLE); DAC_Cmd(DAC_Channel_2, ENABLE); for (Idx = 0; Idx 《 32; Idx++) { DualSine12bit[Idx] = (Sine12bit[Idx] 《《 16) + (Sine12bit[Idx]); } (其中,Period为采集到的频率;Input_Period 为上变频后的频率;TIM2-》PSC为主管定时器分频的寄存器;for语句为输出正弦波。) 上面公式的 “7” 是频率改变的幅度; “1120” 需要测量,测量方法如下:设定定时器的自动重装载值,然后改变定时器的分频系数,直到DAC输出的正弦波频率为7KHz,此时 7 乘以分频系数即为1120。其他频率的值计算方法类似。(注意:在测量1120时,输出的7KHz是不带采集频率的程序)。 到这里,就可以输出变频后的正弦波了。 Enjoy it! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1907 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1675 浏览 1 评论
1169 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
768 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1728 浏览 2 评论
1970浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
805浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
252浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
623浏览 3评论
634浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-22 21:53 , Processed in 0.882117 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号