Advertisement
ratu123

inversor.c

Nov 21st, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.14 KB | None | 0 0
  1.    #include "C:\Users\LastDeath\Downloads\Projeto full\Projeto full\Projeto1\inversor.h"
  2.    #use delay(clock=20000000)
  3.    #define LCD_DATA_PORT getenv("SFR:PORTD")
  4.    #define LCD_ENABLE_PIN  PIN_D2                                  
  5.    #define LCD_RS_PIN      PIN_D0
  6.    #define LCD_RW_PIN      PIN_D1                                    
  7.    #define LCD_DATA4       PIN_D4                              
  8.    #define LCD_DATA5       PIN_D5                                  
  9.    #define LCD_DATA6       PIN_D6                                  
  10.    #define LCD_DATA7       PIN_D7
  11.    #include "LCD.C"
  12.    #use fast_io (A)
  13.    int8 freq_inv=60;
  14.    int8 tempo_step=40;
  15.    long int tempo_inv;
  16.    int16 cont=0;
  17.    char modulo='a';
  18.    int16 tempo_chave=0;
  19.    int8 t_morto=0;
  20.    int8 menu1=1;
  21.    int8 menu2=1;
  22.    int1 comando=0;
  23.    int16 tempo_pulso;
  24.    int16 tensao_inv=120;
  25.    int8 freq_inv_temp=60;
  26.    int16 tensao_inv_temp=120;
  27.    int8 rampa_freq_temp=60;
  28.    int8 rampa_temp_temp=5;
  29.    int8 rampa_temp=5;
  30.    float rampa_cont;
  31.    int8 rampa_freq=60;
  32.    int16 cont2=0;
  33.    int1 modo_rampa=0;
  34.    int1 modo_rampa2=0;
  35.    float v_por_f;
  36.    char mr_stop[2];
  37.    int1 situacao=0;
  38.    int1 ativa_rampa=0;
  39.    int8 rampa_print=0;
  40.    int1 stop=0;
  41.    int8 passo_f=5;
  42.    int8 passo_t=5;
  43.    int8 passo_s=1;
  44.    int8 cont3;
  45.    int16 valor;
  46.    float tensao;
  47.    float temp_chave;
  48.    
  49.    #int_TIMER0
  50.    void  TIMER0_isr(void)
  51.    {
  52.    cont3++;
  53.    if(cont3==5)SET_ADC_CHANNEL(0);
  54.    if(cont3==10)
  55.    {
  56.       valor = READ_ADC(7);
  57.       comando=1;
  58.       cont3=0;
  59.    }
  60.    }
  61.    #int_TIMER2
  62.    void  TIMER2_isr(void)
  63.    {
  64.    cont++;
  65.    cont2++;
  66.          
  67.    //-----------chaveamento--------
  68.       if(cont>tempo_chave){
  69.          cont=0;
  70.          if (modulo=='a'){
  71.             output_high(pin_a2);
  72.             output_high(pin_a3);
  73.             output_low(pin_a1);
  74.             output_low(pin_a5);
  75.             modulo='b';
  76.          }
  77.          else{
  78.             output_high(pin_a1);
  79.             output_high(pin_a5);
  80.             output_low(pin_a2);
  81.             output_low(pin_a3);
  82.             modulo='a';
  83.          }
  84.         }
  85.    //---------largura de pulso--------
  86.         if(cont>tempo_pulso)
  87.          {
  88.           output_high(pin_a2);
  89.           output_low(pin_a3);
  90.           output_high(pin_a1);
  91.           output_low(pin_a5);
  92.          }
  93.        
  94.    }
  95.    #int_RB
  96.    void  RB_isr(void)
  97.    {
  98.    comando=1;
  99.    
  100.    
  101.    //------------------Tratar menu principal-------------------
  102.       if(menu2==1)
  103.       {
  104.          if(input(pin_b4))(menu1--);
  105.          if(input(pin_b5))(menu1++);
  106.          if(menu1<1)(menu1=1);
  107.          if(menu1>6)(menu1=6);
  108.       }
  109.    //----------------------------------------------------------
  110.       else
  111.       {
  112.       if(input(pin_b4))
  113.       {
  114.          if(menu1==1)
  115.          {
  116.    //-----------------modo manual freq + ---------------------
  117.             if(menu2==3)
  118.             {
  119.                freq_inv_temp=freq_inv_temp+passo_f;
  120.                if(freq_inv_temp>100)(freq_inv_temp=100);
  121.             }
  122.    //----------------------------------------------------------
  123.    //-----------------modo manual tensao + --------------------
  124.             if(menu2==2)
  125.             {
  126.                tensao_inv_temp=tensao_inv+passo_t;
  127.                if(tensao_inv_temp>180)(tensao_inv_temp=180);
  128.             }
  129.    //----------------------------------------------------------
  130.          }
  131.          if(menu1==2)
  132.          {
  133.    //----------------modo v/f  freq + ------------------------
  134.             if(menu2==2)
  135.             {
  136.                freq_inv_temp=freq_inv_temp+passo_f;
  137.                if(freq_inv_temp>100)(freq_inv_temp=100);
  138.             }
  139.    //----------------------------------------------------------
  140.    
  141.          }
  142.          if(menu1==3)
  143.          {
  144.    //----------------modo rampa rampas--------------------------
  145.             if(menu2==3)
  146.             {
  147.                ativa_rampa=1;
  148.             }
  149.    //------------------------------------------------------------
  150.     //----------------modo rampa  stop  ------------------------
  151.             if(menu2==2)
  152.             {
  153.                if(situacao==1)
  154.                {
  155.                   stop=1;
  156.                   situacao=0;
  157.                }
  158.             }
  159.    //----------------------------------------------------------
  160.          }
  161.          if(menu1==4)
  162.          {
  163.    //-----------------modo rampa/ freq maxima + ---------------
  164.             if(menu2==2)
  165.             {
  166.                rampa_freq_temp=rampa_freq_temp+passo_f;
  167.                if(rampa_freq_temp>90)(rampa_freq_temp=90);
  168.             }
  169.    //----------------------------------------------------------
  170.    //-----------------modo rampa/ temp maxima + ---------------
  171.             if(menu2==3)
  172.             {
  173.                rampa_temp_temp=rampa_temp_temp+passo_s;
  174.                if(rampa_temp_temp>120)(rampa_temp_temp=120);
  175.             }
  176.    //----------------------------------------------------------
  177.          }
  178.          if(menu1==5)
  179.             {
  180.             if(menu2==2)
  181.             {
  182.                passo_f++;
  183.             }
  184.             if(menu2==3)
  185.             {
  186.                passo_t++;
  187.             }
  188.             if(menu2==4)
  189.             {
  190.                passo_s++;
  191.             }
  192.             }
  193.       }
  194.       if(input(pin_b5))
  195.       {
  196.          if(menu1==1)
  197.          {
  198.    //-----------------modo manual freq - ---------------------
  199.             if(menu2==3)
  200.             {
  201.                freq_inv=freq_inv-passo_f;
  202.                if(freq_inv<16)(freq_inv=16);
  203.             }
  204.    //----------------------------------------------------------
  205.    //-----------------modo manual tensao - --------------------
  206.             if(menu2==2)
  207.             {
  208.                
  209.                 if(tensao_inv<passo_t)
  210.                   tensao_inv=0;
  211.                 else
  212.                   tensao_inv=tensao_inv-passo_t;
  213.                
  214.             }
  215.    //----------------------------------------------------------        
  216.          }
  217.          if(menu1==2)
  218.          {
  219.    //-----------------modo v/f  freq - -------------------------
  220.             if(menu2==2)
  221.             {
  222.                freq_inv=freq_inv-passo_f;
  223.                if(freq_inv<16)(freq_inv=16);
  224.             }
  225.    //----------------------------------------------------------
  226.          }
  227.          if(menu1==4)
  228.          {
  229.    //-----------------modo rampa/ freq maxima - ---------------
  230.             if(menu2==2)
  231.             {
  232.                rampa_freq=rampa_freq-passo_f;
  233.                if(rampa_freq<16)(rampa_freq=16);
  234.             }
  235.    //----------------------------------------------------------
  236.    //-----------------modo rampa/ temp maxima - ---------------
  237.             if(menu2==3)
  238.             {
  239.                rampa_temp=rampa_temp-passo_s;
  240.                if(rampa_temp<5)(rampa_temp=5);
  241.             }
  242.    //----------------------------------------------------------
  243.          }
  244.          if(menu1==5)
  245.             {
  246.             if(menu2==2)
  247.             {
  248.                passo_f--;
  249.             }
  250.             if(menu2==3)
  251.             {
  252.                passo_t--;
  253.             }
  254.             if(menu2==4)
  255.             {
  256.                passo_s--;
  257.             }
  258.             }
  259.       }
  260.       }
  261.    //-------------------Tratamentos sub menus-----------------  
  262.       if(input(pin_b6))
  263.       {
  264.          if((menu1==6)&&(menu2==2))disable_interrupts(INT_TIMER0);
  265.    //-------------------voltar menu---------------------------
  266.          if(menu2>2)(menu2--);    
  267.    //---------------------------------------------------------
  268.       }
  269.       if(input(pin_b2))
  270.       {
  271.       menu2=1;
  272.       }
  273.          //-------------------avançar menu--------------------------
  274.       if(input(pin_b7))
  275.       {
  276.          if((menu1==1)&&(menu2<3))(menu2++);
  277.          if((menu1==2)&&(menu2<2))(menu2++);
  278.          if((menu1==3)&&(menu2<3))(menu2++);
  279.          if((menu1==4)&&(menu2<3))(menu2++);
  280.          if((menu1==5)&&(menu2<4))(menu2++);
  281.          if((menu1==6)&&(menu2<2))(menu2++);
  282.       }
  283.      
  284.      if(input(pin_b1))
  285.      {
  286.      if(menu1==1)
  287.      {
  288.      freq_inv=freq_inv_temp;
  289.      tensao_inv=tensao_inv_temp;
  290.      }
  291.      if(menu1==2)
  292.      {
  293.      freq_inv=freq_inv_temp;
  294.      }
  295.      if(menu1==3){
  296.      rampa_freq=rampa_freq_temp;
  297.      rampa_temp=rampa_temp_temp;
  298.      }
  299.      }
  300.      
  301.  
  302.      
  303.    }
  304.    
  305.    void desativa_chaves()
  306.    {
  307.       output_high(pin_a5);
  308.       output_high(pin_a1);
  309.       output_high(pin_a2);
  310.       output_high(pin_a3);
  311.    }
  312.    
  313.    void calculo_inv ()
  314.    {
  315.       tempo_inv=1000000/freq_inv;
  316.       tempo_chave=tempo_inv/tempo_step;
  317.       tempo_pulso=(tempo_chave*0.00555*tensao_inv);
  318.       t_morto=(tempo_inv-tempo_chave)*tempo_step;
  319.    }
  320.    void main()
  321.    {
  322.      
  323.       setup_adc_ports(AN0);
  324.       setup_adc(ADC_CLOCK_DIV_2);
  325.       setup_psp(PSP_DISABLED);
  326.       setup_spi(SPI_SS_DISABLED);
  327.       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  328.       setup_timer_1(T1_DISABLED);
  329.       setup_timer_2(T2_DIV_BY_1,24,4);
  330.       setup_comparator(NC_NC_NC_NC);
  331.       setup_vref(FALSE);
  332.       lcd_init();
  333.       disable_interrupts(INT_TIMER2);
  334.          // TODO: USER CODE!!
  335.       set_tris_a(0x01);
  336.      
  337.       printf(lcd_putc,"\f Inversor Mono \n de Frequencia");
  338.       delay_ms(2000);
  339.       printf(lcd_putc,"\f Grupo: Alex \n Leonel e Ruan");
  340.       delay_ms(2000);
  341.      
  342.       printf(lcd_putc,"\f*Modo Manual \n Modo V/F");
  343.       enable_interrupts(INT_RB);
  344.       enable_interrupts(GLOBAL);
  345.       calculo_inv ();
  346.    
  347.    
  348.     while(true)
  349.      {
  350.       if(comando==1)
  351.       {
  352.          if(menu2==1)
  353.          {
  354.             if(menu1==1)(printf(lcd_putc,"\f*Modo Manual. \n Modo V/F"));
  355.             if(menu1==2)(printf(lcd_putc,"\f Modo Manual \n*Modo V/F"));
  356.             if(menu1==3)(printf(lcd_putc,"\f*Modo Rampa \n Config Rampa"));
  357.             if(menu1==4)(printf(lcd_putc,"\f Modo Rampa \n*Config Rampa"));
  358.             if(menu1==5)(printf(lcd_putc,"\f*Config Passo \n Medidas"));
  359.             if(menu1==6)(printf(lcd_putc,"\f Config Passo \n*Medidas"));
  360.          }
  361.          if(menu2==2)
  362.          {
  363.    //-----------------------variar Tensao-------------------------------------
  364.             if(menu1==1)
  365.             {
  366.                calculo_inv ();
  367.                if(tensao_inv<=0)(tensao_inv=0);
  368.                 if(!situacao)
  369.                {
  370.                   enable_interrupts(INT_TIMER2);
  371.                   situacao=1;
  372.                }
  373.               printf(lcd_putc,"\f Tensao  Freq.\n *%ldV   %dHz  ",tensao_inv,freq_inv);
  374.             }
  375.    //---------------------------------------------------------------------------        
  376.    //----------------------modo v/f--------------------------------------------
  377.             if(menu1==2)
  378.             {
  379.                tensao_inv=(freq_inv*2.10);
  380.                if(tensao_inv>180)(tensao_inv=180);
  381.                if(tensao_inv>180)(tensao_inv=180);
  382.                calculo_inv ();
  383.                if(!situacao)
  384.                {
  385.                   enable_interrupts(INT_TIMER2);
  386.                   situacao=1;
  387.                }
  388.                v_por_f=((tensao_inv*1.00)/freq_inv);
  389.                printf(lcd_putc,"\fFreq. Tensao v/f \n %dHz  %ldV %f",freq_inv,tensao_inv,v_por_f);
  390.             }
  391.    //----------------------------------------------------------------------------
  392.    //----------------------modo rampa--------------------------------------------
  393.             if(menu1==3)
  394.             {
  395.             if(stop)
  396.             {
  397.             stop=0;
  398.             desativa_chaves();
  399.             disable_interrupts(INT_TIMER2);
  400.             }
  401.             cont2=0;
  402.              if(situacao)
  403.                {
  404.                   mr_stop="OK";
  405.                   printf(lcd_putc,"\f Stop   Rampa \n *%s    Descida",mr_stop);
  406.                }
  407.                else
  408.                {
  409.                   mr_stop="--";
  410.                   printf(lcd_putc,"\f Stop   Rampa \n *%s    Subida",mr_stop);
  411.                }
  412.             }
  413.    //----------------------------------------------------------------------------
  414.    //----------------------modo config rampa Freq final--------------------------
  415.             if(menu1==4)
  416.             {
  417.             printf(lcd_putc,"\fF.final  Tempo \n *%dHz    %ds",rampa_freq,rampa_temp);
  418.             }
  419.    //----------------------------------------------------------------------------
  420.    //----------------------modo config passo--------------------------------
  421.             if(menu1==5)
  422.             {
  423.             printf(lcd_putc,"\f  Freq. Tensao  \n  *%dHz    %dV ",passo_f,passo_t);
  424.             }
  425.    //----------------------------------------------------------------------------
  426.    //----------------------medidas-----------------------------------------------
  427.             if(menu1==6)
  428.             {
  429.             enable_interrupts(INT_TIMER0);
  430.             tensao = (-20.58*valor * 0.0048828125)+94.84;
  431.             temp_chave=25+tensao*1.25;
  432.             printf(lcd_putc,"\fTemp= %fC\nIGBT= %fC",tensao,temp_chave);
  433.             }
  434.    //----------------------------------------------------------------------------
  435.          }
  436.          if(menu2==3)
  437.          {
  438.    //--------------------------variar freq-------------------------------------------          
  439.              if(menu1==1)
  440.              {
  441.                calculo_inv ();
  442.                printf(lcd_putc,"\f Tensao  Freq.\n  %ldV  *%dHz ",tensao_inv,freq_inv);
  443.              }
  444.    //---------------------------------------------------------------------------
  445.    //----------------------modo rampa--------------------------------------------
  446.             if(menu1==3)
  447.             {
  448.                if(situacao==1)mr_stop="OK";
  449.                if(situacao==0)mr_stop="--";
  450.                    if(ativa_rampa)
  451.                   {
  452.                      if(situacao==1)modo_rampa2=1;
  453.                      if(situacao==0)
  454.                      {
  455.                         modo_rampa=1;
  456.                         freq_inv=16;
  457.                      }
  458.                      rampa_print=1;
  459.                   }
  460.                   if(ativa_rampa==0)
  461.                   {
  462.                      if(situacao==1)printf(lcd_putc,"\f Stop   Rampa \n  %s   *Descida",mr_stop);
  463.                      if(situacao==0)printf(lcd_putc,"\f Stop   Rampa \n  %s   *Subida",mr_stop);
  464.                   }
  465.             }
  466.    //----------------------modo config rampa tempo final--------------------------
  467.             if(menu1==4)
  468.             {
  469.             printf(lcd_putc,"\fF.final  Tempo \n  %dHz   *%ds",rampa_freq,rampa_temp);
  470.             }
  471.    //----------------------------------------------------------------------------
  472.    //----------------------modo config passo--------------------------------
  473.             if(menu1==5)
  474.             {
  475.             printf(lcd_putc,"\f  Freq. Tensao  \n   %dHz   *%dV ",passo_f,passo_t);
  476.             }
  477.    //----------------------------------------------------------------------------
  478.          }
  479.          if(menu2==4)
  480.          {
  481.    //----------------------modo config passo--------------------------------
  482.             if(menu1==5)
  483.             {
  484.                
  485.                printf(lcd_putc,"\f  Tensao  Tempo  \n   %dV   *%ds ",passo_t,passo_s);
  486.             }
  487.    //----------------------------------------------------------------------------
  488.          }
  489.          comando=0;
  490.       }
  491.    //-----------------------rampa subida----------------
  492.       if(modo_rampa==1)
  493.       {
  494.          if(cont2>rampa_cont)
  495.          {
  496.             if(freq_inv==rampa_freq)
  497.             {
  498.                modo_rampa=0;
  499.                ativa_rampa=0;
  500.                printf(lcd_putc,"\f Stop   Rampa \n  --   *Descida");
  501.                situacao=1;
  502.                enable_interrupts(INT_RB);
  503.             }
  504.             freq_inv++;
  505.             tensao_inv=(freq_inv*2.10);
  506.             calculo_inv();
  507.             cont2=0;
  508.           }
  509.           if(rampa_print==1)
  510.           {
  511.             rampa_print=0;
  512.             cont2=0;
  513.             printf(lcd_putc,"\f Stop   Rampa \n  --    *---");
  514.             rampa_cont=(((2000000*rampa_temp)/((rampa_freq-16)))/tempo_step);
  515.             tensao_inv=(freq_inv*2.10);
  516.             calculo_inv();
  517.             disable_interrupts(INT_RB);
  518.             enable_interrupts(INT_TIMER2);
  519.            
  520.           }
  521.       }
  522.    //----------------------------------------------------
  523.    //-----------------------rampa descida----------------
  524.       if(modo_rampa2==1)
  525.       {
  526.          if(rampa_print)
  527.          {
  528.            
  529.             rampa_print=0;
  530.             printf(lcd_putc,"\f Stop   Rampa \n  --    *---");
  531.             rampa_cont=(((2000000*rampa_temp)/((freq_inv-16)))/tempo_step);  
  532.             cont2=0;
  533.            
  534.            
  535.          }
  536.          if(cont2>rampa_cont)
  537.          {
  538.            
  539.             freq_inv--;
  540.             tensao_inv=(freq_inv*2.10);
  541.             calculo_inv();
  542.             cont2=0;
  543.              if(freq_inv==16)
  544.             {
  545.                desativa_chaves();
  546.                disable_interrupts(INT_TIMER2);
  547.                
  548.                modo_rampa2=0;
  549.                printf(lcd_putc,"\f Stop   Rampa \n  --   *Subida");
  550.                situacao=0;
  551.            
  552.                
  553.             }
  554.          }
  555.       }
  556.    //----------------------------------------------------
  557.      }
  558.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement