Dependencies:   mbed

Committer:
diogonac
Date:
Wed May 19 17:00:31 2021 +0000
Revision:
17:f3a45eeb1a7e
Parent:
16:8c6cbd446ae8
Child:
18:1374daf4e6a3
Atualizacao do acionamento do motor

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