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

主要是利用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调制正弦波是可以获得一个要求的五峰波。

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

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值