Referenciamento do eixo Z
Revision 4:f01f91e5aefb, committed 2021-06-01
- Comitter:
- doradalberto
- Date:
- Tue Jun 01 13:12:44 2021 +0000
- Parent:
- 3:8f569cc10b95
- Commit message:
- rename;
Changed in this revision
| Referenciamento.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Referenciamneto.cpp | Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Referenciamento.cpp Tue Jun 01 13:12:44 2021 +0000
@@ -0,0 +1,222 @@
+#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
--- 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