车窗防夹算法探究
扫描二维码
随时随地手机看文章
电动车窗防夹的基本思想可以概括为:在车窗自动上升过程中,传感器检测到障碍物的存在(包括已被夹或判断有障碍物存在上升途中)。当检测到有障碍物存在时,驱动电机反转,使车窗下降一段距离,释放障碍物。本文介绍的防夹保护算法主要是通过检测电机转速的变化来实现的。
电机周期的测量
在防夹设计中,严格地说涉及到的参数应该是电机的转速。但是,在本课题中,更确切地说,检测到的不是转速,而是周期。本课题采用TImer模块里的捕捉模式来检测两个脉冲下降沿之间的时间间隔从而得到周期值。周期越大,速度就越慢,反之,周期越小,速度就越快。因此,从功能上看,两个参数的效果是一致的。为了节省微控制器的资源,就直接周期来代替速度进行防夹检测。
捕捉计算到脉冲周期与实际的脉冲周期之间的换算关系为:
TImer设置的是16预分频,重装载值为0000H,因此它的溢出周期为43ms,分辨率为2.7ms。
在周期检测中,霍尔传感器的输出脚与XC886的P3.4口相连。P3.4复用为TImer21脉冲捕获模式的输入引脚。本课题中,当霍尔传感器输入为脉冲下降沿时,TImer产生中断,并在中断程序中计算周期。具体计算流程如下:
其中,Pre_reload为前一次脉冲到达时寄存器中的值,用当前值减去前一次的值即为周期。值得一提的是,period_count这个变量。当计时器溢出一次,period_count就加一。从而避免因计时器溢出而导致周期计算错误。
实现的具体做法是:由于只需在车窗自动上升时进行防夹。所以首先先判断是否为自动上升。若是自动上升,则判断是否为第一次进入中断程序,如果是第一次进入中断,将当前计数器中的值存入变量 Pre_reload,如果不是第一次进入,则将当前计数器的值减去Pre_reload的值作为周期值,再将当前值存入Pre_reload中。留待下一次进入中断时使用。每进入一次中断就如此工作,直到收到停止命令或车窗到达顶部为止。
车窗位置的确定
车窗在上升过程中,由于存在车窗重量和窗框阻力等因素,在每个位置上的周期大小是不一样的。因此判断车窗位置也是相当重要的。从机械的角度讲,电机旋转会带动钢丝绳的运动,从而带动车窗的上下开闭。电机每旋转一定角度,钢丝绳就相应地运动一定行程,因此车窗运动的行程与电机旋转的圈数成线性关系。而电机的旋转会使得霍尔传感器产生脉冲信号,因此车窗位置也可以采用霍尔传感器和XC886CS中的计时器模块相结合的方式来测量。当电机转过一圈,计时器Timer就会捕获到霍尔信号的下降沿,从而在中断服务程序中对车窗位置作出记录。由于车窗有可能上下运动,因此车窗位置的计算不能只在车窗上升时进行,在车窗下降的时候也要作出相应的调整。因此程序在进入中断服务后首先查询车窗的状态是上升还是下降。如果是上升,则电机每转动一圈车窗位置就相应递增;如果是下降,则电机每转动一圈,车窗位置就递减。
防夹车窗算法的提出和实现
本课题采用的防夹算法是基于电机运行参数的方法。如何得到准确的运行参数即周期,是防夹算法能否实现的关键。本课题还根据实际运行中发现的算法纰漏,对算法进行优化。