AD9854 高速DDS信号发生器模块 高频信号源 正弦波方波信号发生器

AD9854的原理图、PCB源文件(AD软件格式),包含两个版本
原理图上注明了详细的原理说明以及注意事项;考虑周全的设计,
将各种接口均有留出,在一些的地方留有排针可供切换不同模式,充足的电
源滤波电容等; 优秀合理的PCB布局布线,PCB上标有相关丝印注明,同时
采用3D封装以方便配合结构设计
 
获取链接:
【闲鱼】https://m.tb.cn/h.g6FDtkV?tk=s2nY30aFutt CZ0012 「我在闲鱼发布了【AD9854 原理图pcb高速DDS信号发生器模块 高频信号】」
点击链接直接打开
部分驱动程序
//====================================================================================
//函数名称:void AD9854_Init(void)
//函数功能:AD9854初始化
//入口参数:无
//出口参数:无
//====================================================================================
void AD9854_Init(void)
{
	AD9854_IO_Init();
	AD9854_WR=1;//将读、写控制端口设为无效
    AD9854_RD=1;
    AD9854_UDCLK=0;
    AD9854_RST=1;                 //复位AD9854
    AD9854_RST=0;

	AD9854_WR_Byte(0x1d,0x00);	           //关闭比较器
	AD9854_WR_Byte(0x1e,CLK_Set);	   //设置系统时钟倍频            
	AD9854_WR_Byte(0x1f,0x00);	   //设置系统为模式0,由外部更新
	AD9854_WR_Byte(0x20,0x60);	   //设置为可调节幅度,取消插值补偿

	AD9854_UDCLK=1;               //更新AD9854输出
    AD9854_UDCLK=0;
}
//====================================================================================
//函数名称:void Freq_convert(long Freq)
//函数功能:正弦信号频率数据转换
//入口参数:Freq   需要转换的频率,取值从0~SYSCLK/2
//出口参数:无   但是影响全局变量FreqWord[6]的值
//说明:   该算法位多字节相乘算法,有公式FTW = (Desired Output Frequency × 2N)/SYSCLK
//         得到该算法,其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK
//         为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6]
//====================================================================================
void Freq_convert(long Freq)   
{
    ulong FreqBuf;
    ulong Temp=Freq_mult_ulong;   	       

	uchar Array_Freq[4];			     //将输入频率因子分为四个字节
	Array_Freq[0]=(uchar)Freq;
	Array_Freq[1]=(uchar)(Freq>>8);
	Array_Freq[2]=(uchar)(Freq>>16);
	Array_Freq[3]=(uchar)(Freq>>24);

	FreqBuf=Temp*Array_Freq[0];                  
    FreqWord[0]=FreqBuf;    
    FreqBuf>>=8;

    FreqBuf+=(Temp*Array_Freq[1]);
    FreqWord[1]=FreqBuf;
    FreqBuf>>=8;

    FreqBuf+=(Temp*Array_Freq[2]);
    FreqWord[2]=FreqBuf;
    FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[3]);
    FreqWord[3]=FreqBuf;
    FreqBuf>>=8;

    FreqWord[4]=FreqBuf;
    FreqWord[5]=FreqBuf>>8;			
}  

//====================================================================================
//函数名称:void AD9854_SetSine(ulong Freq,uint Shape)
//函数功能:AD9854正弦波产生程序
//入口参数:Freq   频率设置,取值范围为0~(1/2)*SYSCLK
//         Shape  幅度设置. 为12 Bit,取值范围为(0~4095) ,取值越大,幅度越大 
//出口参数:无
//====================================================================================
void AD9854_SetSine(ulong Freq,uint Shape)
{
	uchar count;
	uchar Adress;

	Adress = 0x04;                        //选择频率控制字地址的初值

	Freq_convert(Freq);		           //频率转换

	for(count=6;count>0;)	          //写入6字节的频率控制字  
    {
		AD9854_WR_Byte(Adress++,FreqWord[--count]);
    }
	
	AD9854_WR_Byte(0x21,Shape>>8);	  //设置I通道幅度
	AD9854_WR_Byte(0x22,(uchar)(Shape&0xff));
	
	AD9854_WR_Byte(0x23,Shape>>8);	  //设置Q通道幅度
	AD9854_WR_Byte(0x24,(uchar)(Shape&0xff));

	AD9854_UDCLK=1;                    //更新AD9854输出
    AD9854_UDCLK=0;
}

7fce929215834caea98b4193e08bbfea.png

e88862d1671243a0aafd29ef73df21c3.png

04db2d3e07dc4bf0a66eba2620a6b46c.png

4be4d7c7ddc8483298706f917ad3da97.png

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于FPGA的DDS信号发生器的代码示例,可以实现正弦波方波和三角波的输出: ```verilog module dds_generator( input clk, //时钟信号 input rst, //重置信号 input [31:0] freq, //频率控制信号 input [1:0] waveform, //波形选择信号 output reg signed [15:0] out //输出信号 ); //内部寄存器 reg [31:0] phase_acc; reg [31:0] phase_inc; //常量定义 parameter WIDTH = 32; parameter PI = 3.14159265358979323846; //计算频率增量 always @ (posedge clk, posedge rst) begin if (rst) begin phase_acc <= 0; phase_inc <= 0; end else begin phase_acc <= phase_acc + phase_inc; phase_inc <= freq * (1 << WIDTH) / 100000000; end end //计算输出信号 always @ (posedge clk, posedge rst) begin if (rst) begin out <= 0; end else begin case (waveform) 2'b00: out <= $signed($sin(phase_acc[WIDTH-1:0] * 2 * PI / (1 << WIDTH)) * (1 << 15)); //正弦波 2'b01: out <= $signed(phase_acc[WIDTH-1]); //方波 2'b10: out <= $signed(phase_acc[WIDTH-1] ? ~(phase_acc[WIDTH-2:0] << 1) : (phase_acc[WIDTH-2:0] << 1)); //三角波 default: out <= 0; endcase end end endmodule ``` 在原有的DDS信号发生器的基础上,增加了一个波形选择信号waveform,用于选择输出的波形类型。当waveform为00时,输出正弦波;当waveform为01时,输出方波;当waveform为10时,输出三角波。输出信号的计算方法也分别进行了修改,以实现不同类型的波形。其中,方波的计算方法为直接取相位累加器的最高位作为输出信号的值;三角波的计算方法为判断相位累加器的最高位,如果为1,输出 ~(phase_acc[WIDTH-2:0] << 1),否则输出(phase_acc[WIDTH-2:0] << 1)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值