AN-1108: AD9832/AD9835编程示例
简介
本应用笔记介绍如何在 AD9832/AD9835 器件的输出上载入正弦波形,包括上电时设置 AD9832/AD9835、设置FSELECT控制位,并在使用FSELECT控制位时将新数据载入器件。
AD9832/AD9835的编程
AD9832/AD9835上电时,器件应复位。这样可使相应的内部寄存器复位至0,以提供满量程的模拟输出。为了避免AD9832初始化时产生杂散DAC输出,RESET位应置1,直至器件准备好开始产生输出。RESET位不对相位寄存器、频率寄存器或控制寄存器进行复位。这些寄存器包含无效数据,因此应由用户将其设为已知值。然后,RESET位应置0,以开始产生输出。在RESET置0后的7到8个MCLK周期,DAC输出端会出现数据。
AD9832/AD9835的编程
要解释如何对AD9832/AD9835进行编程,最好的方法便是举一个简单的示例。进一步详情,请参考应用笔记AN-621和AD9832或AD9835数据手册。
示例1:上电后器件设置
目标:使用一个25 MHz MCLK,产生两个输出频率,将3 kHz载入到FREQ0寄存器,并将10 kHz载入到FREQ1寄存器。
注意,ADIsimDDS工具提供轻松便捷地产生所需16进制、10进制或2进制代码的方法。
所需初始化序列如表1所示。
十六进制 | 二进制 |
0xD000 | 1101 0000 0000 0000 |
0x3044 | 0011 0000 0100 0100 |
0x21DD | 0010 0001 1101 1101 |
0x3207 | 0011 0010 0000 0111 |
0x2300 | 0010 0011 0000 0000 |
0x343E | 0011 0100 0011 1110 |
0x2536 | 0010 0101 0011 0110 |
0x361A | 0011 0110 0001 1010 |
0x2700 | 0010 0111 0000 0000 |
0x9000 | 1001 0000 0000 0000 |
0XC000 | 1100 0000 0000 0000 |
命令序列说明
请参考AD9832或AD9835数据手册中的寄存器表。
0xD000—复位AD9832
RESET位DB12置1。这样做可将内部寄存器复位至0,对应于满量程的模拟输出(见图2)。Ch1为复位的杂散输出。Ch2为FSYNC,Ch3为SDATA, Ch4为SCLK。注意,数据在SCLK的下降沿有效。在8个SCLK周期后忽略SDATA高电平;这是特定SPI驱动器的固有特性,不会影响器件。
0x3044
- 欲迟延的8位。
- 频率寄存器0,L LSB数据。
- 8位数据 = 0x44。
0x21DD
- 将8位和迟延8位提供给选择频率寄存器。
- 频率寄存器0,H LSB数据。
- 8位数据- (0xDD) + 迟延数据 = 0xDD44。
0x3207—频率寄存器0,L MSB数据
0x2300—频率寄存器0,H MSB数据
0x343E—频率寄存器1,L LSB数据
0x2536—频率寄存器1,H LSB数据
0x361A—频率寄存器1,L MSB数据
0x2700—频率寄存器1,H MSB数据
0x9000—使用命令位1:0 将C15至C14的SELSRC置1。
- 将SELSRC置1—FSELECT由数据位控制。迟延增加两个 MCLK周期。
0xC000—频率寄存器1,L LSB数据。
- 退出复位模式。从FREQ0寄存器输出的一个3 kHz信号,在RESET位置0后经过 8个MCLK周期出现在DAC输出端。
示例2:修改FSELECT位
该器件现在利用输出端的一个3 kHz信号来设置,并由FSELECT位而不是FSELECT引脚来控制。只需写入控制寄存器来修改FSELECT位,便可将此频率更改为10 kHz。
0x5800—选择FREQ1寄存器。
- 即,将0x5写入命令位C3:C0。
- 将1写入位D11,以选择FREQ1寄存器(见图5)。
FSELECT位复位至0,可返回3 kHz FREQ0输出。
0x5800—选择FREQ0寄存器
示例3:根据需要更新输出
下一步,不用进入RESET模式将FREQ1寄存器从10 kHz改为40 kHz。
载入下列命令序列:
- 0x348C—频率寄存器1,L LSB数据
- 0x25DB—频率寄存器1,H LSB数据
- 0x3668—频率寄存器1,L MSB数据
- 0x2700—频率寄存器1,H MSB数据
- 0x9000—通过数据同步锁存到输出。此时,使用命令位[1:0]再次将C15和C14的SELSRC位置1。该器件只需一个FSYNC下降沿即可进行数据锁存(见图6)。