#synthesizer #dds #embedded-hal

no-std ad9850

AD9850 DDS合成器芯片的嵌入式驱动程序

3个版本

0.1.2 2023年3月29日
0.1.1 2023年3月21日
0.1.0 2023年3月21日

#744 in 嵌入式开发

MIT 许可证

15KB
113

ad9850

ad9850 - AD9850 DDS合成器芯片的嵌入式驱动程序

AD9850是Analog Devices销售的DDS合成器芯片。查看其数据手册以获取有关其的一般信息。

此crate实现了嵌入式设备控制AD9850芯片的接口。

此crate的唯一依赖是您的设备有4个数字输出引脚,这些引脚实现了embedded_hal::digital::v2::OutputPin特性。

使用示例

此示例使用arduino-hal。虽然ad9850库不是特定于设备的,但应很容易将示例修改为其他设备。

#[arduino_hal::entry]
fn main() -> ! {
    let dp = arduino_hal::Peripherals::take().unwrap();
    let pins = arduino_hal::pins!(dp);

    // Initialize the device
    let ad9850 = ad9850::Ad9850::new(
        pins.d4.into_output(), // Connect D4 (Arduino) to RESET (AD9850)
        pins.d5.into_output(), // Connect D5 (Arduino) to DATA (AD9850)
        pins.d6.into_output(), // Connect D6 (Arduino) to FQ_UD (AD9850)
        pins.d7.into_output(), // Connect D7 (Arduino) to W_CLK (AD9850)
    ).into_serial_mode().unwrap();
    //                   ^^^^ unwrap is ok here, since `set_low`/`set_high`
    //                        are infallible in the arduino-hal.

    // Set output frequency to 1 MHz
    ad9850.set_frequency(1000000.0);
}

支持的功能

  • 重置设备
  • 串行模式编程
  • 并行模式编程
  • 掉电/唤醒

关于时序的说明

与Ad9850的通信涉及在RESET、W_CLK和FQ_UD线上发送“脉冲”。根据数据手册,这些脉冲的长度至少为3.5ns(RESET和W_CLK)和至少7ns(FQ_UD线)。

此实现不会在切换引脚高低之间插入任何“延迟”,因此脉冲宽度取决于运行此代码的设备的CPU频率。

示例:如果MCU运行在16MHz,则这种方式获得的最小脉冲宽度为$\frac{1}{16MHz} = 62ns$,这远远超过了所需的7ns宽度。

如果您的MCU运行频率显著更高,则这种方法可能失败,您必须修改代码以插入延迟。

如果您遇到时序问题,请随时提交问题

许可证:MIT

依赖项

~71KB