📄 lzkfunc.lst
字号:
383
384 uint8 bdata SYNCx_FLAG = 0x00;
385 sbit SYNCc_LastVal = SYNCx_FLAG ^ 7;
386 sbit SYNCc_CurrVal = SYNCx_FLAG ^ 6;
387 sbit SYNCb_LastVal = SYNCx_FLAG ^ 5;
388 sbit SYNCb_CurrVal = SYNCx_FLAG ^ 4;
389 sbit SYNCa2_LastVal = SYNCx_FLAG ^ 3;
390 sbit SYNCa2_CurrVal = SYNCx_FLAG ^ 2;
391 sbit SYNCa_LastVal = SYNCx_FLAG ^ 1;
392 sbit SYNCa_CurrVal = SYNCx_FLAG ^ 0;
393
394 uint8 bdata SYNCx_ErrFLAG = 0x00;
395 sbit SYNCabcMoniEN = SYNCx_ErrFLAG ^ 6;
396 sbit SYNCbAftSYNCaRiseEdgeTimCntEN = SYNCx_ErrFLAG ^ 6;
397 sbit SYNCcAftSYNCaRiseEdgeTimCntEN = SYNCx_ErrFLAG ^ 5;
398 sbit SYNCbAftSYNCaErrEVT = SYNCx_ErrFLAG ^ 4;
399 sbit SYNCcAftSYNCaErrEVT = SYNCx_ErrFLAG ^ 3;
400 sbit SYNCaErrEVT = SYNCx_ErrFLAG ^ 2;
401 sbit SYNCbErrEVT = SYNCx_ErrFLAG ^ 1;
402 sbit SYNCcErrEVT = SYNCx_ErrFLAG ^ 0;
403
404 */
405 if( SYNCabcMoniEN ) // 励磁同步检测功能是否使能.
406 {
407 // 1-----1 1-----1 1-----1
408 // SYNCa_| |_____| |_____| |___________
409 // ______0_____10____0_____10____0_____10__________0(0mS); 20(12.5mS)
410 // 1-----1 1-----1 1-----1
411 // SYNCb_____| |_____| |_____| |_______13(8.125mS);30(18.75mS);
412 // _________6.67__16.7__6.67__16.7__6.67__16.7_____
413 // 1-----1 1-----1 1-----1
414 // SYNCc_________| |_____| |_____| |___
415 // _____________13.3__3.3___13.3__3.3___13.3__3.3__26(16.25mS);11(6.875mS);
416
417 /*****************************************************************
418 *** A相同步信息处理:检测SYNCa高电平或低电平持续时间,
419 *** 在SYNCa上升沿启动SYNCb滞后SYNCa计时,
420 *** 检测间隔时间625uS
421 *****************************************************************/
422 SYNCa2_LastVal = SYNCa2_CurrVal;
423 SYNCa2_CurrVal = SYNCa;
424 if( SYNCa2_CurrVal != SYNCa2_LastVal ) // SYNCa电平变化.
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 8
425 {
426 if( (SYNCaSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCaSameLevlTimCNT < SYNCxHalfPeriTimMIN)
- )
427 { // SYNCa同一电平时间太长或太短
428 SYNCaErrTimCNT++;
429 if( SYNCaErrTimCNT >= SYNCxErrTimMAX )
430 {
431 SYNCaErrTimCNT = 0;
432 SYNCaErrEVT = 1; // 置位SYNCa错误标记
433 }
434 }
435 else
436 SYNCaErrTimCNT = 0; // 复位SYNCaErrTimCNT
437
438 if( SYNCa2_CurrVal == 1 ) // SYNCa上升沿.
439 {
440 SYNCbAftSYNCaRiseEdgeTimCntEN = 1; // SYNCb上升沿滞后SYNCa上升沿计时使能.
441 SYNCcAftSYNCaRiseEdgeTimCntEN = 1; // SYNCc上升沿滞后SYNCa上升沿计时使能.
442 }
443 SYNCaSameLevlTimCNT = 0; // 复位SYNCaSameLevlTimCNT.
444 }
445 else // SYNCa电平保持不变
446 SYNCaSameLevlTimCNT++;
447
448 if( SYNCbAftSYNCaRiseEdgeTimCntEN == 1 )
449 SYNCbAftSYNCaRiseEdgeTimCNT++; // SYNCb上升沿滞后SYNCa上升沿计时
450 if( SYNCcAftSYNCaRiseEdgeTimCntEN == 1 )
451 SYNCcAftSYNCaRiseEdgeTimCNT++; // SYNCc上升沿滞后SYNCa上升沿计时
452
453 /*****************************************************************
454 *** B相同步信息处理:检测SYNCb高电平或低电平持续时间,
455 *** 在SYNCb上升沿检查SYNCb滞后SYNCa计时结果是否在范围内,
456 *** 检测间隔时间625uS
457 *****************************************************************/
458 SYNCb_LastVal = SYNCb_CurrVal;
459 SYNCb_CurrVal = SYNCb;
460 if( SYNCb_CurrVal != SYNCb_LastVal ) // SYNCb电平变化.
461 {
462 if( (SYNCbSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCaSameLevlTimCNT < SYNCxHalfPeriTimMIN)
- )
463 { // SYNCa同一电平时间太长或太短
464 SYNCbErrTimCNT++;
465 if( SYNCbErrTimCNT >= SYNCxErrTimMAX )
466 {
467 SYNCbErrTimCNT = 0;
468 SYNCbErrEVT = 1;
469 }
470 }
471 else
472 SYNCbErrTimCNT = 0; // 复位SYNCaErrTimCNT
473
474 if( SYNCb_CurrVal == 1 ) // SYNCb上升沿.
475 {
476 SYNCbAftSYNCaRiseEdgeTimCntEN = 0;// 3.75 < 6.67 < 10;
477 if( (SYNCbAftSYNCaRiseEdgeTimCNT < 6) || (SYNCbAftSYNCaRiseEdgeTimCNT > 16) )
478 {
479 SYNCbAftSYNCaRiseEdgeTimCNT = 0;
480 SYNCbAftSYNCaErrEVT = 1; // 同步相序错误
481 }
482 SYNCbAftSYNCaRiseEdgeTimCNT = 0;
483 }
484 SYNCbSameLevlTimCNT = 0; // 复位SYNCaSameLevlTimCNT.
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 9
485 }
486 else
487 SYNCbSameLevlTimCNT++;
488
489 /*****************************************************************
490 *** C相同步信息处理:检测SYNCc高电平或低电平持续时间,
491 *** 在SYNCc上升沿检查SYNCc滞后SYNCa计时结果是否在范围内,
492 *** 检测间隔时间625uS
493 *****************************************************************/
494 SYNCc_LastVal = SYNCc_CurrVal;
495 SYNCc_CurrVal = SYNCc;
496 if( SYNCc_CurrVal != SYNCc_LastVal ) // SYNCc电平变化.
497 {
498 if( (SYNCcSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCcSameLevlTimCNT < SYNCxHalfPeriTimMIN)
- )
499 { // SYNCa同一电平时间太长或太短
500 SYNCcErrTimCNT++;
501 if( SYNCcErrTimCNT >= SYNCxErrTimMAX )
502 {
503 SYNCcErrTimCNT = 0; // 复位SYNCcErrTimCNT
504 SYNCcErrEVT = 1;
505 }
506 }
507 else
508 SYNCcErrTimCNT = 0; // 复位SYNCcErrTimCNT
509
510 if( SYNCc_CurrVal == 1 ) // SYNCa上升沿.
511 {
512 SYNCcAftSYNCaRiseEdgeTimCntEN = 0;// 9.375 < 13.33 < 16.25;
513 if( (SYNCcAftSYNCaRiseEdgeTimCNT < 15) || (SYNCcAftSYNCaRiseEdgeTimCNT > 26) )
514 {
515 SYNCcAftSYNCaRiseEdgeTimCNT = 0;
516 SYNCcAftSYNCaErrEVT = 1; // 同步相序错误
517 }
518 SYNCcAftSYNCaRiseEdgeTimCNT = 0;
519 }
520 SYNCcSameLevlTimCNT = 0; // 复位SYNCcSameLevlTimCNT.
521 }
522 else
523 SYNCcSameLevlTimCNT++;
524
525
526 /*****************************************************************
527 *** 失控检测
528 *****************************************************************/
529 /*
530 #define UFCO_OutOfCtrlTimMAX 5 //
531
532 uint8 xdata UFCO_LowLevlTimCNT = 0;
533 uint8 xdata UFCO_OutOfCtrlTimCNT =0;
534 uint8 xdata UFCO_01SecTimCNT = 0;
535
536 UFCO_LastVal
537 UFCO_CurrVal
538 UFCO_01SecTimCntEN
539 UFCO_OutOfCtrlEVT
540 */
541 if( OutOfCtrlMoniEN ) // 失控检测功能是否使能.
542 {
543 UFCO_LowLevlTimCNT++; // Increase 1 Every 625uS.
544
545 UFCO_LastVal = UFCO_CurrVal; // UFCO为过零比较.
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 10
546 UFCO_CurrVal = ~UFCO; // 比较器倒相!!!硬件设计错误.
547 if( UFCO_CurrVal != UFCO_LastVal )
548 {
549 if( UFCO_CurrVal == 0 ) // UFCO下降沿.
550 UFCO_LowLevlTimCNT = 0; // 复位UFCO低电平计时器.
551 else // 只在UFCO上升沿判断UFCO_LowLevlTimCNT的值.
552 {
553 if( UFCO_LowLevlTimCNT >= 9 ) // UFCO低电平时间超过9(5.5mS).
554 {
555 UFCO_OutOfCtrlTimCNT++; // UFCO低电平超时事件计数
556 if( UFCO_OutOfCtrlTimCNT >= UFCO_OutOfCtrlTimMAX )
557 { // 达到5次认为失控.
558 UFCO_OutOfCtrlEVT = 1; // 置位失控事件标记.
559 UFCO_OutOfCtrlTimCNT = 0;
560 }
561 UFCO_01SecTimCNT = 0; // 100mS计时器复位;不断复位使其不超时!!!
562 UFCO_01SecTimCntEN = 1; // 100mS计时器计时使能.
563 }
564 }
565 }
566
567 if( UFCO_01SecTimCntEN )
568 {
569 UFCO_01SecTimCNT++;
570 if( UFCO_01SecTimCNT >= 160 ) // 100毫秒计时超时.
571 {
572 UFCO_OutOfCtrlTimCNT = 0; // 100毫秒内没有出现另1个超过5.5毫秒的低电平.
573 UFCO_01SecTimCntEN = 0; // 本次100毫秒超时计时任务结束.
574 }
575 }
576 } // End of 失控检测功能.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -