RuiViana

TesteDisparoTriac

Jul 14th, 2016
124
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <TimerOne.h>          // Biblioteca do timer1
  2.  
  3. int sortValues[4] = { 5000, 1500, 4000, 6000 };         // Valores para disparo dos Triacs
  4. //int a[4];                                               // Backup dos valors de disparo
  5. int Aa;                                               // Backup dos valores de disparo
  6. int Ab;
  7. int Ac;
  8. int Ad;
  9. int flag = 0;                                         // Flag para controle de rodagem
  10. byte Diac = 0;                                        // Variavel para definir sequencia de disparo
  11. # define Canais 4                                     // Numero de canais de Triacs
  12. byte TriacPort[Canais] = {4, 5, 6, 7};                // Ports para cada canal (triac)
  13. byte c = 0;                                           // Variavel para os ports dos Triacs
  14. byte DispAa = 0;                                      // Controle de diparo
  15. byte DispAb = 0;
  16. byte DispAc = 0;
  17. byte DispAd = 0;
  18. //-------------------------
  19. void setup()
  20. {
  21.   for ( byte c = 0; c < Canais; c++ )         // Loop para definir port modes
  22.   {
  23.     pinMode(TriacPort[c], OUTPUT);            // Define o prot de disparo do Triac como output
  24.   }
  25.   Serial.begin(9600);
  26.   Timer1.attachInterrupt(callback);           // attaches callback() as a timer overflow interrupt
  27. }
  28. //------------------------
  29. void loop()
  30. {
  31.   if (flag == 0)                              // Só executa ao modificar valores
  32.   {
  33.     sort(sortValues, 4);                      // Chama rotina que sequencia tempos de disparo
  34.     SequenciadorDeDisparo();                  // Chama rotina que determina sequencia de disparo
  35.   }
  36. }
  37. //----------------------------
  38. void sort(int a[], int size)                  // Sequencia tempos de disparo
  39. {
  40.   Salva();                                    // chama rotina que salva valores na ordem original
  41.   for (int i = 0; i < (size - 1); i++)      
  42.   {
  43.     for (int j = 0; j < (size - (i + 1)); j++)
  44.     {
  45.       if (a[j] > a[j + 1])
  46.       {
  47.         int t = a[j];
  48.         a[j] = a[j + 1];
  49.         a[j + 1] = t;
  50.       }
  51.     }
  52.   }
  53. }
  54. //--------------------------------
  55. void Salva()                                  // Salva valores na ordem original                      
  56. {
  57.   if (flag == 0)                              // Só executa ao modificar valores                            
  58.   {
  59.     Aa = sortValues[0];          
  60.     Ab = sortValues[1];
  61.     Ac = sortValues[2];
  62.     Ad = sortValues[3];
  63.     flag = 1;                                 // Informa que já rodu uma vez
  64.   }
  65. }
  66. //----------------------------------
  67. void callback()                               // Dispara Triac. Cada vez que "estoura" o timer 1 chama esta rotina
  68. {
  69.   digitalWrite(TriacPort[c], HIGH);           // Dispara triac definido em c
  70.   delayMicroseconds(50);                      // Tempo minimo para disparo em useg
  71.   digitalWrite(TriacPort[c], LOW);            // Corta disparo
  72.   Timer1.stop();                              // Para Timer1
  73.   Diac++;                                     // Incrementa seaquenciador de Disparo
  74.   if (Diac >= 4) Diac = 0;                    // Se sequenciador > 4 zera
  75.   SequenciadorDeDisparo();                    // Chama rotina que determina sequencia de disparo
  76. }
  77. //----------------------------
  78. void SequenciadorDeDisparo()                  // Rotina que determina sequencia de disparo                      
  79. {
  80.   if (DispAa == 0)                            // Se Triac 0 ainda não disparou
  81.   {
  82.     if (sortValues[Diac] == Aa)               // Se o valor referenciado for o igual ao primeiro
  83.     {
  84.       Timer1.initialize(sortValues[Diac]);    // Carrega valor no Timer1
  85.       c = 0;                                  // Informa que é o Triac 0 a ser disparado
  86.       DispAa = 1;                             // Informa que já disparou  o Triac 0
  87.       DispAb = 0;                             // Prepara para disparar o Triac 1
  88.     }
  89.   }
  90.   if (DispAb == 0)                            // Se Triac 1 ainda não disparou
  91.   {
  92.     if (sortValues[Diac] == Ab)               // Se o valor referenciado for o igual ao segundo
  93.     {
  94.       Timer1.initialize(sortValues[Diac]);    // Carrega valor no Timer1
  95.       c = 1;                                  // Informa que é o Triac 1 a ser disparado
  96.       DispAb = 1;                             // Informa que já disparou  o Triac 1
  97.       DispAc = 0;                             // Prepara para disparar o Triac 2
  98.     }
  99.   }
  100.   if (DispAc == 0)                            // Se Triac 2 ainda não disparou
  101.   {
  102.     if (sortValues[Diac] == Ac)               // Se o valor referenciado for o igual ao terceiro
  103.     {
  104.       Timer1.initialize(sortValues[Diac]);    // Carrega valor no Timer1
  105.       c = 2;                                  // Informa que é o Triac 2 a ser disparado
  106.       DispAc = 1;                             // Informa que já disparou  o Triac 3
  107.       DispAd = 0;                             // Prepara para disparar o Triac 3
  108.     }
  109.   }
  110.   if (DispAd == 0)                            // Se Triac 3 ainda não disparou
  111.   {
  112.     if (sortValues[Diac] == Ad)               // Se o valor referenciado for o igual ao quarto
  113.     {
  114.       Timer1.initialize(sortValues[Diac]);    // Carrega valor no Timer1
  115.       c = 3;                                  // Informa que é o Triac 3 a ser disparado
  116.       DispAd = 1;                             // Informa que já disparou  o Triac 3
  117.       DispAa = 0;                           // Prepara para disparar o Triac 0 (proximo Ciclo)
  118.     }
  119.   }
  120. }
RAW Paste Data