# 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`