转自CSDN:http://blog.csdn.net/wlwl0071986/article/details/9154541
一、HALL开关原理及手机应用
手机中用来控制线路通断的器件主要有三种类型:开关、干簧管和霍尔元件。不同的是开关一般是由人工
手动控制,而干簧管和霍尔元件则通过磁信号来控制线路的通与断。霍尔(HALL)传感器是一种电子元件,其
外型封装和三极管非常相象。它是由HALL元件,放大器、施密特电路以及集电极开路输出三极管组成,当磁场
作用于HALL元件时产生一个微小的HALL电压,经放大器放大和施密特电路后使三极管导通输出低电平,而没
有磁场作用的时候(即翻盖打开后)三极管截止输出为高电平。和干簧管相比HALL传感器寿命更长,不容易损
坏,而且对振动,加速度不太敏感,作用时开关时间也比较快,通常为0.1~~2ms比干簧管的1~~3ms快得多。
手机中HALL传感器由一个开关型HALL元件和两个电源开关控制管组成。其导通与否完全受到手机CPU输
出的HALL高电平信号控制,电源则来自于电池。当翻盖合上时装在翻盖中的磁铁的磁场作用于HALL传感器
(一般翻盖/折叠手机都把磁铁安装在翻盖上),HALL电路中的三极管导通,从传感器的引脚输出低电平,如果
是在通话后则作为“挂机”信号送给CPU挂机。(这也就是为什么合上翻盖后手机就挂断的道理)。
当用户打开翻盖时,HALL不受磁场感应,HALL电路中的三极管截止,输出为高电平,如果该信号是在来
电时产生的,那么在送给CPU时,CPU便作为开机信号而接听电话。但如果仅仅是用户做其他操作比如输入短
信,电话号码单纯打开翻盖,该电路信号由CPU作为背景灯控制信号使背景灯点亮。(每次开盖的时候背景灯
都要点亮,同时记录一次翻盖次数)。小心的用工具仅仅掀开一点点翻盖的时候背景灯是不会亮的,因为这时
候还有磁场作用于HALL元件,当打开到一定角度的时候,失去磁场作用的HALL电路的三极管便截止输入高电
平,CPU在收到该信号后便驱动背景灯电路点燃背景灯。
当用户取消“翻盖接听”的选项后,CPU送出的HALL信号为低电平,从而使那两个电源开关控制管截止,没
有电源供给,即使在有无磁场信号时输出的电压都不会改变,因而也就失去了开关的作用。因此在这样的情况
下,来电后你翻盖CPU根据设置并不接通电话,这时候你需要按下接听键才能接听。
二、硬件连接
NOTE: 当有磁场改变的时候在OUT脚位会输出一个 H 或者 L 电平,与OUT 相连的PIN脚必须是一个可唤醒系统的中断
三、HALL KEY实现
在驱动gpio_event.c里添加中断注册和回掉函数
#define GN_HALL_KEY_OPEN 111 #define GN_HALL_KEY_CLOSE 112 -------给系统上报的键值 #define GN_GPIO_HALL_EINT_PIN 40 u8 hall_key_state_bak; spinlock_t hall_lock; struct hall_irq_info { int irq; struct work_struct work; }; struct hall_irq_info hall_info; enum hall_state { HALL_CLOSE = 0, HALL_OPEN =1 }; INIT_WORK(&(hall_info.work), work_func); ---------------初始化工作队列 err = gpio_request(GN_GPIO_HALL_EINT_PIN, "Hall Key IRQ GPIO"); if (err) { printk(KERN_ERR "%s: Failed to request GPIO %d\n", __func__, GN_GPIO_HALL_EINT_PIN); goto err_request_gpio_failed; } gpio_tlmm_config(GPIO_CFG(GN_GPIO_HALL_EINT_PIN, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_6MA),GPIO_CFG_ENABLE); gpio_free(GN_GPIO_HALL_EINT_PIN); hall_info.irq= gpio_to_irq(GN_GPIO_HALL_EINT_PIN); if (__gpio_get_value(GN_GPIO_HALL_EINT_PIN) == 0) { pr_info("HALL_KEY: init the request irq for RISING\n"); hall_key_state_bak = 0; switch_set_state((struct switch_dev *)&hall_data, HALL_CLOSE); err = request_irq(hall_info.irq, hall_irq, IRQF_TRIGGER_HIGH, "Hall_Key", NULL); } else { pr_info("HALL_KEY: init the request irq for FALLING\n"); hall_key_state_bak = 1; switch_set_state((struct switch_dev *)&hall_data, HALL_OPEN); err = request_irq(hall_info.irq, hall_irq, IRQF_TRIGGER_LOW, "Hall_Key", NULL); } enable_irq_wake(hall_info.irq); if (err < 0) { pr_err("HALL_KEY: enable_irq_wake failed...\n"); goto err_request_irq_failed; } -------------中断的配置 static void work_func(struct work_struct *work) { - - if (kpd_hallkey_state==1) { //hall open input_report_key(hall_input_dev, GN_HALL_KEY_OPEN, 1); input_sync(hall_input_dev); input_report_key(hall_input_dev, GN_HALL_KEY_OPEN, 0); input_sync(hall_input_dev); switch_set_state((struct switch_dev *)&hall_data, HALL_OPEN); } else {//hall close input_report_key(hall_input_dev, GN_HALL_KEY_CLOSE, 1); input_sync(hall_input_dev); input_report_key(hall_input_dev, GN_HALL_KEY_CLOSE, 0); input_sync(hall_input_dev); switch_set_state((struct switch_dev *)&hall_data, HALL_CLOSE); } - - } static irqreturn_t hall_irq(int irq, void *dev_id) { disable_irq_nosync(hall_info.irq); schedule_work(&hall_info.work); return IRQ_HANDLED; }
四、按键唤醒系统
要实现按键唤醒系统,首先,在驱动中,设置此键会被上报。如:
__set_bit(KEY_2, kpd_input_dev->keybit); __set_bit(KEY_3, kpd_input_dev->keybit);
这样,才能确保按键被注册处理,否则,上层收不到按键事件。
另外,在7x27a_kp.kl文件中,设置devices\qcom\msm7627a_sku3\7x27a_kpd.kl
key 111 GN_HALL_KEY_OPEN WAKE key 112 GN_HALL_KEY_CLOSE
这样就可实现按键唤醒系统了。
五、新增两个按键实现hall key
1. 首先修改底层gpio_event.c文件中的按键定义:
#define GN_HALL_KEY_OPEN 111 #define GN_HALL_KEY_CLOSE 112
2. 修改devices\qcom\msm7627a_sku3\7x27a_kpd.kl文件,增加
key 111 GN_HALL_KEY_OPEN WAKE (打开可以唤醒) key 112 GN_HALL_KEY_CLOSE
3. 在frameworks\base\include\ui\keycodelabels.h KEYCODES结构体中增加
{ "GN_HALL_KEY_OPEN", 111 }, { "GN_HALL_KEY_CLOSE", 112 },
4. 在frameworks\base\core\java\android\view\keyevent.java构造函数中增加:
public static final int KEYCODE_GN_HALL_KEY_OPEN = 111; public static final int KEYCODE_ GN_HALL_KEY_CLOSE = 112;
5. 修改: private static final int LAST_KEYCODE = KEYCODE_BUTTON_MODE;
为private static final int LAST_KEYCODE =KEYCODE_ GN_HALL_KEY_CLOSE;
在frameworks\base\native\include\android\keycodes.h的enum中增加:
AKEYCODE_GN_HALL_KEY_CLOSE = 250, AKEYCODE_GN_HALL_KEY_CLOSE = 251,
6. 在frameworks\base\libs\ui\input.cpp的issystemkey中增加:
case AKEYCODE_GN_HALL_KEY_CLOSE:
case AKEYCODE_GN_HALL_KEY_CLOSE:
这样bool KeyEvent::isSystemKey() const {
return isSystemKey(getKeyCode());
才能由scancode转换为keycode供上层应用截取。
7. 在frameworks/base/core/res/res/values/attrs.xml中增加:
<enum name="KEYCODE_GN_HALL_KEY_OPEN" value="250" /> <enum name="KEYCODE_GN_HALL_KEY_CLOSE" value="251" />
相关推荐
接下来,我们将详细介绍全极性霍尔开关的分类以及低功耗和非低功耗霍尔开关的特点和应用场景。 单极性霍尔开关只对一种极性的磁场敏感,通常只对北极或南极有效,且需要磁体通过霍尔器件的特定方向才能触发开关动作...
电机测速与霍尔开关传感器模块3144在IT领域中扮演着重要的角色,尤其在自动化和嵌入式系统的设计中。霍尔传感器是一种基于霍尔效应的电子器件,可以用于检测磁场的变化,进而转化为电信号。在这个场景中,3144型号的...
### 双极霍尔开关MST霍尔IC MH251 #### 产品概述 双极霍尔开关MST霍尔IC MH251是一种基于霍尔效应原理设计的微型集成电路,广泛应用于各种磁控开关场景,如补水仪、果汁机等。该IC通过检测磁场变化来控制电路的通...
《AH3020霍尔开关详解》 霍尔开关是一种基于霍尔效应的电子元件,广泛应用于工业控制、汽车电子、消费电子等领域。本文主要围绕AH3020霍尔开关进行深入讲解,旨在帮助读者理解其工作原理、特性、应用及参数。 一、...
### 霍尔开关中文资料知识点详解 #### 一、霍尔传感器概述 **霍尔传感器**是一种基于霍尔效应的磁敏传感器,能够将变化的磁场转化为电信号输出。其核心部分是霍尔元件,当它处于磁场中时,会因为切割磁力线而产生...
霍尔开关是一种应用霍尔效应原理来实现磁信号与电信号转换的电子组件,它通过检测磁场的变化来控制电路的状态。霍尔效应是物理学中一种现象,当电流通过置于磁场中的导体或半导体材料时,会在垂直于电流和磁场方向上...
霍尔开关传感器模块是一种在电子工程领域广泛应用的设备,它主要基于霍尔效应来检测磁场的变化,从而实现对磁场强度或方向的测量。这个模块通常包含一个霍尔效应传感器(如题目中提到的3144型号),以及必要的电路...
### 霍尔开关集成电路SDC319详细介绍 #### 概述 SDC319是一款由绍兴光大芯业微电子有限公司生产的高性能霍尔开关集成电路,它将霍尔感应与输出驱动集成于一体,主要应用于单相直流马达控制系统。这款芯片的特点在于...
本篇文章将重点介绍型号为A3141的霍尔开关,这是一种高性能、高稳定性的霍尔效应开关,特别适用于高温环境下的应用。 #### 二、产品特性 - **工作温度范围**:该系列霍尔开关(包括A3141、A3142、A3143、A3144)...
### A04E开关式霍尔传感器的工作原理与应用 #### 一、霍尔传感器概述 霍尔传感器是一种常见的磁敏传感器,广泛应用于各种电子设备和自动化系统中。A04E型号的开关式霍尔传感器是其中的一种类型,它能够感知到磁场...
传感器是一种能够感受规定的被测量,并按照一定的规律转换成可用输出信号的器件或装置。数控机床是一种装有程序...主要研究霍尔开关在数控车床四工位可转位刀架中的应用,通过霍尔开关实现四工位刀架中4个刀位的定位。
一般来说,霍尔元件要么装在产品上就能用,要么装在产品上就不能用,如果装上去,用了一段时间,发现霍尔元件不工作、性能不稳定或损坏了,那是因为霍尔元件长期在不适合的环境下导致的,本文总结几个致使(导致)霍尔...
### 全极性霍尔传感器HAL148低功耗霍尔开关 #### 一、HAL148全极霍尔开关概述 HAL148全极霍尔开关是一种先进的低功耗霍尔元件,其核心是采用了混合信号CMOS技术,这使得它能够在极低的功耗条件下提供稳定的性能。...
本教程将围绕“huoerkaiguan.rar_proteus_霍尔 proteus_霍尔开关”这个主题,详细介绍如何在Proteus环境中使用霍尔开关进行C51编程,并通过串行通信向个人计算机(PC)发送数据。 霍尔开关是一种基于霍尔效应的磁性...
一、霍尔开关原理--简介 霍尔开关(Hall switch)又称霍尔数字电路,是一种新型的电器配件,由反向电压保护器、精密电压调节器、霍尔电压发生器、差分放大器、施密特触发器、温度补偿器和互补型集电极开路...
霍尔开关是一种基于霍尔效应的传感器,广泛应用于各种电子设备和自动化系统中,用于检测磁场的变化并将其转化为电信号。这种传感器具有响应速度快、无瞬态抖动、精度高和寿命长等优点,尤其适合在需要精确测量或控制...
霍尔元件开关特性测量电路是一种用于检测霍尔元件在不同磁场强度下开关状态的装置,主要涉及了霍尔效应和光耦合技术。霍尔元件是基于电磁学中的霍尔效应,即当电流通过置于磁场中的导体时,导体两侧会产生一个与磁场...
霍尔接近开关是一种广泛应用在工业自动化领域的传感器,它利用霍尔效应来检测物体的接近程度。本文将深入探讨霍尔接近开关的标识及其含义,帮助读者理解和使用这种设备。 霍尔效应是物理学中的一个现象,当一个磁场...