车窗标定工作流程

何为标定

标定简单来说就是修改防夹参数来适配对应的车型,所有的防夹的参数在vers_userdef.h文件中定义。
#标定内容

  1. 位置
    • 软停位置,上软停
    • 短降位置
    • 4mm防夹区域
    • 200mm防夹区域
  2. 距离
    • 调速距离
    • 反转距离
    • 车窗的总行程
  3. 防夹力
    • 10v防夹阈值
    • 12v防夹阈值
    • 14v防夹阈值
    • 16v防夹阈值
  4. 累计n次没有上堵转操作的位置误差,只是测试优化,并不算标定
    上述是静态标定,不需要在路面上跑,此外还包含动态标定的内容,动态内容暂不在此处讲述。

如何标定位置和距离

我们程序使用电机的纹波数来表示位置的,而实际中是用多少mm来表示位置,那么我们就需要将实际中的位置转换成程序里面的纹波,这就需要我们算出两者之间的转换关系。
问题是我们怎么确认这个实际距离和纹波的比例关系,其实我们可以动手量一下车窗从上堵转的位置下降到下堵转的位置,观察总共走了多少mm的距离;
我们首先以车窗的上堵转位置为坐标轴的0点,往下为正方向;
同样的,再利用编译器观察纹波,从坐标轴的0点,往下共走了多少纹波(代码里面的WDFS_RamWLContext.MotorPosition变量表示纹波)。
比如通过以上的方法,我们知道走350mm的距离,用了3500个纹波,那么对应一个纹波就是350mm/3500 = 0.1mm。
不过注意的是我们0点的位置的纹波数并非是0,而是96,为什么呢。这么设计当然是为了允许有96*0.1mm=9.6mm的误差,因为我们检测到纹波位置在0就会失去防夹功能。这里不明白暂时也不影响位置的标定。
当然要准确的计算比例,我们最好直接向客户方咨询车窗的实际行程是多少毫米,客户提供信息一般是前门426+/-2.5mm;后门317 +/-2.5mm
有了这个关系,我们标定位置无非就是实际位置转换成纹波。
比如需求短降位置是20mm,那么转换成纹波就是20/0.1=200纹波,不过不要忘了我们坐标轴的零点是96纹波,所以短降位置应该是200+96=296纹波。
另外还要注意,位置是相对坐标轴的零点来说,距离不是相对坐标轴的零点来说的。
对应的防夹参数列举如下:
• 下软停参数:WDFS_RamWLContext.LowSoftStopPosition
• 车窗的最大行程参数:WDFS_RamAPConnex.MaxWdwLgth
• 上软停参数(程序固化,胶条位置-50):
在这里插入图片描述
• 4mm防夹区域参数:WDFS_RamWLContext.SealPosition(为什么是胶条的位置呢?这只是一个名字,无需太过纠结,把它当4mm位置就好)
我们看他是怎么设置这个变量的:
下面展示一些 内联代码片

void SEAA_CallBackWindowInitialized(uint8 SEAA_MotorId)
{
  Seaa_SetSealPosition(SEAA_MotorId, APIA_GetSealPosition_ref(SEAA_MotorId) + APIA_GetHMEHighThrshld(SEAA_MotorId) + APIA_ZeroPosition));
}

APIA_ZeroPosition:就是0点纹波数96,;
APIA_GetHMEHighThrshld:这个可以看做是胶条的宽度
APIA_GetSealPosition_ref:这个就看做是胶条以下4mm距离对应的纹波数,因为最后我们会把物体夹到胶条
• 200mm防夹区域参数:WDFS_RamAPSeal.APArea_LowThld,这里的200mm是相对夹到最上面的点来说的
• 调速距离:WDFS_RamWL_MC_DrvConf.SStopStartPos,为什么说是距离不是位置,因为上升的时候是在(零点位置+调速距离)开始减速的,下降的时候是在(下堵转位置-调速距离)开始减速的,它都不是相对0点的位置,所以不叫位置
• 反转距离:WDFS_RamAPConnex.ReversalDist,反转距离也不是相对零点,而是相对反向运动的位置
当然上面都是理论推算的纹波,实际上对应的纹波数可能会更大的,这就需要实际测量距离再调整了。

标定防夹力原理

我们采样到电机的电流,而电机单位时间内的电流变化快慢可以反映电机力的大小,我们理想的电流曲线大概是这样的:
在这里插入图片描述

○1:电机的启动阶段,启动阶段电流是突然增大的,试想一下踩自行车,刚开始是不是要很用力,电机一样道理
○2:电机的运行阶段,正常运行基本上电流是稳定不变的,试想一下踩自行车,踩起来是不是力度都基本一样,电机一样道理
○3:电机的堵转阶段,电流比起启动更大,试想一下踩自行车,木棍卡主车轮毂了,需要拼尽全力
当然上述只是理论的电流曲线,车窗在运行过程中不可能做到阻力均匀的,所以○2基本上不可能是平缓的,来个实际的电流曲线,图中蓝色:
在这里插入图片描述

电流曲线的越区域理想型的曲线,标定就越容易。

言归正传,为什么要标定防夹力,因为根据GB XX国标要求,车窗防夹力必要要小于100N。那么我们就需要控制这个防夹力满足这个要求。
怎么控制呢,因为电流的单位时间内的变化率可以反映力,所以我们让电流的单位时间内的变化率大于某个固定的值(后面称为阈值)就反转,这样就能控制力度小于100N了。
上图的紫色曲线就代表了单位时间内电流的斜率,青色的曲线代表上面说的固定值,为什么不是一条直线,这个后面再说明,先把它当做是直线。
又因为不同的电压会影响车窗的电流大小,根据欧姆定律I=U/R,我们假设温度相同,那么电阻是相同的,增大电压时,电流是不是增大了呢。
那电流都增大了,如果我们还用同一个固定的值来比较,是不是不太妥。
假如因为温度高,电阻变小了,相当于紫色的线降低了,青色的线还是不变,那要超过青色的线,是不是比温度低的时候更难了,这就导致力在不同的温度表现有所差异。
怎么解决这个问题呢,那么根据不同的电压设置不同的阈值,就可以避免这个问题?所以程序会有以下这些阈值参数:

10V的阈值参数,StdAPCriterionThreshold10
12V的阈值参数,StdAPCriterionThreshold12
14V的阈值参数,StdAPCriterionThreshold14
16V的阈值参数,StdAPCriterionThreshold16

为什么要做高低温,读完上述后,这个问题就好理解了。因为相同的电压,不同的温度电阻特性是不一样的,温度低电阻小,电流就自然大;温度高,电阻大电流就自然小。所以我们常温标定防夹力一般是取60-70N,是为了预留一定的空间,避免高温或者低温防夹力会超出100N的现象。

误差是如何产生的

我们先认识一下什么是纹波,纹波就是直流电中的交流成分。类似我们电机的脉冲信号,如下图的样子:
在这里插入图片描述

我们电机经常用脉冲来计算位置,但在检测脉冲的过程中,可能是由于软件的算法或者某种东西对脉冲产生了干扰,导致识别不出该脉冲。
假设现在一个脉冲等于1mm,那么100个脉冲就是100mm,但由于上述的原因,期间少算了一个纹波,那么电机实际走了100mm,软件却识别到走了99mm,那么误差就是1mm。
假设现在车窗从同一起点(上堵转位置)运动到同一终点(下堵转位置),每次上堵转时脉冲的位置计为0,第一次到下堵转位置时脉冲数为100,期间没有少算纹波;第二次到下堵转位置时脉冲数为99,那么前后两次的误差是-1。
在这里插入图片描述

累计误差是如何定义的,我们的程序在上堵转的位置会重置该位置为坐标轴0点的纹波,因此这里说的累计误差是指不到上堵转的位置操作累计N次前后,最终到达同一个位置(下堵转位置)时纹波计数的差值。

补偿是如何产生的

为什么需要补偿,补偿就是在原来的阈值基础上固定的量,例如,玻璃入胶条的时候,阻力是会慢慢增加的,如果我们从底部上升到堵转的时候,电流的变化率都和一个阈值比较,那么入胶条后,因为阻力的增大,是很容易就超过这个阈值的。
因此,我们在入胶条后需要把阈值增大来避免电流的变化率超过阈值,从而导致反转。
如下图,我们在入胶条前一段时间会将阈值提高到○1,进入胶条后再提高到○2,胶条内提高到○3。
在这里插入图片描述

为什么设置三级补偿,其实也可以一步到位提高到○3,这样会有什么问题呢。
如下图,假设在入胶条之前是防夹区域,那运动过程中难免会有误差产生,当误差产生的时候,导致本来在入胶条的时候,实际却还在4mm防夹区域,如果这个时候胶条补偿一下子过大,如红色的线,电流的变化率就无法超过阈值,导致不能够防夹;但如果分为三级的补偿量,就不至于电流的变化率就无法超过阈值,如蓝色的线。
所以胶条补偿不会一下子补偿到位就是为了避免这个问题,因为电流的变化肯定是渐变的。
在这里插入图片描述

理解了胶条补偿,那么其他的电压补偿、电流补偿、开门补偿、短升补偿其实都是为了应对电流的波动导致容易超过阈值的问题。

学习的引入

根据前面的描述,我们知道理想的电流曲线的样子。但是在实际中,电流曲线肯定不是理想的,比如像下面这样:
在这里插入图片描述

这已经算是比较接近理想的曲线了,正常情况下,如果电流曲线是理想的,我们就直接算出电流的斜率,用这个斜率和阈值比较就可以了。
但是如果电流曲线比较糟糕的情况下,可能因为车窗行程过程中,某些地方阻力比较大,那么就容易因为车窗的阻力不均匀算出的斜率也比较大,导致很容易超过阈值。
怎么规避这个问题呢,那就是学习车窗的电流曲线斜率,把上次车窗的电流曲线斜率记录下来,用现在算到的曲线斜率和学习到的曲线斜率做差值运算,那么最终得出来的曲线斜率就会区域理想的状态。
这就是为什么我们调试的曲线有三条的原因,如下图:
DDM_DevelopMessage_TX2::DEBUG_CartoExtended_pre就是学习到的电流斜率, 图中的青色;
DDM_DevelopMessage_TX3::DEBUG_PresentTorque_array就是当前的电流斜率,图中的紫色;
DDM_DevelopMessage_TX2::DEBUG_ObstaCriterion_array就是当前的电流斜率和学习到的电流斜率的差值,图中红色;可以看到引入学习后,红色的曲线基本是变化范围是比较小的。
在这里插入图片描述
在这里插入图片描述

总的来说,防夹的标定是为了让夹力的大小在规定的范围内;同时引入补偿的概念来避免电流波动导致车窗误反的问题。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值