polarimeter_software/User/driver/ad779x/README.md

214 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
* @Author: mypx
* @Email: mypx_coder@163.com
* @Date: 2025-06-23 10:56:41
* @LastEditors: mypx mypx_coder@163.com
* @Description:
-->
## AD7792与AD7793的核心区别总结
---
### 🔍 **核心差异概览**
| **参数** | **AD7792** | **AD7793** | **说明** |
|------------------------|--------------------|--------------------|--------------------------------------------------------------------------|
| **分辨率** | 16位 | 24位 | AD7793有效分辨率高达23位适合更高精度测量。 |
| **输出数据范围** | 065535 (16位) | 016,777,215 (24位) | 24位分辨率提供更精细的量化级别。 |
| **噪声水平** | 较高(同增益下) | 更低40nV RMS @4.17Hz | 低噪声设计使AD7793在微弱信号检测中表现更优。 |
| **有效分辨率** | ≤16位 | 最高23位 | 实际可用分辨率受噪声限制AD7793在低速率下更接近理论值。 |
| **典型应用场景** | 一般工业控制 | 高精度测量(如医疗、实验室) | 热电偶、RTD测温等场景优先选用AD7793。 |
---
### ⚙️ **功能与性能细节**
1. **模拟前端一致性**
- **相同点**
- 均支持3路差分输入内置可编程增益放大器PGA增益1128
- 集成激励电流源10μA/210μA/1mA和偏置电压发生器。
- 供电电压范围均为2.7V5.25V功耗典型值400μA。
- **差异点**
- AD7793的输入缓冲器噪声更低直接支持小信号输入如PT100测温
2. **动态性能优化**
- **数据速率**两者均支持4.17Hz470Hz可调输出速率。
- **滤波能力**AD7793在低速率下如4.17Hz通过数字滤波实现更优的50Hz/60Hz工频抑制。
3. **基准电压与校准**
- 均支持内部带隙基准1.17V或外部差分基准如2.5V)。
- **校准模式**:两款芯片均提供内部/系统零点和满量程校准寄存器。
---
### 📊 **选型建议**
- **AD7792适用场景**成本敏感型应用如工业过程控制、便携仪器仪表对分辨率要求≤16位即可满足。
- **AD7793适用场景**
- 高精度传感器测量如RTD测温精度达0.2℃)。
- 微弱信号采集(如气体分析、血液检测)。
- 需23位有效分辨率的系统如实验室设备
---
### 💎 **总结**
AD7793在分辨率、噪声控制和有效位数上全面优于AD7792但成本更高
AD7792则以更低成本覆盖中精度需求场景。
若系统要求分辨率≤16位且预算有限选AD7792反之追求极限精度或微弱信号检测必选AD7793。
---
## 推荐初始化流程AD7793
1. 配置 `ad7793_hw_if_t` 硬件接口结构体,填充 SPI/GPIO/延时等函数指针。
2. 定义 `ad7793_config_t` 配置结构体,指定参考源、增益、通道、速率、缓冲等参数。
3. 调用 `ad7793_init(&dev, &hw_if, cs_pin, &cfg)` 完成初始化。
4. 采集数据前建议调用 `ad7793_wait_ready` 等待数据就绪。
5. 采集数据用 `ad7793_read_data`,转换电压用 `ad7793_convert_to_voltage`
6. 如需切换通道/增益/参考源,建议先 idle再切换参数最后恢复 continuous。
## 常见故障排查
- STATUS=0x48/0xC8多为参考源配置与硬件不符、增益/缓冲冲突、IEXC未配置等。
- 读数全0或极大检查参考电压、SPI连线、通道/增益配置。
- 写寄存器失败:检查 SPI 速率、CS 时序、硬件接口实现。
- 温度跳变/毛刺:建议应用层做温度跳变/低码滤波。
- 采样速率异常确认速率配置与主时钟、SPI速率匹配。
## IEXC激励电流配置注意事项
- 仅当硬件实际将 IOUT1/IOUT2 接到 RTD 或传感器回路时才需配置 IEXC。
- 若 IOUT1/IOUT2 悬空(未连接),请勿使能 IEXC否则可能导致不可预期行为或错误状态如 STATUS=0x48
- IEXC 配置必须与硬件连接方式一致。若用外部电流源或定值电阻IEXC 应保持关闭。
## 缓冲/增益策略
- 关闭缓冲BUF=0增益不得大于2G<=2驱动已强制限制。
- 开启缓冲BUF=1可用高增益但输入偏置电流和功耗增加。
## 寄存器dump与诊断
- 可用 `ad7793_dump_registers``ad7793_dump_registers_mode` 打印所有寄存器值,便于调试。
- 检测到持续错误STATUS.ERR时建议dump寄存器辅助定位参考、缓冲、增益、IEXC等配置问题。
## API典型用法与边界说明
- 所有API均检查设备初始化和参数有效性未初始化或参数非法均返回false。
- 具体API用法和边界条件详见头文件注释。
## Buffer/Gain Policy
- When buffer is disabled (BUF=0), gain must not exceed 2 (G<=2). The driver enforces this restriction and will return false if you attempt to set G>2 with buffer off.
- Enabling the buffer (BUF=1) allows higher gain settings, but increases input bias current and power consumption.
## Register Dump and Diagnostics
- Use `ad7793_dump_registers` or `ad7793_dump_registers_mode` to print all register values for debugging.
- When persistent error (STATUS.ERR) is detected, perform a register dump to help diagnose the cause (reference, buffer, gain, IEXC, etc.).
## Typical API Usage and Boundary Notes
- All API functions check for device initialization and parameter validity; invalid parameters or uninitialized device will return false.
- See header file comments for typical usage and boundary conditions for each API.
---
## 通信寄存器用法
通信寄存器在AD7793中起到控制数据传输方向和指定目标寄存器的作用。它是SPI通信接口的核心控制寄存器用于告诉AD7793后续的操作是读还是写以及操作的目标寄存器是哪一个。
### 通信寄存器的作用
1. **读写控制**:通过设置`RW`位bit6来区分是读操作还是写操作。
2. **寄存器选择**:通过`RS2-RS0`位bits5-3来指定要操作的目标寄存器。
3. **连续读模式**:通过设置`CREAD`位bit2可以启用连续读模式用于连续读取数据寄存器。
### 是否每个寄存器操作前都需要设置通信寄存器?
是的在每次操作AD7793的寄存器之前都需要先通过通信寄存器指定操作类型读/写和目标寄存器。这是因为AD7793采用的是串行接口需要通过通信寄存器来告知器件接下来要进行的操作。
### 通信寄存器的操作流程
1. **构建通信命令**:根据要操作的目标寄存器和操作类型(读/写),构建通信寄存器的值。
2. **发送通信命令**将构建好的通信命令发送给AD7793。
3. **执行数据传输**:根据通信命令的指示,进行数据的读写操作。
### 代码示例
以下是一个写寄存器的示例,展示了如何使用通信寄存器:
```c
bool ad7793_write_reg(uint8_t reg, uint8_t *data, uint16_t len)
{
uint8_t cmd = 0;
/* Build communication command: WEN=0, R/W=0(write), register address */
cmd = (reg & 0x07) << 3; // 设置RS2-RS0位指定目标寄存器
cmd &= ~COMM_RW; // 清除RW位设置为写操作
cmd &= ~COMM_WEN; // 清除WEN位默认值
ad7793.hw_if.gpio_set(ad7793.cs_pin, false); // 使能片选
ad7793_spi_transfer(cmd, data, NULL, len); // 发送通信命令和数据
ad7793.hw_if.gpio_set(ad7793.cs_pin, true); // 禁用片选
return true;
}
```
### 注意事项
1. **通信命令字节**:通信寄存器的设置是通过发送一个专门的命令字节来实现的,而不是直接写入通信寄存器的地址。
2. **连续操作**:在连续操作同一个寄存器时,不需要每次都重新设置通信寄存器,除非操作类型或目标寄存器发生变化。
3. **数据寄存器的特殊处理**数据寄存器REG_DATA在读模式下有特殊的连续读功能可以通过设置`CREAD`位来启用。
理解通信寄存器的工作原理对于正确操作AD7793至关重要它是实现与器件通信的基础。
---
# AD7793/AD7792 应用配置与调试注意事项
## 推荐配置PT100/RTD 测温典型拓扑)
```c
static const ad7793_config_t g_ad7793_config = {
.use_internal_ref = false, // 使用外部参考如2.5VREFIN+已实测2.5V
.external_ref = 2.500f,
// 传感器差分约 0.043V,需保证 < Vref / Gain
// 选择 GAIN=4 -> 满量程 2.5/4=0.625V,安全覆盖 43mV 输入
.init_gain = AD7793_GAIN_4,
.init_channel = AD7793_CHANNEL_1, // AIN1(+) - AIN1(-)
.init_rate = AD7793_RATE_8_33HZ,
.unipolar = true, // 只测正向信号
.buffered = true, // 启用缓冲
.calibrate_system_zero = false // 禁用 system zero 校准,防止 OFFSET 被污染
};
```
## 配置与调试注意事项
1. **参考电压必须与硬件一致**
- 若硬件 REFIN+ 接外部参考如2.5V`use_internal_ref` 必须为 `false``external_ref` 填实际电压。
- 若用内部参考1.17V),需保证 REFIN+/- 悬空且 `use_internal_ref=true`
2. **增益选择**
- 满量程 = 参考电压 / 增益。输入信号最大值必须小于满量程。
- 输入信号远小于满量程时可适当提高增益(如 GAIN=8/16但不能超量程。
3. **校准操作**
- 禁用 system zero 校准(`calibrate_system_zero=false`),防止在参考/输入异常时 OFFSET 被写坏。
- 若需校准,必须保证参考和输入都正常且在允许范围内。
4. **错误状态与保护**
- STATUS.ERRbit6=1表示参考/输入异常,采样数据无效。
- 采样线程应对 ERR/低码做过滤,避免异常温度。
- OFFSET/FULLSCALE 寄存器应在每次初始化和异常时 dump 检查。
5. **常见故障排查**
- STATUS=0x48 持续:多为参考配置与硬件不符或输入超量程。
- OFFSET=0x800000 为正常中点,极大/极小为校准异常。
- 采样码值极低或全0多为参考/输入/校准异常。
6. **硬件测量建议**
- 用万用表测 REFIN+ 对地、AIN1+/AIN1- 差分,确认与配置一致。
7. **调试建议**
- 先用低增益(如 GAIN=2/4确保不超量程采样正常后再逐步提高增益。
- 采样线程建议加低码/ERR保护防止异常数据影响温度计算。
---
如需更高分辨率或特殊应用,请根据实际输入信号幅度和参考电压合理调整增益与参考配置。