Dependencies:   mbed

Committer:
diogonac
Date:
Wed May 19 17:03:46 2021 +0000
Revision:
18:1374daf4e6a3
Parent:
17:f3a45eeb1a7e
Deteccao de fonte externa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diogonac 3:ce5c55c100b1 1 #include "mbed.h"
diogonac 13:9ee128577854 2
diogonac 3:ce5c55c100b1 3 Serial pc (USBTX, USBRX);
diogonac 3:ce5c55c100b1 4
diogonac 6:c344e6b93f34 5
diogonac 17:f3a45eeb1a7e 6 AnalogIn eixo_Z(PC_2);
diogonac 15:a0927f239a4c 7 InterruptIn posicao_salva(PA_15);
diogonac 17:f3a45eeb1a7e 8 InterruptIn botao_emergencia(PC_4);
diogonac 18:1374daf4e6a3 9 DigitalIn botao_indicador_fonte_externa(PC_10);
diogonac 3:ce5c55c100b1 10
diogonac 4:c3007ca446ec 11 BusOut motor_z(PB_1, PB_15, PB_14, PB_13);
diogonac 3:ce5c55c100b1 12
diogonac 16:8c6cbd446ae8 13 float tempo_horario, tempo_anti_horario; //Segundos
diogonac 16:8c6cbd446ae8 14 int pulsos_horario, pulsos_anti_horario;
diogonac 3:ce5c55c100b1 15 int i;
diogonac 16:8c6cbd446ae8 16 int J_Z;
diogonac 16:8c6cbd446ae8 17 float deslocamento_horario_Z, deslocamento_anti_horario_Z, deslocamento_total_Z;
diogonac 16:8c6cbd446ae8 18 float velocidade_Z;
diogonac 16:8c6cbd446ae8 19 float passo_motor = 18;//5.625/32;
diogonac 16:8c6cbd446ae8 20 int passo_fuso = 5;
diogonac 13:9ee128577854 21 int pegaZ;
diogonac 4:c3007ca446ec 22 int posicao_salva_estado, botao_emergencia_estado;
diogonac 18:1374daf4e6a3 23 int fonte_externa;
diogonac 3:ce5c55c100b1 24
diogonac 4:c3007ca446ec 25 void rotina_posicao_salva(void);
diogonac 4:c3007ca446ec 26 void rotina_emergencia(void);
diogonac 13:9ee128577854 27 void rotida_velocidade_eixo_Z(void);
diogonac 16:8c6cbd446ae8 28 void rotida_deslocamento_eixo_Z (void);
diogonac 17:f3a45eeb1a7e 29 void rotida_aciona_motor (void);
diogonac 16:8c6cbd446ae8 30
diogonac 3:ce5c55c100b1 31
diogonac 3:ce5c55c100b1 32
diogonac 3:ce5c55c100b1 33 int main()
diogonac 3:ce5c55c100b1 34 {
diogonac 13:9ee128577854 35
diogonac 13:9ee128577854 36 pc.baud(115200);
diogonac 4:c3007ca446ec 37 motor_z = 0x00;
diogonac 4:c3007ca446ec 38 posicao_salva.rise(&rotina_posicao_salva);
diogonac 4:c3007ca446ec 39 botao_emergencia.rise(&rotina_emergencia);
diogonac 3:ce5c55c100b1 40
diogonac 3:ce5c55c100b1 41 while(1) {
diogonac 3:ce5c55c100b1 42
diogonac 16:8c6cbd446ae8 43 J_Z = eixo_Z.read_u16();
diogonac 4:c3007ca446ec 44 posicao_salva_estado = posicao_salva.read();
diogonac 4:c3007ca446ec 45 botao_emergencia_estado = botao_emergencia.read();
diogonac 18:1374daf4e6a3 46 fonte_externa = botao_indicador_fonte_externa.read();
diogonac 3:ce5c55c100b1 47
diogonac 16:8c6cbd446ae8 48 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_total_Z, velocidade_Z);
diogonac 16:8c6cbd446ae8 49
diogonac 18:1374daf4e6a3 50 if(fonte_externa == 1) {
diogonac 18:1374daf4e6a3 51 rotida_aciona_motor();
diogonac 18:1374daf4e6a3 52 }
diogonac 3:ce5c55c100b1 53 }
diogonac 3:ce5c55c100b1 54 }
diogonac 3:ce5c55c100b1 55
diogonac 3:ce5c55c100b1 56
diogonac 4:c3007ca446ec 57 void rotina_posicao_salva()
diogonac 3:ce5c55c100b1 58 {
diogonac 16:8c6cbd446ae8 59 if(posicao_salva_estado == 0) pegaZ = J_Z;
diogonac 13:9ee128577854 60 else pegaZ = 0;
diogonac 4:c3007ca446ec 61 }
diogonac 4:c3007ca446ec 62
diogonac 4:c3007ca446ec 63 void rotina_emergencia()
diogonac 4:c3007ca446ec 64 {
diogonac 13:9ee128577854 65 if(botao_emergencia_estado == 0) motor_z = 0x00;
diogonac 13:9ee128577854 66 }
diogonac 4:c3007ca446ec 67
diogonac 13:9ee128577854 68 void rotida_velocidade_eixo_Z()
diogonac 13:9ee128577854 69 {
diogonac 16:8c6cbd446ae8 70 tempo_horario = -1*J_Z*0.0000028 +0.1875;
diogonac 16:8c6cbd446ae8 71 tempo_anti_horario = J_Z*0.000002785 +0.0025;
diogonac 16:8c6cbd446ae8 72 }
diogonac 16:8c6cbd446ae8 73
diogonac 16:8c6cbd446ae8 74 void rotida_deslocamento_eixo_Z()
diogonac 16:8c6cbd446ae8 75 {
diogonac 16:8c6cbd446ae8 76 deslocamento_horario_Z = (passo_fuso*pulsos_horario*passo_motor)/360;
diogonac 16:8c6cbd446ae8 77 deslocamento_anti_horario_Z = (passo_fuso*pulsos_anti_horario*passo_motor)/360;
diogonac 16:8c6cbd446ae8 78 deslocamento_total_Z = deslocamento_anti_horario_Z - deslocamento_horario_Z;
diogonac 17:f3a45eeb1a7e 79 }
diogonac 17:f3a45eeb1a7e 80
diogonac 17:f3a45eeb1a7e 81
diogonac 17:f3a45eeb1a7e 82 void rotida_aciona_motor()
diogonac 17:f3a45eeb1a7e 83 {
diogonac 17:f3a45eeb1a7e 84
diogonac 17:f3a45eeb1a7e 85 if(31000 <= J_Z & J_Z <= 35000) {
diogonac 17:f3a45eeb1a7e 86
diogonac 17:f3a45eeb1a7e 87 motor_z = 0x00;
diogonac 17:f3a45eeb1a7e 88
diogonac 17:f3a45eeb1a7e 89 } else {
diogonac 17:f3a45eeb1a7e 90 if (J_Z > 31000) {
diogonac 17:f3a45eeb1a7e 91 for(i = 0; i < 4; i++) {
diogonac 17:f3a45eeb1a7e 92 motor_z = 1 << i;
diogonac 17:f3a45eeb1a7e 93 rotida_velocidade_eixo_Z();
diogonac 17:f3a45eeb1a7e 94 rotida_deslocamento_eixo_Z();
diogonac 17:f3a45eeb1a7e 95 wait(tempo_horario);
diogonac 17:f3a45eeb1a7e 96 pulsos_horario+=1;
diogonac 17:f3a45eeb1a7e 97 velocidade_Z = deslocamento_horario_Z/tempo_horario;
diogonac 17:f3a45eeb1a7e 98
diogonac 17:f3a45eeb1a7e 99 }
diogonac 17:f3a45eeb1a7e 100 }
diogonac 17:f3a45eeb1a7e 101
diogonac 17:f3a45eeb1a7e 102 if(J_Z < 35000) {
diogonac 17:f3a45eeb1a7e 103 for(i = 3; i > -1; i--) {
diogonac 17:f3a45eeb1a7e 104 motor_z = 1 << i;
diogonac 17:f3a45eeb1a7e 105 rotida_velocidade_eixo_Z();
diogonac 17:f3a45eeb1a7e 106 rotida_deslocamento_eixo_Z();
diogonac 17:f3a45eeb1a7e 107 wait(tempo_anti_horario);
diogonac 17:f3a45eeb1a7e 108 pulsos_anti_horario+=1;
diogonac 17:f3a45eeb1a7e 109 velocidade_Z = deslocamento_horario_Z/tempo_horario;
diogonac 17:f3a45eeb1a7e 110
diogonac 17:f3a45eeb1a7e 111 }
diogonac 17:f3a45eeb1a7e 112 }
diogonac 17:f3a45eeb1a7e 113 }
diogonac 3:ce5c55c100b1 114 }