Keypad调试总结

KEYPAD调试总结

一、原理.......................................................................................................... 1

二、实现.......................................................................................................... 2

三、Keypad驱动调试时遇到的问题 ............................................................. 4

四、总结.......................................................................................................... 4

一、原理

本次调试机台为C55, 6020平台。没有用全键盘芯片,keypad matrix通过GPIO pin来实现。

上图为5*5的matrix,C55采用的5*10的matrix。

正常情况下(未按下任何键),drive pin全为low,sense pin全为high。通过上图知道,这些sense pin 先非,然后通过或非门输出KEYSENSE_INT,此时为high。

当一个button按下,一个sense pin和drive pin导通,变为low,通过或非门,KEYSENSE_PIN为low,触发KEYSENSE中断。

QSC interrupt controller 接收到中段以后,enable polling,开始扫描keypad。扫描动作开始,先将所有的drive pin设置为high,然后将drive pin逐个设置为low。在每个drive pin 设置为low时,检测sense pin的状态,如果为low,表明当前drive pin和sense pin组合的button被按下。扫描期间,记录每个按键有否被按下。扫描结束以后,将所有的drive pin 设置为low。然后查询每个按键的是否被按下的记录,如果有按键被按下的记录,则不允许sleep。隔断时间又开始扫描keypad。只有检测到没有任何按键按下,允许sleep,disable polling,不再扫描。Disable polling要设置KEYPRESS ISR。KEYPRESS ISR调用enable polling。这样下次有按键按下,KEYSENSE中断触发,又开始扫描keypad。如此循环。

二、实现

主要通过以下几个函数来实现:

1.Keypad_init:

将所有的matrix按键状态初始化为KS_KEY_UP,即没有按下。(如果此点没有键

值,设置为KS_NO_KEY)

将Power键初始化为KS_KEY_UP。

将key buffer 的read index和write index初始化为0

通过pm_pwr_key_init安装pm_pwr_key_pressed_isr.此ISR会调用

keypad_enable_polling()。

将keypad_polling 标志初始化为true

设置定时器时钟,让keypad_scan_keypad周期性地被调用。

初始化keysense line,让其可以产生中断

设置keypad背光

2. keypad_enable_polling

通过rex_clr_sigs函数告诉sleep task,当前不可以sleep

如果keypad_polling为true,没有动作。如果为false:

清除keypress detection ISR:tramp_set_isr( TRAMP_KEY_SENSE_ISR, NULL )

将keypad_polling 标志初始化为true

设置定时器时钟,让keypad_scan_keypad周期性地被调用

3. keypad_disable_polling

通过rex_set_sigs函数告诉sleep task,当前可以sleep

如果keypad_polling为false,没有动作。如果为true:

取消键盘扫描定时器时钟,keypad_scan_keypad不会周期性地被调用

将keypad_polling 标志初始化为false

设置Keypress ISR :

tramp_set_isr( TRAMP_KEY_SENSE_ISR, keypad_keypress_isr )

4. keypad_scan_keypad

设置sleep_allowed初值为true(此标志决定是否执行keypad_disable_polling) 设置power_key_pressed初值为false

调用keypad_enable_polling()(个人觉得这一步骤没有必要。因为keypad_scan_keypad是通过keypad_enable_polling()来注册的,此时keypad_polling为true,再次调用keypad_enable_polling()虽然不会重复注册keypad_scan_keypad本身,但也只是通过rex_clr_sigs函数告诉sleep task当前不可以sleep)

将键盘matrix的每个键按下状态初始设为false,即当前没有按下。

将drive pin 全部pull up,并拉high

将drive pin逐个拉low,每个drive pin拉low时检测sense pin,如果为low,将其按下状态设置为true,表明当前被按下。

扫描结束后将所有的drive pin pull down

根据每个matrix按键之前的状态来决定通过KEYPAD_PASS_KEY_CODE发往key buffer的keycode。如果当前有按键被按下,不管其之前的状态时up还是wait_up,将sleep_allowed设置为false。

根据power按键之前的状态来决定通过KEYPAD_PASS_KEY_CODE发往key buffer的keycode。如果当前power键被按下,不管其之前的状态时up还是wait_up,将sleep_allowed设置为false。

通过判断key buffer的read index和write index是否相等来设置sleep_allowed标志。如果二者不等,sleep_allowed=false。(write index是通过pass keycode来累加的,

read index是UI通过get keycode来累加的。通过看log发现二者一直相等)

如果没有任何matrix、power按键被按下,且read index=write index,则调用keypad_disable_polling()终止polling。

5. keypad_keypress_isr

当中断到来,通过clk_unexpected_enable();来重新开启定时器时钟

通过keypad_enable_polling()开始周期性扫描keypad(通过注册keypad_scan_keypad实现)

三、keypad 驱动调试时遇到的问题

之前支持全键盘芯片,send key是通过GPIO pin接入的。关闭宏FEATURE_USE_QWERTY_KEYPAD,修改key code ,修改bit mask。Build之后发现只有send 键有反应,其他的没反应。查找code,发现是没有关闭宏GPIO_AS_KEY。关闭之后,发现只有power键有反应,其他按键还是没有反应。在code里加入MSG信息,通过QXDM查看。发现只有power key按下才扫描键盘。查找code,发现是没有打开tramp_set_isr来设置keypress isr。(之前是通过GPIO_AS_Key用send key来触发中断的,所以此函数被屏蔽。后来关闭GPIO_AS_Key宏,没有打开此函数)

四、总结

加入MSG信息,通过QXDM来查看信息,加深了对主要函数的理解。

调试中,以为中断一定由GPIO来触发。在修改中一直没有关闭GPIO_AS_KEY宏,而且重新定义了SEND_KEY_GPIO。导致了只有send key触发中断。以后一定要看明白spec中断的机制,看清电路图的接法。

 

第二篇:DEH调试总结

李风奎

概述

汽机电液控制系统(DEH)组成分为电气部分和液压部分。主要目的是控制汽轮发电机组的转速和功率,从而满足电厂供电的要求。运行方式有CCS协调控制、ATS自启动、自动控制、手动控制等。机组在启动和正常运行过程中,DEH接收CCS指令或操作人员通过人机接口所发出的增、减指令,采集汽轮机发电机组的转速和功率以及调节阀的位置反馈等信号,进行分析处理,综合运算,输出控制信号到电液伺服阀,改变调节阀的开度,以控制机组的运行。

DEH的调试工作分为静态调试和动态投运两个阶段。静态调试工作主要有:盘间电缆、机柜至就地信号检查;机柜单调并检查至就地电磁阀;机柜上电,内部逻辑检查;LVDT正负方向、线性检查,伺服阀整定;转速信号仿真,转速卡测试,检查后备超速定值;混仿,进行挂闸,暖阀/暖机,升速、并网、带负荷试验、112%超速试验、阀门活动试验、试验主汽压控制、一次调频等功能、DEH手动、自动的无扰切换、ATC功能测试;阀门关闭试验。 动态投运工作主要有:DEH阀门活动性试验、阀门严密性试验、电超速试验。

问题及解决方案

问题一、机组在冲转阶段,发现1#高调门打不开。由于工期紧张要求不停机处理。 分析:首先检查压力油截止阀是否打开,快关电磁阀是否在失电状态、阀芯是否在正确位置。然后在现场用电池对伺服阀施加3V直流电压,检查伺服阀芯。接下来在现场用手触摸油路管道,发现压力油管道是凉的,安全油和回油管道是热的。证明安全油是流动的,此油动机并没有建立安全油压使卸载阀关闭,关断阀打开,一直处于安全油泄漏状态。在对调节保安油路系统图分析后初步判断漏油点在盘式卸载阀位置将听棒靠在盘式卸载阀位置能听到嘶嘶的声音,得到了进一步证明。

处理:为保证一次性排除所有可能故障点,最终确定处理方案为更换盘式卸载阀块、清洗节流孔、更换伺服阀和关断阀。关键问题在于如何隔离压力油、安全油、回油。压力油可以通过截止阀隔离,安全油可以通过让快关电磁阀带电的方式隔离。但是回油是无法隔离的,1#高调门位置在中调门的下方几米的位置,使得中调门的回油会产生一定的静压,如果回油量很大的话,在拆卸管道过程中会发生喷油事故并对系统造成较大冲击。现场对在线处理的

可行性展开讨论,最终确定方案为:故障处理期间,稳定主汽压、主汽温、负荷等各项参数,尽量使机组保持稳定,让中调门尽量不做调节,减少产生的排油。回油管道拆卸时,做好打闸准备。强制伺服阀指令为-5%,防止故障处理好阀门突然打开。检查快关电磁阀确已带电,压力油截止门确已关闭。故障处理完毕,恢复过程如下,首先使快关电磁阀失电,打开压力油截止阀。然后以5%的幅度逐渐放大本调门指令直到与系统阀位指令相等,解除强制。1#高调门恢复正常。

问题二、机组在168小时试运阶段,在CRT上发现3#高调门阀位反馈往下掉为0%。 分析:去电子间DEH机柜测量伺服阀控制电压为2V,就地观察发现阀门实际位置为全开,LVDT拉杆已经脱落。因此,LVDT反馈的行程信号为0%,而阀位指令不为零,偏差的作用使得高压油不断进入油缸下腔直到阀门全开。

处理:168试运期间的特点是满负荷试运,期间只有负荷的小范围波动,而#3高调门全开对此并不产生影响。因此,为保证机组安全稳定、保证工期按时完成,确定处理方案为:机组168小时试运通过后再做处理,强制本调门行程反馈为-50%,期间保持机组安全稳定运行,确保负荷不出现大幅度的波动。168小时试运结束后处理过程如下:

第一步是要把阀门全关,这样才能连接LVDT连杆。关键是如何实现阀门缓慢关闭,不会引起超压、负荷突变等系统冲击。方案为:负荷降为800MW,机组控制切为TF控制方式。强制反馈信号为0%,强制阀位指令为-0.01%,这样以较小的偏差产生较小的控制电压,使油动机以最小量排油,从而实现阀门缓慢下关。期间TF方式通过控制其它调门来稳定主汽压力。阀门关闭后连接LVDT连杆。第二步是系统恢复。过程为:解除对反馈的强制,以5%的幅度强制逐渐接近实际阀位指令信号。解除强制,系统恢复正常。

问题三、3#与4#高调门现场电缆放反

分析:从机头往发电机方向看,从左至右主汽门依次为1、2、3、4,而高调门的顺序为1、2、4、3。以前的惯性思维误导了施工单位,导致两个阀门的电缆整体放反。

处理:并不能简单的在逻辑中将3改为4,这样3#阀门还是在用着4#的流量特性曲线。阀门的流量特性1#与4#、2#与3#即对角线是一致的。综合比较最好的解决方案是在就地整体互换电缆,包括伺服阀、LVDT、快关电磁阀、行程开关等。

从机头向发电机方向看

问题四、盘车投入后发现DEH无转速显示,就地转速表显示为2r/min。

分析:在DEH机柜,拆除外部电缆,用信号发生器加频率信号,确认机柜正常。就地测量探头引出的三根线两两之间的电阻分别为:红蓝 0.9MΩ,红白0.4MΩ,白蓝1KΩ。均为正常。检查就地转速模块接线亦无误。最终确定故障点在就地的转速模块。

处理:就地转速模块内有三块转速卡件,用以输出九路转速。当时3#机处于停机状态,更换3#机卡件后正常,发现4#机卡件拨码开关均未拨码。重新拨码后转速显示正常。

问题五、机组启动过程中,发生A、B小机均跳闸。就地检查发现两台小机油动机与阀门连杆弯曲变形严重。

分析:小机油动机为双侧进油,即跳闸后油动机下腔室仍有油压往上顶住阀杆以保证调阀全关。重新测量行程发现,调阀行程比油动机行程多2cm,由于油动机与阀门连杆的上下移动并不是垂直上下,富余行程过多加上跳闸时的向上的过大冲击力容易使连杆对油动机产生较大的向外水平分力。

处理:更换新油动机。将油动机停留至上止点,与阀门阀杆连接后回拉3mm后定零位。

问题六、远方发50%指令,反馈为44%,误差超过允许值。

分析:中调门1、2零位电压只能到1.9V,导致阀门线性不好,发50%指令反馈44%。现场检查发现LVDT型号不对,行程太长。

处理:重新发货0~300mmLVDT,零位电压可调至5V。

问题七、阀切换时,主汽门打不开

分析:汽轮机启动方式为高压缸启动方式,2950r/min时阀切换原逻辑为,主汽门以一定的速率往上开,此时转速由高调门调节,维持转速稳定。由于主汽门前后存在较大压差,造成主汽门无法开启。

处理:将逻辑修改为,阀切换时,首先将高调门关至4%,然后将主汽门迅速全开。最后将高调门转为自动调节方式。

相关推荐