release dev branch

This commit is contained in:
2025-08-17 02:58:32 +08:00
parent f82ab23898
commit 5cdd7ca58c
34 changed files with 5220 additions and 181 deletions

222
LDC1612_CONFIG_SEQUENCE.md Normal file
View File

@@ -0,0 +1,222 @@
# LDC1612 正确配置顺序说明
## 📋 **配置顺序重要性**
LDC1612的配置顺序**非常关键**,错误的顺序可能导致:
- 传感器无法正常工作
- 数据不准确
- 功耗异常
- 系统不稳定
## 🔄 **完整初始化配置流程**
### **阶段一:硬件复位和验证**
```c
ldc1612_status_t ldc1612_complete_init(void) {
/* 1. 硬件复位 - 必须第一步 */
ldc1612_reset_sensor();
delay_ms(100); // 重要:等待复位完成
/* 2. 验证设备身份 */
uint16_t manufacturer_id = ldc1612_get_manufacturer_id();
uint16_t device_id = ldc1612_get_deveice_id();
if (manufacturer_id != 0x5449 || device_id != 0x3055) {
return LDC1612_STATUS_ERROR;
}
/* 3. 进入配置阶段 */
return ldc1612_config_single_channel(CHANNEL_0);
}
```
### **阶段二:通道配置(严格顺序)**
#### **Step 1: 进入睡眠模式**
```c
// 配置前必须让传感器进入睡眠模式
ldc1612_write_register(SENSOR_CONFIG_REG, LDC1612_SLEEP_MODE);
delay_ms(10);
```
**原因**:确保传感器停止工作,避免配置冲突
#### **Step 2: 频率分频配置**
```c
ldc1612_set_freq_divide(channel);
delay_ms(5);
```
**原因**
- 这是最基础的配置,影响所有后续参数
- 必须根据LC谐振频率正确计算
- 公式:`f_sensor = 1/(2π√(LC))`
#### **Step 3: LC稳定时间**
```c
ldc1612_set_LC_stabilize_time(channel, LC_STABILIZE_TIME_CH0);
```
**原因**
- 影响测量精度
- 时间太短可能导致不稳定
- 时间太长影响响应速度
#### **Step 4: 转换时间**
```c
ldc1612_set_conversion_time(channel, LDC1612_CONVERSION_TIME_CH0);
```
**原因**
- 影响测量精度和速度的平衡
- 值越大精度越高但速度越慢
#### **Step 5: 转换偏移**
```c
ldc1612_set_conversion_offset(channel, 0x0000);
```
**原因**
- 通常设为0除非有特殊校准需求
#### **Step 6: 驱动电流**
```c
ldc1612_set_drive_current(channel, LDC1612_DRIVE_CURRENT);
```
**原因**
- 影响传感器灵敏度和功耗
- 电流越大灵敏度越高但功耗也越大
#### **Step 7: 多路复用器配置**
```c
ldc1612_set_mux_config(LDC1612_MUX_CONFIG);
```
**原因**
- 设置通道选择和滤波器带宽
- 影响噪声抑制和响应速度
#### **Step 8: 错误配置**
```c
ldc1612_set_error_config(LDC1612_ERROR_CONFIG);
```
**原因**
- 配置错误输出行为
- 通常设为0所有错误输出启用
#### **Step 9: 启动传感器**
```c
ldc1612_write_register(SENSOR_CONFIG_REG, LDC1612_SENSOR_CONFIG);
delay_ms(50);
```
**原因**
- **必须最后一步**
- 启动传感器开始正常工作
- 需要等待稳定时间
## ⚠️ **常见配置错误**
### **1. 配置顺序错误**
```c
// ❌ 错误:先启动传感器再配置
ldc1612_set_sensor_config(LDC1612_SENSOR_CONFIG);
ldc1612_set_freq_divide(CHANNEL_0); // 太晚了!
// ✅ 正确:先配置后启动
ldc1612_set_freq_divide(CHANNEL_0);
ldc1612_set_sensor_config(LDC1612_SENSOR_CONFIG);
```
### **2. 缺少延时**
```c
// ❌ 错误:没有等待复位完成
ldc1612_reset_sensor();
ldc1612_get_manufacturer_id(); // 可能读取失败
// ✅ 正确:适当延时
ldc1612_reset_sensor();
delay_ms(100);
ldc1612_get_manufacturer_id();
```
### **3. 频率分频计算错误**
```c
// ❌ 错误:使用固定值
#define FREQ_DIV_VALUE 0x1002
// ✅ 正确根据LC参数计算
sensor_freq = 1 / (2 * PI * sqrt(L * C));
fin_div = (uint16_t)(sensor_freq / 8.75 + 1);
```
## 📊 **配置参数说明**
| 参数 | 地址 | 当前值 | 说明 |
|------|------|--------|------|
| 频率分频 | 0x14 | 0x1002 | 根据LC计算得出 |
| LC稳定时间 | 0x10 | 0x001E | 30个时钟周期 |
| 转换时间 | 0x08 | 0x0546 | 1350个参考时钟 |
| 驱动电流 | 0x1E | 0x9000 | 高驱动电流 |
| 多路复用 | 0x1B | 0x020C | 单通道3.3MHz带宽 |
| 传感器配置 | 0x1A | 0x1601 | 启用传感器,连续模式 |
## 🔍 **验证配置是否正确**
```c
void verify_ldc1612_config(void) {
uint16_t status = ldc1612_get_sensor_status();
printf("Status: 0x%04X\n", status);
// 检查数据就绪
if (ldc1612_is_data_ready(CHANNEL_0)) {
printf("✓ Channel 0 data ready\n");
}
// 检查错误
if (status & 0xFF00) {
printf("✗ Error detected: 0x%04X\n", status);
} else {
printf("✓ No errors detected\n");
}
}
```
## 📚 **TI官方建议的最佳实践**
1. **总是先复位**:每次配置前都要复位传感器
2. **验证设备ID**:确保通信正常
3. **睡眠模式配置**:配置期间保持睡眠状态
4. **频率优先**:频率分频必须最先配置
5. **启动最后**:传感器配置必须最后设置
6. **适当延时**:每个关键步骤后都要延时
7. **状态检查**:配置完成后检查状态寄存器
## 🎯 **推荐使用方式**
```c
// 推荐的初始化流程
int main(void) {
// 系统初始化
system_init();
// IIC初始化
#ifdef SOFTWARE_IIC
soft_i2c_config();
#else
i2c_config();
#endif
// LDC1612完整初始化
if (ldc1612_complete_init() != LDC1612_STATUS_SUCCESS) {
printf("LDC1612 initialization failed!\n");
while(1);
}
printf("LDC1612 initialization success!\n");
// 主循环
while (1) {
if (ldc1612_is_data_ready(CHANNEL_0)) {
uint32_t data = ldc1612_get_raw_channel_result(CHANNEL_0);
// 处理数据
}
delay_ms(100);
}
}
```