10个版本
0.0.10 | 2024年7月15日 |
---|---|
0.0.9 | 2022年9月2日 |
0.0.7 | 2022年6月30日 |
0.0.6 | 2022年2月27日 |
0.0.2 | 2021年4月26日 |
#388 in 嵌入式开发
29 每月下载量
13KB
156 行
dac8568
适用于德州仪器DAC8568的平台无关库。
描述
DAC7568
、DAC8168
和DAC8568
分别是低功耗、电压输出、八通道、12位、14位和16位数字至模拟转换器。这些设备包含一个2.5V、2ppm/°C的内部参考(默认禁用),提供2.5V或5V的全量程输出电压范围。内部参考的初始精度为0.004%,可以在VREFIN/VREFOUT引脚提供高达20mA的电流。这些设备是单调的,提供优异的线性度并最小化不希望的代码到代码瞬态电压(毛刺)。它们使用一种通用的3线串行接口,时钟速率高达50MHz。该接口与标准SPI™、QSPI™、Microwire™和数字信号处理器(DSP)接口兼容。
特性
- 支持德州仪器DAC8568
- 堆栈无和no-std兼容
- 使用
embedded-hal
实现(https://docs.rs/embedded-hal/0.2.7/embedded_hal) - 支持阻塞和非阻塞
- 包括同步静态模式的基本功能集
待完善功能
如果您想添加对更高级特性的支持,请随意创建问题和PR
- 利用LDAC线进行异步模式
- 灵活模式
- 对DAC7568(12位)和DAC8168(14位)的泛型支持
示例
注意:快速示例基于stm32h7xx-hal
。
// Initialise SPI. Ensure correct polarity and phase are respected
let spi: Spi<SPI1, Enabled> = interface.spi(
(sck, NoMiso, mosi),
spi::MODE_1, // polarity: Polarity::IdleLow,
// phase: Phase::CaptureOnSecondTransition,
10.mhz(),
prec,
clocks,
);
// Initialise SYNC for SPI communications
let sync = sync.into_push_pull_output();
// Initialize the dac instance
let mut dac = dac8568::Dac::new(spi, sync);
// Perform a software reset of DAC8568 to clear all registers
dac.reset();
// Configure the DAC to use the internal 2.5v reference
dac.use_internal_reference().unwrap();
// Optionally, invert the output signal
dac.set_inverted_output(true);
// Now transfer the data to update the DAC as a blocking call
dac.set_voltage(dac8568::Channel::A, voltage).unwrap();
// Alternatively, you can maintain ownership of the SPI and SYNC if you need to use
// asynchronous communication such as Interrupts and/or DMA.
let (spi, sync) = dac.release();
// And then access the desired message directly
let message = dac8568::Message::get_voltage_message(dac8568::Channel::A, voltage, false);
// Get the message data that can be transferred manually
let payload = message.get_payload_bytes();
// And then write the message bytes to a DMA RAM buffer
依赖
~71KB