Referenciamento do eixo Z

Dependencies:   mbed TextLCD

Revision:
3:8f569cc10b95
Parent:
2:3eb5c816d496
--- a/Referenciamneto.cpp	Fri May 21 01:03:03 2021 +0000
+++ b/Referenciamneto.cpp	Fri May 21 02:01:30 2021 +0000
@@ -2,6 +2,8 @@
 #include "TextLCD.h"
 
 TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD
+BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor
+
 Serial pc (D1, D0); //Comunicação com USB
 AnalogIn eixo_Z(PC_2); //Joystick eixo Z
 AnalogIn botao_SELECT(A0); //Botão SELECT da IHM
@@ -10,35 +12,33 @@
 InterruptIn botao_fim_curso(PC_12); //Chave de fim de curso
 DigitalIn botao_indicador_fonte_externa(PC_10); //Indica se os componentes dependentes da fonte externa estão energizados
 
-BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor
-Timer debounce1;
-Timer debounce2;
-Timer debounce3;
-Timer debounce4;
+Timer debounce1; //Correção para botão de posição de salva
+Timer debounce2; //Correção para botão de emergência
+Timer debounce3; //Correção para chave de fim de curso
 
-float tempo_horario, tempo_anti_horario; //Segundos
-int pulsos_horario, pulsos_anti_horario;
-int i;
-int J_Z;
-float deslocamento_horario_Z = 0;
-float deslocamento_anti_horario_Z = 0;
-float deslocamento_Z = 0;
-float deslocamento_max_Z = 0;
+int pulsos_horario, pulsos_anti_horario; //Contagem dos pulsos para o motor
+int i; //Variável para contar o incremento no motor
+int J_Z; //Variável para ler o potenciometro do Joystick
+int passo_fuso = 5; //Declara o passo do fuso
+int pegaZ; //Variável que receberá o valor da posição de salva
+int fonte_externa; //Variável para poder ler a existência da alimentação externa
+int SELECT; //Variável para leitura do botão SELECT da IHM
+int contador_SELECT = 0; //Define o contator do botão SELECT
+int contador_emergencia = 0; //Define o contator do botão de emergência
 
-float passo_motor = 22.5;//5.625/32;
-int passo_fuso = 5;
-int pegaZ;
-int posicao_salva_estado;
-int fonte_externa;
-int SELECT;
-int contador_SELECT = 0;
-int contador_emergencia = 0;
-bool valor_SELECT = false;
-bool estado_referenciamento = false;
-bool estado_botao_emergencia_in = false;
-bool motor_referenciamento = false;
+float tempo_horario, tempo_anti_horario; //Define os tempos de acionamento do motor
+float deslocamento_horario_Z = 0; //Define o deslocamento linear realizado quando o motor gira no sentido horário (negativo)
+float deslocamento_anti_horario_Z = 0; //Define o deslocamento linear realizado quando o motor gira no sentido anti-horário (positivo)
+float deslocamento_Z = 0; //Define o deslocamento linear total
+float deslocamento_max_Z = 0; //Define o deslocamento linear máximo permitido
+float passo_motor = 5.625/32; //Declara o passo angular do motor
 
+bool valor_SELECT = false; //Boleana para lógica do botão SELECT
+bool estado_referenciamento = false; //Boleana para identificar a necessidade do referênciamento
+bool estado_botao_emergencia_in = false; //Boleana para identificar a necessidade do referênciamentosatisfazer a lógica da rotina_emergencia_in
+bool motor_referenciamento = false; //Boleana para permitir o movimento automático do motot no referenciamento
 
+// Rotinas do programa
 void rotina_posicao_salva(void);
 void rotina_emergencia_in(void);
 void rotina_velocidade_eixo_Z(void);
@@ -46,17 +46,19 @@
 void rotina_JOG_Z (void);
 void rotina_botoes_IHM (void);
 void rotina_referenciamento (void);
-void rotina_aciona_motor (void);
 
 
 int main()
 {
+    pc.baud(115200); //Define a velocidade da porta USB
+    motor_z = 0x00; //Estabelece a condição inicial do motor
 
-    pc.baud(115200);
-    motor_z = 0x00;
+    //Declara os pinos de interrupção com suas funções
     posicao_salva.rise(&rotina_posicao_salva);
     botao_emergencia_in.rise(&rotina_emergencia_in);
     botao_fim_curso.rise(&rotina_referenciamento);
+
+    //Inicia o LCD
     wait_ms(500);
     lcd.locate(2,0);
     lcd.printf("SELECT para");
@@ -65,42 +67,44 @@
 
     while(1) {
 
+        //Leitura de variáveis
         J_Z = eixo_Z.read_u16();
         fonte_externa = botao_indicador_fonte_externa.read();
         SELECT = botao_SELECT.read_u16();
 
-//        pc.printf("PosicaoZ=%4f,Posicao_Salva=%d\r\n", deslocamento_Z, pegaZ);
-//        pc.printf("Z=%4d, PegaZ=%4d, Posicao_salva_estado=%d, Botao_emergencia_estado=%d, Tempo1=%4f, Tempo2=%4f, Pulsos=%d, Deslocamento_Z=%f, Velocidade_Z=%f\r\n", J_Z, pegaZ, posicao_salva_estado, botao_emergencia_estado, tempo_horario, tempo_anti_horario, pulsos_anti_horario, deslocamento_Z, velocidade_Z);
-        pc.printf("estado_referenciamento=%d, estado_botao_emergencia_in=%d, contador_emergencia=%d\r\n", estado_referenciamento, estado_botao_emergencia_in, contador_emergencia);
-        if(fonte_externa == 0 & estado_referenciamento == true & estado_botao_emergencia_in == true) {
+        if(fonte_externa == 0 & estado_referenciamento == true & estado_botao_emergencia_in == true) { //Condição para poder disponibilizar a função JOG
 
+            //LCD
             lcd.locate(2,0);
             lcd.printf("PosicaoZ:");
             lcd.locate(0,1);
             lcd.printf("%4fmm",deslocamento_Z);
-//            pc.printf("Fonte=%d\r\n", fonte_externa);
+
+            //Chama a rotina do JOG
             rotina_JOG_Z();
 
         } else {
+
+            //Chama a rotina dos botões da IHM
             rotina_botoes_IHM();
+
             if(valor_SELECT == 1) {
                 contador_SELECT = 1;
+
                 lcd.cls();
                 lcd.locate(2,0);
                 lcd.printf("Iniciando");
                 lcd.locate(0,1);
                 lcd.printf("referenciamento");
-                while(motor_referenciamento == false){
-                for(i = 0; i < 4; i++) {
-                    motor_z = 1 << i;
-                    //rotina_velocidade_eixo_Z();
-                    //rotina_deslocamento_eixo_Z();
-                    wait(0.003);
-                    //pulsos_horario+=1;
+
+                //Permite o movimento automático do motor até atingir o fim de curso
+                while(motor_referenciamento == false) {
+                    for(i = 0; i < 4; i++) {
+                        motor_z = 1 << i;
+                        wait(0.003);
                     }
 
                 }
-                pc.printf("estado_referenciamento=%d\r\n", estado_referenciamento);
             }
         }
     }
@@ -110,23 +114,28 @@
 void rotina_posicao_salva()
 {
     debounce1.start();
-    if(debounce1.read_ms() >= 10) pegaZ = deslocamento_Z;
+
+    if(debounce1.read_ms() >= 10) pegaZ = deslocamento_Z; //Salva a posição de pega
     else pegaZ = 0;
+
     debounce1.reset();
 }
 
 void rotina_emergencia_in()
 {
     debounce2.start();
+
     if(debounce2.read_ms() >= 120) {
 
-        motor_z = 0x00;
-        estado_referenciamento = false;
+        motor_z = 0x00; //Não permite que pulsos sejam enviados para o motor
+        estado_referenciamento = false; //Solicita um novo referenciamento
         estado_botao_emergencia_in =! estado_botao_emergencia_in;
         contador_emergencia+=1;
 
     }
+
     debounce2.reset();
+
     if(contador_emergencia > 1) {
         lcd.cls();
         wait_ms(500);
@@ -134,20 +143,21 @@
         lcd.printf("Emergencia ON");
         lcd.locate(0,1);
         lcd.printf("Pressione RST");
-        exit(0);
+
+        exit(0); //Encerra o programa e obriga o usuário a resetar o sistema
     }
 }
 
-
-
 void rotina_velocidade_eixo_Z()
 {
-    tempo_horario = -1*J_Z*0.0000028 + 0.1875;
+    //Converte a leitura do Joystick para tempo de acionamento do motor
+    tempo_horario = -1*J_Z*0.0000028 + 0.1875; 
     tempo_anti_horario = J_Z*0.000002785 + 0.0025;
 }
 
 void rotina_deslocamento_eixo_Z()
 {
+    //Calcula os deslocamentos no eixo Z
     deslocamento_horario_Z = (passo_fuso*pulsos_horario*passo_motor)/360;
     deslocamento_anti_horario_Z = (passo_fuso*pulsos_anti_horario*passo_motor)/360;
     deslocamento_Z = deslocamento_anti_horario_Z - deslocamento_horario_Z;
@@ -161,43 +171,33 @@
 
 void rotina_referenciamento()
 {
+    debounce3.start();
 
-    debounce3.start();
     if(debounce3.read_ms() >= 10 & contador_SELECT == 1 & estado_botao_emergencia_in == true) {
+
         estado_referenciamento =!  estado_referenciamento;
         motor_referenciamento =! motor_referenciamento;
+
         deslocamento_max_Z = 100;
+
         lcd.cls();
         wait_ms(50);
         lcd.locate(2,0);
         lcd.printf("Detectado");
         wait_ms(1500);
         lcd.cls();
+
         contador_SELECT = 0;
     }
+
     debounce3.reset();
-
-
 }
 
-
-void rotina_aciona_motor_horario()
-{
-
-
-
-
-}
-
-
 void rotina_JOG_Z()
 {
-
-    if(31000 <= J_Z &  J_Z <= 35000) {
+    if(31000 <= J_Z &  J_Z <= 35000) motor_z = 0x00;
 
-        motor_z = 0x00;
-
-    } else {
+    else {
         if (J_Z > 31000 & deslocamento_Z > 0) {
             for(i = 0; i < 4; i++) {
                 motor_z = 1 << i;
@@ -205,10 +205,8 @@
                 rotina_deslocamento_eixo_Z();
                 wait(tempo_horario);
                 pulsos_horario+=1;
-
             }
-        }
-        else motor_z = 0x00;
+        } else motor_z = 0x00;
 
         if(J_Z < 35000 & deslocamento_Z < deslocamento_max_Z) {
             for(i = 3; i > -1; i--) {
@@ -219,9 +217,6 @@
                 pulsos_anti_horario+=1;
 
             }
-        }
-        else motor_z = 0x00;
+        } else motor_z = 0x00;
     }
-
-
 }
\ No newline at end of file