stm32驱动ad9954芯片生成幅值频率可调的正弦波信号

您所在的位置:网站首页 页面token无效什么意思 stm32驱动ad9954芯片生成幅值频率可调的正弦波信号

stm32驱动ad9954芯片生成幅值频率可调的正弦波信号

2023-09-22 05:09| 来源: 网络整理| 查看: 265

主要是利用keil5的环境进行编程

前前后后也用过一点cubeide但是我发现我对管脚的各个功能和高低电平并没有那么熟悉,这是我现在研一在师哥的帮助下做的幅值频率可调的正弦波信号。以下主要发表一下自己的个人学习成果并附程序。如果有什么不对的地方望各位指正。 特别鸣谢:刘欢齐师兄

现在ad9954的使用手册是纯英文版的,只需百度搜索中文版就可以查看中文版,当然有一部分可能翻译的并不准确。 本次项目主要利用到9954.c中的Write_ASF函数来改变幅值,AD9954_SETFRE函数来改变频率,为了使用方便,我自己编写了Write_FZ幅值调节函数。

中文手册中提到的调用ASF函数时,应该先打开OSK,其中OSK又分为手动模式和自动模式,手动模式时,14,15位是没有影响的,也就是说范围是:0~0x3FFF,这将在下面的程序中有所体现,9954自己的给的例程中,ASF块的函数是只开关CS,所以我们将其中注释掉的部分反注释之后才可调用Write_ASF. 在这里插入图片描述

以下是程序代码:

这段函数位于主函数中: AD9954_Init(); AD9954_SETFRE(500); Write_FZ(1250); while(1) {

// KeyRead(); // Set_PointFre(Keycode, 0); // if(_return){_return=0;LCD_Refresh_Gram();} // KEY_EXIT(); }

该程序段位于9954.c中,write_FZ函数是我自己编写。该代码段的含义是用户只需要输入自己想要的幅值(十进制)即可,不需要在调用write_ASF的时候输入一个十六进制数来调整幅值。stm32中可以强制转换double和十六进制。 void Write_FZ(double a) { double b=3.2766; double c; u16 f; c = a*b; f = (u16)c;//强制转换 Write_ASF(f); }

void Write_ASF(u16 factor) //2ASK { AD9954_CS = 0; AD9954_SENDBYTE(0x00); AD9954_SENDBYTE(0x02); AD9954_SENDBYTE(0x00);

AD9954_SENDBYTE(0x20); AD9954_SENDBYTE(0x40); AD9954_SENDBYTE(0X05); AD9954_SENDBYTE(0X30); AD9954_SENDBYTE(0X00); AD9954_SENDBYTE(0x02); AD9954_SENDBYTE(factor >> 8); AD9954_SENDBYTE(factor); AD9954_CS = 1; UPDATE();

}

这样就可以获得一个幅值和频率可调的正弦波信号。接下来可能会深度学习H7开发板或者是AD9954中AM调制或者FM调制,理论上来说利用AM调制正弦波是可以获得一个要求的五峰波。

第一次写博客,有不足的地方望各位指正。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3