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

178
LDC1612_USAGE_EXAMPLE.md Normal file
View File

@@ -0,0 +1,178 @@
# LDC1612 驱动使用指南
## 📌 概述
LDC1612是TI公司的涡流传感器芯片本驱动支持单通道(Channel 0)和双通道工作模式并提供了硬件IIC和软件IIC的灵活切换。
## 🔧 硬件IIC与软件IIC切换
### 方法一:通过 board_config.h 配置(推荐)
`Inc/board_config.h` 文件中修改以下配置:
```c
/* 使用软件IIC */
#define SOFTWARE_IIC // 启用软件IIC
// #undef SOFTWARE_IIC // 注释掉这行
/* 使用硬件IIC */
// #define SOFTWARE_IIC // 注释掉这行
#undef SOFTWARE_IIC // 使用硬件IIC
```
### 方法二:通过编译时定义
在CMakeLists.txt中添加
```cmake
# 使用软件IIC
target_compile_definitions(${PROJECT_NAME} PRIVATE SOFTWARE_IIC)
# 使用硬件IIC移除上面的定义即可
```
## 📋 LDC1612 初始化序列
### 推荐的初始化步骤
```c
// 2. 检查传感器ID
uint16_t manufacturer_id = ldc1612_get_manufacturer_id();
uint16_t device_id = ldc1612_get_deveice_id();
printf("Manufacturer ID: 0x%04X (Expected: 0x5449)\n", manufacturer_id);
printf("Device ID: 0x%04X (Expected: 0x3055)\n", device_id);
if (manufacturer_id != 0x5449 || device_id != 0x3055) {
printf("ERROR: LDC1612 not detected!\n");
return;
}
// 3. 复位传感器
ldc1612_reset_sensor();
delay_ms(100);
// 4. 配置单通道模式
ldc1612_single_ch0_config();
// 5. 显示当前IIC类型
printf("Current IIC Type: %s\n", ldc1612_get_iic_type());
printf("LDC1612 initialization completed\n");
}
```
## 📊 数据读取示例
```c
void ldc1612_read_example(void) {
uint32_t raw_data;
uint16_t status;
// 检查数据是否准备好
if (ldc1612_is_data_ready(CHANNEL_0)) {
// 读取原始数据
raw_data = ldc1612_get_raw_channel_result(CHANNEL_0);
// 检查错误状态
if (raw_data & 0xF0000000) {
printf("Sensor Error: 0x%08X\n", raw_data);
return;
}
// 获取有效数据 (28位)
uint32_t sensor_data = raw_data & 0x0FFFFFFF;
printf("Channel 0 Data: %u\n", sensor_data);
// 转换为频率值 (可选)
float frequency = (float)sensor_data * COIL_FREQ_HZ / 0x10000000;
printf("Frequency: %.2f Hz\n", frequency);
}
// 读取状态寄存器
status = ldc1612_get_sensor_status();
printf("Status: 0x%04X\n", status);
}
```
## ⚠️ 常见错误代码
| 错误代码 | 说明 |
|---------|------|
| 0xF0000000 | ERR_NC - 未检测到线圈 |
| 0x80000000 | ERR_UR - 欠量程错误 |
| 0x40000000 | ERR_OR - 超量程错误 |
| 0x20000000 | ERR_WD - 看门狗超时 |
| 0x10000000 | ERR_AE - 振幅错误 |
## 🔍 寄存器配置说明
### 当前配置值解析
```c
#define LDC1612_CONVERSION_TIME_CH0 0x0546 // 转换时间
#define LDC1612_DRIVE_CURRENT 0x9000 // 驱动电流
#define LDC1612_MUX_CONFIG 0x020C // 多路复用配置
#define LDC1612_SENSOR_CONFIG_CH0 0x1601 // 传感器配置
#define LC_STABILIZE_TIME_CH0 0x001E // LC稳定时间
```
- **转换时间**: 0x0546 = 1350个参考时钟周期
- **驱动电流**: 0x9000 = 高驱动电流设置
- **MUX配置**: 0x020C = 无自动扫描3.3MHz滤波带宽
- **传感器配置**: 0x1601 = 启用传感器,连续转换模式
## 🛠️ 调试技巧
### 1. 检查IIC通信
```c
void debug_iic_communication(void) {
printf("=== IIC Communication Test ===\n");
printf("IIC Type: %s\n", ldc1612_get_iic_type());
uint16_t manufacturer_id = ldc1612_get_manufacturer_id();
uint16_t device_id = ldc1612_get_deveice_id();
printf("Manufacturer ID: 0x%04X\n", manufacturer_id);
printf("Device ID: 0x%04X\n", device_id);
if (manufacturer_id == 0xFFFF || device_id == 0xFFFF) {
printf("ERROR: IIC communication failed!\n");
} else if (manufacturer_id == 0x5449 && device_id == 0x3055) {
printf("SUCCESS: LDC1612 detected and communicating\n");
} else {
printf("WARNING: Unexpected device detected\n");
}
}
```
### 2. 自动检测驱动电流
```c
void auto_detect_drive_current(void) {
printf("=== Auto Drive Current Detection ===\n");
ldc1612_drvie_current_detect(CHANNEL_0);
}
```
## 📈 性能优化建议
1. **硬件IIC vs 软件IIC**:
- 硬件IIC: 更快速CPU占用率低
- 软件IIC: 更灵活,便于调试
2. **频率设置优化**:
- 根据实际线圈参数调整 `COIL_L_UH``COIL_C_PF`
- 确保传感器频率在1-10MHz范围内
3. **电源管理**:
- 不使用时可调用 `ldc1612_set_sensor_config(LDC1612_SLEEP_MODE)`
## 📚 参考资料
- TI LDC1612 数据手册
- GD32E230 参考手册
- 本项目IIC驱动实现: `i2c.c``soft_i2c.c`