当前位置:首页 > 问问

ad9850中w0是什么 AD9850的W0代表什么?(18个汉字)

1、AD9850简介

AD9850是一种低功耗的直接数字合成器(DDS),于2003年由美国ADI公司开发出来,广泛应用于无线电、电子测量和医学成像等领域。

AD9850自带65-bits寄存器和可编程的相位调节器,可以产生高精度的正弦波和余弦波,并支持多种输出波形。其可编程的频率输出范围为0-40MHz,相位调节范围为0-360度。

2、W0的含义

在AD9850的寄存器控制中,W0表示频率寄存器的最低有效位,也就是频率分辨率的一部分。AD9850的频率寄存器是一个32位的累加器,在每个时钟周期内,其数值按照预设的频率步进进行累加,最终转化成为输出波形。

具体来讲,W0可以影响AD9850的输出精度。随着W0取值的不同,AD9850输出波形的最小分辨率也在改变。例如,当W0取1时,AD9850的最小输出分辨率为1Hz,当W0取2时,最小分辨率变成2Hz,以此类推。

3、W0的设置方法

AD9850的频率控制信号是由串行数据输入的方式传输进去的,W0位于16位控制字节(byte2)中的最后一位。当控制字节送入芯片后,W0的取值就确定了。如下面的代码所示,W0就是bit0,也就是最后一个二进制位:

DigitalWrite(AD9850_FQ_UD, LOW); // AD9850复位

DigitalWrite(AD9850_W_CLK, LOW);

DigitalWrite(AD9850_FQ_UD, LOW); // 准备写入控制字节

for (i = 0; i < 4; ++i) {

if (control_byte & 0x01 == 1) {

DigitalWrite(AD9850_DATA, HIGH);

} else {

DigitalWrite(AD9850_DATA, LOW);

}

DigitalWrite(AD9850_W_CLK, HIGH);

DigitalWrite(AD9850_W_CLK, LOW); // 数据移位

control_byte >>= 1;

DigitalWrite(AD9850_FQ_UD, HIGH); // 确认写入

DigitalWrite(AD9850_FQ_UD, LOW); // 结束写入

4、W0的应用举例

以一个简单的例子来说明W0的应用。我们想要产生一个100kHz的正弦波,并且频率分辨率要达到1Hz。这时候,W0的取值应当为1,这样在100kHz的范围内,AD9850可以每1Hz输出一次正弦波。

我们可以使用Arduino控制AD9850进行如下编码:

#define AD9850_FQ_UD 13

#define AD9850_W_CLK 12

#define AD9850_DATA 11

void AD9850_Setup()

pinMode(AD9850_FQ_UD, OUTPUT);

pinMode(AD9850_W_CLK, OUTPUT);

pinMode(AD9850_DATA, OUTPUT);

digitalWrite(AD9850_FQ_UD, LOW);

digitalWrite(AD9850_W_CLK, LOW);

digitalWrite(AD9850_DATA, LOW);

void AD9850_Send_Frequency(unsigned long Freq)

unsigned long long tuning_word;

byte ctrl_byte;

AD9850_Setup();

ctrl_byte = 0x00;

tuning_word = Freq * (pow(2, 32) / 125E6);

ctrl_byte = (tuning_word & 0xFF000000) >> 24; // MSB

AD9850_Write_Control(ctrl_byte);

ctrl_byte = (tuning_word & 0x00FF0000) >> 16;

AD9850_Write_Control(ctrl_byte);

ctrl_byte = (tuning_word & 0x0000FF00) >> 8;

AD9850_Write_Control(ctrl_byte);

ctrl_byte = (tuning_word & 0x000000FF);

AD9850_Write_Control(ctrl_byte); // 写入频率数据

digitalWrite(AD9850_FQ_UD, HIGH);

digitalWrite(AD9850_FQ_UD, LOW); // 确认写入

void AD9850_Write_Control(byte ctrl_byte)

byte i;

for (i = 0; i < 8; ++i) {

if (ctrl_byte & 0x80 == 0x80) {

digitalWrite(AD9850_DATA, HIGH);

} else {

digitalWrite(AD9850_DATA, LOW);

}

ctrl_byte <<= 1;

digitalWrite(AD9850_W_CLK, HIGH);

digitalWrite(AD9850_W_CLK, LOW);

}

}

在上述代码中,我们先将要输出的频率经过运算变换成为AD9850的控制字节,然后使用AD9850_Write_Control函数逐步写入,最后在AD9850_Send_Frequency函数中进行确认和复位。最终,我们就可以得到100kHz频率、1Hz分辨率的正弦波。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章