CT2345 应用笔记
本页面汇集了CT2345相关的应用笔记,帮助您快速完成产品设计。
应用笔记列表
| 编号 | 标题 | 版本 | 更新日期 |
|---|---|---|---|
| AN001 | 笔记本开合检测设计指南 | v1.0 | 2024-01-10 |
| AN002 | TWS耳机入盒检测方案 | 即将发布 | - |
| AN003 | 智能门锁位置感应设计 | 即将发布 | - |
AN001: 笔记本开合检测设计指南
1. 概述
本应用笔记详细介绍如何使用CT2345霍尔开关实现笔记本电脑的开合检测功能。文档涵盖系统设计原理、磁铁选型、电路设计、PCB布局及软件实现等关键环节。
2. 系统架构
🧲 磁铁屏幕侧(盖板)
↕️ 检测距离 3-8mm
📟 CT2345主机侧(底座)
工作原理:
- 磁铁安装在屏幕侧(盖板)
- 霍尔开关安装在主机侧(底座)
- 合盖时磁铁靠近,霍尔开关输出低电平
- 开盖时磁铁远离,霍尔开关输出高电平
- 主控检测信号变化,触发休眠/唤醒
3. 磁铁选型
| 磁铁类型 | 规格 | 表面磁场 | 推荐检测距离 | 成本 |
|---|---|---|---|---|
| 钕铁硼 N35 | Φ3×1 mm | ~280 mT | 5-8 mm | 中 |
| 钕铁硼 N42 | Φ2×1 mm | ~320 mT | 4-7 mm | 高 |
| 铁氧体 Y30 | Φ5×2 mm | ~80 mT | 2-4 mm | 低 |
推荐配置
Φ3×1mm N35钕铁硼 + 5mm检测距离
这是性价比最高的组合,可满足大多数笔记本设计需求。
4. 硬件设计
4.1 典型应用电路
VDD (3.3V)
│
├──────┬─────────┐
│ │ │
┌┴┐ ═══ │
C1 │ │ 100nF ┌┴┐
100nF└┬┘ │ │ │ R1 (可选)
│ │ └┬┘ 10kΩ
│ ┌──┴──┐ │
└───┤VDD │ │
│ │ │
┌────┤OUT ├──────┼───── 至 MCU GPIO
│ │ │ │
│ │GND │ │
│ └──┬──┘ │
│ │ │
└───────┴─────────┴───── GND
CT23454.2 元件清单
| 序号 | 元件 | 规格 | 封装 | 数量 | 备注 |
|---|---|---|---|---|---|
| U1 | CT2345 | CT2345GSO-3-TR | SOT-23-3 | 1 | 霍尔开关 |
| C1 | 去耦电容 | 100nF/10V X7R | 0402 | 1 | 靠近VDD |
| R1 | 上拉电阻 | 10kΩ | 0402 | 1 | 开漏版本需要 |
4.3 PCB布局
布局要点
- C1靠近VDD:走线距离 ≤ 3mm
- 避免铜皮遮挡:感应区域下方不要铺铜
- 远离干扰源:与开关电源、大电流走线保持距离
- 磁性元件隔离:10mm范围内避免放置电感、蜂鸣器等
5. 软件实现
5.1 GPIO配置 (STM32 HAL)
c
#include "stm32f1xx_hal.h"
// 定义引脚
#define HALL_GPIO_PORT GPIOA
#define HALL_GPIO_PIN GPIO_PIN_0
#define HALL_IRQ EXTI0_IRQn
void Hall_Sensor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置为输入模式,启用中断
GPIO_InitStruct.Pin = HALL_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(HALL_GPIO_PORT, &GPIO_InitStruct);
// 配置中断优先级
HAL_NVIC_SetPriority(HALL_IRQ, 2, 0);
HAL_NVIC_EnableIRQ(HALL_IRQ);
}5.2 中断处理与去抖动
c
#define DEBOUNCE_TIME_MS 50
static uint32_t last_trigger_time = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin != HALL_GPIO_PIN) return;
uint32_t current_time = HAL_GetTick();
// 去抖动处理
if (current_time - last_trigger_time < DEBOUNCE_TIME_MS) {
return;
}
last_trigger_time = current_time;
// 读取当前状态
GPIO_PinState state = HAL_GPIO_ReadPin(HALL_GPIO_PORT, HALL_GPIO_PIN);
if (state == GPIO_PIN_RESET) {
// 检测到磁铁 - 合盖
System_Enter_Sleep();
} else {
// 磁铁远离 - 开盖
System_Wakeup();
}
}5.3 状态查询接口
c
typedef enum {
LID_OPEN = 0,
LID_CLOSED = 1
} LidState_t;
LidState_t Get_Lid_State(void)
{
if (HAL_GPIO_ReadPin(HALL_GPIO_PORT, HALL_GPIO_PIN) == GPIO_PIN_RESET) {
return LID_CLOSED;
}
return LID_OPEN;
}6. 测试验证
| 测试项 | 测试方法 | 通过标准 |
|---|---|---|
| 检测距离 | 调整磁铁距离,观察输出变化 | 3-8mm范围内可靠触发 |
| 响应时间 | 示波器测量信号延迟 | < 10ms |
| 功耗 | 电流表测量待机电流 | < 10μA (含MCU待机) |
| 温度稳定性 | 高低温箱测试 | -20°C~60°C正常工作 |
| 抗干扰 | 施加50mT外部磁场 | 不误触发 |
7. 常见问题
Q1: 检测距离不够怎么办?
A: 可从以下方面优化:
- 更换磁性更强的磁铁(如N42替代N35)
- 增大磁铁尺寸
- 确认磁铁极性正对霍尔开关感应面
- 减少磁铁与霍尔开关之间的金属遮挡
Q2: 存在误触发怎么办?
A: 检查以下几点:
- PCB布局是否有大电流走线经过
- 附近是否有其他磁性元件(电感、蜂鸣器)
- 软件去抖动时间是否足够(建议50ms)
- 是否存在电源噪声
Q3: 功耗高于预期?
A: 排查方向:
- 确认MCU GPIO配置正确(避免浮空输入)
- 检查是否有漏电路径
- 确认CT2345供电电压在推荐范围内