⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 改猛.txt

📁 运用模糊算法和PID调节控制开关磁阻电机的调速。采用的单片机是Intel的80c196KB,编程语言为PL/M.
💻 TXT
📖 第 1 页 / 共 3 页
字号:
      DO;
        CON_8253=72H;
         T8253_1=0;
         T8253_1=00H;
        /*IF RUN_SPD>200 THEN
         DO;
          IF RUN_SPD>800 THEN DO;
         CON_8253=72H;
         T8253_1=3EH;
         T8253_1=00H;
          END;
         IF RUN_SPD>600 THEN DO;
         CON_8253=72H;
         T8253_1=20H;
         T8253_1=00H;
          END;
         IF RUN_SPD>400 THEN DO;
         CON_8253=72H;
         T8253_1=15H;
         T8253_1=00H;
          END;
         IF RUN_SPD>200 THEN DO;
         CON_8253=72H;
         T8253_1=10H;
         T8253_1=00H;
          END;


      DO CASE ORDER;
  ORDER_0: DO;
           AA=0;
           BB=1;
           CC=1;
           DD=0;
          END;
  ORDER_1: DO;
           AA=0;
           BB=0;
           CC=1;
           DD=1;
          END;
  ORDER_2: DO;
           AA=1;
           BB=1;
           CC=0;
           DD=0;
          END;
   ORDER_3: DO;
           AA=1;
           BB=0;
           CC=0;
           DD=1;
          END;
       END;
      END;

  ELSE  DO; */
       AA=1;
       BB=1;
       CC=1;
       DD=1;
     /* END; */


      END;


  ELSE DO;            /*反向停车*/
     /* IF RUN_SPD>200 THEN
      DO;
         IF RUN_SPD>800 THEN DO;
         CON_8253=72H;
         T8253_1=3EH;
         T8253_1=00H;
          END;
         IF RUN_SPD>600 THEN DO;
         CON_8253=72H;
         T8253_1=30H;
         T8253_1=00H;
          END;
         IF RUN_SPD>400 THEN DO;
         CON_8253=72H;
         T8253_1=25H;
         T8253_1=00H;
          END;
         IF RUN_SPD>200 THEN DO;
         CON_8253=72H;
         T8253_1=15H;
         T8253_1=00H;
          END;

      DO CASE ORDER;
  ORDER_0: DO;
           AA=1;
           BB=0;
           CC=0;
           DD=1;
          END;
  ORDER_1: DO;
           AA=1;
           BB=1;
           CC=0;
           DD=0;
          END;
  ORDER_2: DO;
           AA=0;
           BB=0;
           CC=1;
           DD=1;
          END;
   ORDER_3: DO;
           AA=0;
           BB=1;
           CC=1;
           DD=0;
          END;
       END;
      END;

      ELSE DO; */
       AA=1;
       BB=1;
       CC=1;
       DD=1;
    /*  END; */
      END;
        CON_8253=72H;
         T8253_1=0;
         T8253_1=00H;

    END STOP;

  /*************全角度开通输出子程序*********/
 ALL_OPEN_HSO:PROCEDURE;
         IF DIRECT=0 THEN                /*正向*/

             DO;
  DO CASE ORDER;
  ORDER_0: DO;
           AA=1;
           BB=0;
           CC=0;
           DD=1;
          END;
  ORDER_1: DO;
           AA=1;
           BB=1;
           CC=0;
           DD=0;
          END;
  ORDER_2: DO;
           AA=0;
           BB=0;
           CC=1;
           DD=1;
          END;
   ORDER_3: DO;
           AA=0;
           BB=1;
           CC=1;
           DD=0;
          END;
       END;
             END;
    ELSE DO;                   /*反向*/
         DO CASE ORDER;
  ORDER_0: DO;
           AA=0;
           BB=1;
           CC=1;
           DD=0;
          END;
  ORDER_1: DO;
           AA=0;
           BB=0;
           CC=1;
           DD=1;

          END;
  ORDER_2: DO;
           AA=1;
           BB=1;
           CC=0;
           DD=0;
          END;
   ORDER_3: DO;
           AA=1;
           BB=0;
           CC=0;
           DD=1;
          END;
       END;


         END;

           END ALL_OPEN_HSO;
 /************APC子程序*********************/
  APC_HSO_2:PROCEDURE;
 DISABLE;
      IF DIRECT=0 THEN                /*正向*/
             DO;
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=0;
           TH0=(0FFFFH-17)/100H ;
           TL0=(0FFFFH-17)-TH0*100H;
           TR0=1;

           CC=1;
           AA=1;
          END;
  ORDER_1: DO;
           S_T1=0;
           TH1=(0FFFFH-17)/100H ;
           TL1=(0FFFFH-17)-TH1*100H;
           TR1=1;
           DD=1;
           BB=1;

          END;
  ORDER_2: DO;
           S_T1=1;
           TH1=(0FFFFH-17)/100H ;
           TL1=(0FFFFH-17)-TH1*100H;
           TR1=1;
           BB=1;

           DD=1;
          END;
   ORDER_3: DO;
           S_T0=1;
           TH0=(0FFFFH-17)/100H ;
           TL0=(0FFFFH-17)-TH0*100H;
           TR0=1;
           AA=1 ;


           CC=1 ;
          END;
       END;
             END;

          ELSE DO;                    /*反向*/
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=0;
           TH0=(0FFFFH-17)/100H ;
           TL0=(0FFFFH-17)-TH0*100H;
           TR0=1;

           BB=1;
           DD=1;
          END;
  ORDER_1: DO;
           S_T1=0;
           TH1=(0FFFFH-17)/100H ;
           TL1=(0FFFFH-17)-TH1*100H;
           TR1=1;
           AA=1;
           CC=1;

          END;
  ORDER_2: DO;
           S_T1=1;
           TH1=(0FFFFH-17)/100H ;
           TL1=(0FFFFH-17)-TH1*100H;
           TR1=1;
           AA=1;

           CC=1;
          END;
   ORDER_3: DO;
           S_T0=1;
           TH0=(0FFFFH-17)/100H ;
           TL0=(0FFFFH-17)-TH0*100H;
           TR0=1;
           BB=1 ;
           DD=1 ;
          END;
       END;

             END;
             ENABLE;
    END   APC_HSO_2;
    /********************************/
APC_HSO_1:PROCEDURE;
      DISABLE;
      IF DIRECT=0 THEN                /*正向*/
             DO;
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=4;
           TH0=(0FFFFH-384)/100H ;
           TL0=(0FFFFH-384)-TH0*100H;
           TR0=1;

           CC=0;
           AA=1;
          END;
  ORDER_1: DO;
           S_T1=4;
           TH1=(0FFFFH-384)/100H ;
           TL1=(0FFFFH-384)-TH1*100H;
           TR1=1;
           DD=0;
           BB=1;

          END;
  ORDER_2: DO;
           S_T1=5;
           TH1=(0FFFFH-384)/100H ;
           TL1=(0FFFFH-384)-TH1*100H;
           TR1=1;
           BB=0;

           DD=1;
          END;
   ORDER_3: DO;
           S_T0=5;
           TH0=(0FFFFH-384)/100H ;
           TL0=(0FFFFH-384)-TH0*100H;
           TR0=1;
           AA=0 ;


           CC=1 ;
          END;
       END;
             END;

          ELSE DO;                    /*反向*/
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=4;
           TH0=(0FFFFH-384)/100H ;
           TL0=(0FFFFH-384)-TH0*100H;
           TR0=1;

           BB=1;
           DD=0;
          END;
  ORDER_1: DO;
           S_T1=4;
           TH1=(0FFFFH-384)/100H ;
           TL1=(0FFFFH-384)-TH1*100H;
           TR1=1;
           AA=0;
           CC=1;

          END;
  ORDER_2: DO;
           S_T1=5;
           TH1=(0FFFFH-384)/100H ;
           TL1=(0FFFFH-384)-TH1*100H;
           TR1=1;
           AA=1;

           CC=0;
          END;
   ORDER_3: DO;
           S_T0=5;
           TH0=(0FFFFH-384)/100H ;
           TL0=(0FFFFH-384)-TH0*100H;
           TR0=1;
           BB=0 ;
           DD=1 ;
          END;
       END;

             END;
             ENABLE;

    END   APC_HSO_1;
 /********************************************************/
 APC_HSO_11:PROCEDURE;
      DISABLE;
      IF DIRECT=0 THEN                /*正向*/
             DO;
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=8;
           TH0=(0FFFFH-85)/100H ;
           TL0=(0FFFFH-85)-TH0*100H;
           TR0=1;

           CC=1;
           AA=1;
          END;
  ORDER_1: DO;
           S_T1=8;
           TH1=(0FFFFH-85)/100H ;
           TL1=(0FFFFH-85)-TH1*100H;
           TR1=1;
           DD=1;
           BB=1;

          END;
  ORDER_2: DO;
           S_T1=9;
           TH1=(0FFFFH-85)/100H ;
           TL1=(0FFFFH-85)-TH1*100H;
           TR1=1;
           BB=1;

           DD=1;
          END;
   ORDER_3: DO;
           S_T0=9;
           TH0=(0FFFFH-85)/100H ;
           TL0=(0FFFFH-85)-TH0*100H;
           TR0=1;
           AA=1 ;


           CC=1 ;
          END;
       END;
             END;

          ELSE DO;                    /*反向*/
             DO CASE ORDER;
  ORDER_0: DO;
           S_T0=8;
           TH0=(0FFFFH-85)/100H ;
           TL0=(0FFFFH-85)-TH0*100H;
           TR0=1;

           BB=1;
           DD=1;
          END;
  ORDER_1: DO;
           S_T1=8;
           TH1=(0FFFFH-85)/100H ;
           TL1=(0FFFFH-85)-TH1*100H;
           TR1=1;
           AA=1;
           CC=1;

          END;
  ORDER_2: DO;
           S_T1=9;
           TH1=(0FFFFH-85)/100H ;
           TL1=(0FFFFH-85)-TH1*100H;
           TR1=1;
           AA=1;

           CC=1;
          END;
   ORDER_3: DO;
           S_T0=9;
           TH0=(0FFFFH-85)/100H ;
           TL0=(0FFFFH-85)-TH0*100H;
           TR0=1;
           BB=1 ;
           DD=1 ;
          END;
       END;

             END;
             ENABLE;

    END   APC_HSO_11;



   /**************高速输出子程序*******************/
 HSO_PROCESS:PROCEDURE;
  DISABLE;


 CALL  APC_HSO_1;






   ENABLE;
   END HSO_PROCESS;

 /************键盘处理子程序***************/
   KEY: PROCEDURE;
         DO;


      P0=0FFH;
       RD=0;


      P2=4FH;




     IF (P00=0  AND KEY_TL=0)                /* 速度显示
*/
       THEN  DO;
       VV=VV+1;
       IF VV=1 THEN
         DO;
         KEY_TL=1;
         S_SPD=0;
         END;
        ELSE IF VV=2 THEN
        DO;
         KEY_TL=1;
         S_SPD=1;
         END;
        ELSE IF VV=3 THEN
        DO;
        KEY_TL=1;
        S_SPD=2;
        END;
         ELSE IF VV=4 THEN
        DO;
        KEY_TL=1;
        S_SPD=3;
        END;

        END;




       ELSE  IF (P01=0  AND KEY_TL=0)          /*方向键*/
       THEN  DO;
         VV=VV+1;
         IF VV=1 THEN
         DO;
         BID=1;
         DIRECT=1;
         END;
         ELSE IF VV=2 THEN
         DO;
         BID=0;
         DIRECT=0;
         VV=0;
         END;




        END;


       ELSE  IF (P02=0 AND KEY_TL=0)          /*设定转速
*/
       THEN  DO;

       S_SPD=1;
       VV=VV+1;
       DO CASE VV;
  VV00:DO;
       END;

  VV10:     DO;
          KEY_TL=1;
         AIM_SPD=100;
       CALL TIME(500 );
       END;



  VV0:     DO;
          KEY_TL=1;
         AIM_SPD=200;
       CALL TIME(500 );
       END;

  VV1:
       DO;
       KEY_TL=1;
       AIM_SPD=400;
        CALL TIME(500 );
       END;
  VV2:
       DO;
       KEY_TL=1;
       AIM_SPD=600;
        CALL TIME(500 );
       END;

 VV3:       DO;
        KEY_TL =1;
       AIM_SPD=800;
        CALL TIME(500  );
        END;

 VV4:
       DO;
       KEY_TL=1;
       AIM_SPD=1000;
        CALL TIME(500 );
       END;


 VV5:
       DO;
       KEY_TL=1;
       AIM_SPD=1200;
        CALL TIME(500 );
       END;

 VV6:
       DO;
       KEY_TL=1;
       AIM_SPD=1500;
        CALL TIME(500);
        VV=0;
       END;




       END;
       END;

     ELSE  IF (P04=0 AND KEY_TL=0)       /*************加
速键************/
       THEN  DO;

       AIM_SPD=AIM_SPD+SPD_STEP;
       KEY_TL=1;
       S_SPD=1;


        END;




            ELSE  IF (P05=0 AND KEY_TL=0)
/*************减速键************/
       THEN  DO;
       IF AIM_SPD=0 THEN
       AIM_SPD=0;
       ELSE DO;
         AIM_SPD=AIM_SPD-SPD_STEP;
       KEY_TL=1;
       S_SPD=1;
           END;
        END;

             ELSE  IF (P03=0 AND KEY_TL=0)
/*************设定步距键************/
       THEN  DO;
          KEY_TL=1;
         SPD_STEP=SPD_STEP+5;
         IF SPD_STEP=100 THEN
         SPD_STEP=5;
         S_SPD=2;
        END;



         ELSE  IF (P06=0 AND KEY_TL=0)
/*************停车键************/
       THEN  DO;
        KEY_TL=1;
        START_SIGN=0;
        AIM_SPD=0;
        CALL STOP;
        S_SPD=0;

        END;



       ELSE  IF (P07=0 AND KEY_TL=0)
/*************启动键************/
       THEN  DO;
        START_SIGN=1;
        KEY_TL=1;
        CALL START;
        S_SPD=0;
        END;

        RD=1;


       P2=0FFH;

       END;

     END KEY;



 /*************外部中断0高速输入处理***************/
  INT0:PROCEDURE INTERRUPT 0;
  DECLARE LL1 BYTE  AT (30H) MAIN;
  DECLARE LL2 BYTE  AT (31H) MAIN;
      DISABLE ;

          P2=17H;
         PP=1;
         IF RUN_SPD<100  then do;
          CON_8253=72H;
         T8253_1=5;
         T8253_1=00H;
         end;
       /* IF ((SPD5<SPD_D and SPD5>20)and RUN_SPD>100 )  THEN DO;
        ZXS=ZXS+1;
        IF ZXS=T_V THEN DO;
            CALL PWM;
            ZXS=0;
        END;
        END; */
        
         ZXS=ZXS+1;
    IF START_SIGN=0 THEN DO;
      IF ZXS>20 THEN DO;
        ZXS=1;
        CALL PWM;
      END;
      ELSE CALL PWM_OUT;
    END;
    ELSE DO;
      IF RUN_SPD<60 THEN DO;
        IF ZXS>300 THEN DO;
          ZXS=1;
          CALL PWM;
        END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -