Referenciamento do eixo Z

Dependencies:   mbed TextLCD

Revision:
4:f01f91e5aefb
Parent:
3:8f569cc10b95
--- a/Referenciamneto.cpp	Fri May 21 02:01:30 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-#include "mbed.h"
-#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
-InterruptIn posicao_salva(PA_15); //Botão de salva posição Joystick
-InterruptIn botao_emergencia_in(PC_4); //Botão de emergência para detectar acionamento
-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
-
-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
-
-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 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);
-void rotina_deslocamento_eixo_Z (void);
-void rotina_JOG_Z (void);
-void rotina_botoes_IHM (void);
-void rotina_referenciamento (void);
-
-
-int main()
-{
-    pc.baud(115200); //Define a velocidade da porta USB
-    motor_z = 0x00; //Estabelece a condição inicial do motor
-
-    //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");
-    lcd.locate(0,1);
-    lcd.printf("referenciamento");
-
-    while(1) {
-
-        //Leitura de variáveis
-        J_Z = eixo_Z.read_u16();
-        fonte_externa = botao_indicador_fonte_externa.read();
-        SELECT = botao_SELECT.read_u16();
-
-        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);
-
-            //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");
-
-                //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);
-                    }
-
-                }
-            }
-        }
-    }
-}
-
-
-void rotina_posicao_salva()
-{
-    debounce1.start();
-
-    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; //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);
-        lcd.locate(0,0);
-        lcd.printf("Emergencia ON");
-        lcd.locate(0,1);
-        lcd.printf("Pressione RST");
-
-        exit(0); //Encerra o programa e obriga o usuário a resetar o sistema
-    }
-}
-
-void rotina_velocidade_eixo_Z()
-{
-    //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;
-}
-
-void rotina_botoes_IHM()
-{
-    if(SELECT > 60000 & SELECT < 65000) valor_SELECT =! valor_SELECT;
-    else valor_SELECT = 0;
-}
-
-void rotina_referenciamento()
-{
-    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_JOG_Z()
-{
-    if(31000 <= J_Z &  J_Z <= 35000) motor_z = 0x00;
-
-    else {
-        if (J_Z > 31000 & deslocamento_Z > 0) {
-            for(i = 0; i < 4; i++) {
-                motor_z = 1 << i;
-                rotina_velocidade_eixo_Z();
-                rotina_deslocamento_eixo_Z();
-                wait(tempo_horario);
-                pulsos_horario+=1;
-            }
-        } else motor_z = 0x00;
-
-        if(J_Z < 35000 & deslocamento_Z < deslocamento_max_Z) {
-            for(i = 3; i > -1; i--) {
-                motor_z = 1 << i;
-                rotina_velocidade_eixo_Z();
-                rotina_deslocamento_eixo_Z();
-                wait(tempo_anti_horario);
-                pulsos_anti_horario+=1;
-
-            }
-        } else motor_z = 0x00;
-    }
-}
\ No newline at end of file