|
发表于 2010-8-22 18:05:51
|
显示全部楼层
【楼主位】 timegate 墨鸢
攻略的69页中间原文如下:
-------------------------------------------------------------------------------------------------------------
(2)第334~446行:测试六个MOSFET 的短路特性。
(main.c的void MotorTon(void)函数的第334~346行有两个用意:一是看看是否有管子已被击穿,二是看看场效应管的开关特性是
否足够陡峭。现分析如下:第336,337行打开A相的下单臂(即NA-管),并测一下电流。此时,电流应该是极小,但是如果测到大电流,则说明NA+管已是击穿状态。然后第338~340行先关断所有管,然后延时一下,再打开A相的上单臂,在第341行测电流时也应该是极小,如果测到大电流,说明可能有两种情况:1. NA-场效应管已是击穿状态,2. NA-场效应管的下降沿过于缓慢,以至于NA+都打开了,NA-还没彻底关断。如果测到大于0.5A的大电流,不管哪种情况,都会在343行将局部变量anz设为4,表明故障点,并通过串口发给上位机。
--------------------------------------------------------------------------------------------------------------------
V0.41版本BL-ctrl相应代码如下:
334: for(i=0;i<t;i++)
335: {
336: LOW_A_EIN;
337: DelayM(1);
338: FETS_OFF;
339: Delay(5);
340: HIGH_A_EIN;
341: DelayM(1);
342: FETS_OFF;
343: if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); FETS_OFF; break;}
344: Delay(5);
345: }
346:Delay(10000);
此段代码用来测试NA+与NA-场效应管是否已坏。但是337行调用DelayM(1)测NA-场效应管单独导通时电流,341行同样调用DelayM(1)测试NA+场效应管单独导通进电流。而DelayM(1)的返回值并没有利用起来(有利于判断是上管还是下管)。另外,343行的判断是有问题的。因为如果337行的检查没有通过,但341行的检测通过了,即上管的strom不满足> grenze + RuheStrom,但下管的strom满足> grenze + RuheStrom满足,则此段程序仍然视为通过检测。所以,如果上管导通时,电流变大,说明下管关断能力不强或是已坏。当关断上管,轮到发信号给下管使其导通时,尽管可能下管已坏,但如果上管关断得好,此时测得电流并不大。会被视为A的上下管都没有问题,通过。实际上上管存在问题。这个可能性是存在的。
所以,判断语句最好应使用上下管测得的最大电流值作为判断依据。即343行判断语句中不应使用Strom,而应使用Strom_max,而且在使用前和使用后应对Strom_max清零。以便取得的是A管上下管测试时取得的最大电流值,且在对B管进行测试前清零。
以上不知妥否? |
|