Projeto Mecatrônico
/
Referenciamento
Referenciamneto.cpp@1:e8be78899409, 2021-05-20 (annotated)
- Committer:
- diogonac
- Date:
- Thu May 20 18:59:02 2021 +0000
- Revision:
- 1:e8be78899409
- Parent:
- 0:7049aa99ce41
- Child:
- 2:3eb5c816d496
Melhorias no codigo e na logica do referenciamento com a rotina de emergencia
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
diogonac | 0:7049aa99ce41 | 1 | #include "mbed.h" |
diogonac | 0:7049aa99ce41 | 2 | #include "TextLCD.h" |
diogonac | 0:7049aa99ce41 | 3 | |
diogonac | 1:e8be78899409 | 4 | TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD |
diogonac | 1:e8be78899409 | 5 | Serial pc (D1, D0); //Comunicação com USB |
diogonac | 1:e8be78899409 | 6 | AnalogIn eixo_Z(PC_2); //Joystick eixo Z |
diogonac | 1:e8be78899409 | 7 | AnalogIn botao_SELECT(A0); //Botão SELECT da IHM |
diogonac | 1:e8be78899409 | 8 | InterruptIn posicao_salva(PA_15); //Botão de salva posição Joystick |
diogonac | 1:e8be78899409 | 9 | InterruptIn botao_emergencia(PA_14); //Botão de emergência |
diogonac | 1:e8be78899409 | 10 | InterruptIn botao_fim_curso(PC_12); //Chave de fim de curso |
diogonac | 1:e8be78899409 | 11 | DigitalIn botao_indicador_fonte_externa(PC_10); //Indica se os componentes dependentes da fonte externa estão energizados |
diogonac | 0:7049aa99ce41 | 12 | |
diogonac | 1:e8be78899409 | 13 | BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor |
diogonac | 1:e8be78899409 | 14 | Timer debounce1; |
diogonac | 1:e8be78899409 | 15 | Timer debounce2; |
diogonac | 1:e8be78899409 | 16 | Timer debounce3; |
diogonac | 1:e8be78899409 | 17 | Timer debounce4; |
diogonac | 1:e8be78899409 | 18 | |
diogonac | 0:7049aa99ce41 | 19 | float tempo_horario, tempo_anti_horario; //Segundos |
diogonac | 0:7049aa99ce41 | 20 | int pulsos_horario, pulsos_anti_horario; |
diogonac | 0:7049aa99ce41 | 21 | int i; |
diogonac | 0:7049aa99ce41 | 22 | int J_Z; |
diogonac | 0:7049aa99ce41 | 23 | float deslocamento_horario_Z, deslocamento_anti_horario_Z, deslocamento_total_Z; |
diogonac | 0:7049aa99ce41 | 24 | float velocidade_Z; |
diogonac | 0:7049aa99ce41 | 25 | float passo_motor = 18;//5.625/32; |
diogonac | 0:7049aa99ce41 | 26 | int passo_fuso = 5; |
diogonac | 0:7049aa99ce41 | 27 | int pegaZ; |
diogonac | 1:e8be78899409 | 28 | int posicao_salva_estado; |
diogonac | 0:7049aa99ce41 | 29 | int fonte_externa; |
diogonac | 1:e8be78899409 | 30 | int SELECT; |
diogonac | 1:e8be78899409 | 31 | int contador_SELECT = 0; |
diogonac | 1:e8be78899409 | 32 | bool valor_SELECT = false; |
diogonac | 1:e8be78899409 | 33 | bool estado_referenciamento = false; |
diogonac | 1:e8be78899409 | 34 | bool estodo_botao_emergencia = false; |
diogonac | 0:7049aa99ce41 | 35 | void rotina_posicao_salva(void); |
diogonac | 0:7049aa99ce41 | 36 | void rotina_emergencia(void); |
diogonac | 1:e8be78899409 | 37 | void rotina_velocidade_eixo_Z(void); |
diogonac | 1:e8be78899409 | 38 | void rotina_deslocamento_eixo_Z (void); |
diogonac | 1:e8be78899409 | 39 | void rotina_JOG_Z (void); |
diogonac | 1:e8be78899409 | 40 | void rotina_botoes_IHM (void); |
diogonac | 1:e8be78899409 | 41 | void rotina_referenciamento (void); |
diogonac | 1:e8be78899409 | 42 | void rotina_aciona_motor (void); |
diogonac | 0:7049aa99ce41 | 43 | |
diogonac | 0:7049aa99ce41 | 44 | |
diogonac | 0:7049aa99ce41 | 45 | int main() |
diogonac | 0:7049aa99ce41 | 46 | { |
diogonac | 0:7049aa99ce41 | 47 | |
diogonac | 0:7049aa99ce41 | 48 | pc.baud(115200); |
diogonac | 0:7049aa99ce41 | 49 | motor_z = 0x00; |
diogonac | 0:7049aa99ce41 | 50 | posicao_salva.rise(&rotina_posicao_salva); |
diogonac | 1:e8be78899409 | 51 | botao_emergencia.fall(&rotina_emergencia); |
diogonac | 1:e8be78899409 | 52 | botao_fim_curso.rise(&rotina_referenciamento); |
diogonac | 1:e8be78899409 | 53 | wait_ms(500); |
diogonac | 1:e8be78899409 | 54 | lcd.locate(2,0); |
diogonac | 1:e8be78899409 | 55 | lcd.printf("SELECT para"); |
diogonac | 1:e8be78899409 | 56 | lcd.locate(0,1); |
diogonac | 1:e8be78899409 | 57 | lcd.printf("referenciamento"); |
diogonac | 0:7049aa99ce41 | 58 | |
diogonac | 0:7049aa99ce41 | 59 | while(1) { |
diogonac | 0:7049aa99ce41 | 60 | |
diogonac | 0:7049aa99ce41 | 61 | J_Z = eixo_Z.read_u16(); |
diogonac | 0:7049aa99ce41 | 62 | fonte_externa = botao_indicador_fonte_externa.read(); |
diogonac | 1:e8be78899409 | 63 | SELECT = botao_SELECT.read_u16(); |
diogonac | 0:7049aa99ce41 | 64 | |
diogonac | 1:e8be78899409 | 65 | // pc.printf("PosicaoZ=%4f,Posicao_Salva=%d\r\n", deslocamento_total_Z, pegaZ); |
diogonac | 1:e8be78899409 | 66 | // 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 | 1:e8be78899409 | 67 | pc.printf("estado_referenciamento=%d\r\n", estado_referenciamento); |
diogonac | 1:e8be78899409 | 68 | if(fonte_externa == 0 & estado_referenciamento == true & estodo_botao_emergencia == false) { |
diogonac | 1:e8be78899409 | 69 | lcd.locate(2,0); |
diogonac | 1:e8be78899409 | 70 | lcd.printf("PosicaoZ:"); |
diogonac | 0:7049aa99ce41 | 71 | lcd.locate(0,1); |
diogonac | 0:7049aa99ce41 | 72 | lcd.printf("%4fmm",deslocamento_total_Z); |
diogonac | 1:e8be78899409 | 73 | // pc.printf("Fonte=%d\r\n", fonte_externa); |
diogonac | 1:e8be78899409 | 74 | rotina_JOG_Z(); |
diogonac | 0:7049aa99ce41 | 75 | |
diogonac | 1:e8be78899409 | 76 | } else { |
diogonac | 1:e8be78899409 | 77 | rotina_botoes_IHM(); |
diogonac | 1:e8be78899409 | 78 | if(valor_SELECT == 1) { |
diogonac | 1:e8be78899409 | 79 | contador_SELECT = 1; |
diogonac | 1:e8be78899409 | 80 | lcd.cls(); |
diogonac | 1:e8be78899409 | 81 | lcd.locate(2,0); |
diogonac | 1:e8be78899409 | 82 | lcd.printf("Iniciando"); |
diogonac | 1:e8be78899409 | 83 | lcd.locate(0,1); |
diogonac | 1:e8be78899409 | 84 | lcd.printf("referenciamento"); |
diogonac | 1:e8be78899409 | 85 | //rotina_referenciamento(); |
diogonac | 1:e8be78899409 | 86 | pc.printf("estado_referenciamento=%d\r\n", estado_referenciamento); |
diogonac | 1:e8be78899409 | 87 | } |
diogonac | 0:7049aa99ce41 | 88 | } |
diogonac | 0:7049aa99ce41 | 89 | } |
diogonac | 0:7049aa99ce41 | 90 | } |
diogonac | 0:7049aa99ce41 | 91 | |
diogonac | 0:7049aa99ce41 | 92 | |
diogonac | 0:7049aa99ce41 | 93 | void rotina_posicao_salva() |
diogonac | 0:7049aa99ce41 | 94 | { |
diogonac | 1:e8be78899409 | 95 | debounce1.start(); |
diogonac | 1:e8be78899409 | 96 | if(debounce1.read_ms() >= 10) pegaZ = deslocamento_total_Z; |
diogonac | 0:7049aa99ce41 | 97 | else pegaZ = 0; |
diogonac | 1:e8be78899409 | 98 | debounce1.reset(); |
diogonac | 0:7049aa99ce41 | 99 | } |
diogonac | 0:7049aa99ce41 | 100 | |
diogonac | 0:7049aa99ce41 | 101 | void rotina_emergencia() |
diogonac | 0:7049aa99ce41 | 102 | { |
diogonac | 1:e8be78899409 | 103 | debounce2.start(); |
diogonac | 1:e8be78899409 | 104 | if(debounce2.read_ms() >= 10) { |
diogonac | 1:e8be78899409 | 105 | |
diogonac | 1:e8be78899409 | 106 | motor_z = 0x00; |
diogonac | 1:e8be78899409 | 107 | estado_referenciamento = false; |
diogonac | 1:e8be78899409 | 108 | estodo_botao_emergencia = true; |
diogonac | 1:e8be78899409 | 109 | |
diogonac | 1:e8be78899409 | 110 | |
diogonac | 1:e8be78899409 | 111 | pc.printf("Rotina de emergencia \r\n"); |
diogonac | 1:e8be78899409 | 112 | } |
diogonac | 1:e8be78899409 | 113 | debounce2.reset(); |
diogonac | 0:7049aa99ce41 | 114 | } |
diogonac | 0:7049aa99ce41 | 115 | |
diogonac | 1:e8be78899409 | 116 | void rotina_velocidade_eixo_Z() |
diogonac | 0:7049aa99ce41 | 117 | { |
diogonac | 0:7049aa99ce41 | 118 | tempo_horario = -1*J_Z*0.0000028 +0.1875; |
diogonac | 0:7049aa99ce41 | 119 | tempo_anti_horario = J_Z*0.000002785 +0.0025; |
diogonac | 0:7049aa99ce41 | 120 | } |
diogonac | 0:7049aa99ce41 | 121 | |
diogonac | 1:e8be78899409 | 122 | void rotina_deslocamento_eixo_Z() |
diogonac | 0:7049aa99ce41 | 123 | { |
diogonac | 0:7049aa99ce41 | 124 | deslocamento_horario_Z = (passo_fuso*pulsos_horario*passo_motor)/360; |
diogonac | 0:7049aa99ce41 | 125 | deslocamento_anti_horario_Z = (passo_fuso*pulsos_anti_horario*passo_motor)/360; |
diogonac | 0:7049aa99ce41 | 126 | deslocamento_total_Z = deslocamento_anti_horario_Z - deslocamento_horario_Z; |
diogonac | 0:7049aa99ce41 | 127 | } |
diogonac | 0:7049aa99ce41 | 128 | |
diogonac | 1:e8be78899409 | 129 | void rotina_botoes_IHM() |
diogonac | 1:e8be78899409 | 130 | { |
diogonac | 1:e8be78899409 | 131 | if(SELECT > 60000 & SELECT < 65000) valor_SELECT =! valor_SELECT; |
diogonac | 1:e8be78899409 | 132 | else valor_SELECT = 0; |
diogonac | 1:e8be78899409 | 133 | } |
diogonac | 1:e8be78899409 | 134 | |
diogonac | 1:e8be78899409 | 135 | void rotina_referenciamento() |
diogonac | 1:e8be78899409 | 136 | { |
diogonac | 1:e8be78899409 | 137 | |
diogonac | 1:e8be78899409 | 138 | debounce3.start(); |
diogonac | 1:e8be78899409 | 139 | if(debounce3.read_ms() >= 10 & contador_SELECT == 1) { |
diogonac | 1:e8be78899409 | 140 | estado_referenciamento =! estado_referenciamento; |
diogonac | 1:e8be78899409 | 141 | lcd.cls(); |
diogonac | 1:e8be78899409 | 142 | wait_ms(50); |
diogonac | 1:e8be78899409 | 143 | lcd.locate(2,0); |
diogonac | 1:e8be78899409 | 144 | lcd.printf("Detectado"); |
diogonac | 1:e8be78899409 | 145 | wait_ms(1500); |
diogonac | 1:e8be78899409 | 146 | lcd.cls(); |
diogonac | 1:e8be78899409 | 147 | contador_SELECT = 0; |
diogonac | 1:e8be78899409 | 148 | } |
diogonac | 1:e8be78899409 | 149 | debounce3.reset(); |
diogonac | 1:e8be78899409 | 150 | |
diogonac | 1:e8be78899409 | 151 | |
diogonac | 1:e8be78899409 | 152 | } |
diogonac | 1:e8be78899409 | 153 | |
diogonac | 1:e8be78899409 | 154 | |
diogonac | 1:e8be78899409 | 155 | void rotina_aciona_motor_horario() |
diogonac | 1:e8be78899409 | 156 | { |
diogonac | 1:e8be78899409 | 157 | |
diogonac | 1:e8be78899409 | 158 | |
diogonac | 1:e8be78899409 | 159 | |
diogonac | 1:e8be78899409 | 160 | |
diogonac | 1:e8be78899409 | 161 | } |
diogonac | 1:e8be78899409 | 162 | |
diogonac | 1:e8be78899409 | 163 | |
diogonac | 1:e8be78899409 | 164 | void rotina_JOG_Z() |
diogonac | 0:7049aa99ce41 | 165 | { |
diogonac | 0:7049aa99ce41 | 166 | |
diogonac | 0:7049aa99ce41 | 167 | if(31000 <= J_Z & J_Z <= 35000) { |
diogonac | 0:7049aa99ce41 | 168 | |
diogonac | 0:7049aa99ce41 | 169 | motor_z = 0x00; |
diogonac | 0:7049aa99ce41 | 170 | |
diogonac | 0:7049aa99ce41 | 171 | } else { |
diogonac | 0:7049aa99ce41 | 172 | if (J_Z > 31000) { |
diogonac | 0:7049aa99ce41 | 173 | for(i = 0; i < 4; i++) { |
diogonac | 0:7049aa99ce41 | 174 | motor_z = 1 << i; |
diogonac | 1:e8be78899409 | 175 | rotina_velocidade_eixo_Z(); |
diogonac | 1:e8be78899409 | 176 | rotina_deslocamento_eixo_Z(); |
diogonac | 0:7049aa99ce41 | 177 | wait(tempo_horario); |
diogonac | 0:7049aa99ce41 | 178 | pulsos_horario+=1; |
diogonac | 0:7049aa99ce41 | 179 | |
diogonac | 0:7049aa99ce41 | 180 | } |
diogonac | 0:7049aa99ce41 | 181 | } |
diogonac | 0:7049aa99ce41 | 182 | |
diogonac | 0:7049aa99ce41 | 183 | if(J_Z < 35000) { |
diogonac | 0:7049aa99ce41 | 184 | for(i = 3; i > -1; i--) { |
diogonac | 0:7049aa99ce41 | 185 | motor_z = 1 << i; |
diogonac | 1:e8be78899409 | 186 | rotina_velocidade_eixo_Z(); |
diogonac | 1:e8be78899409 | 187 | rotina_deslocamento_eixo_Z(); |
diogonac | 0:7049aa99ce41 | 188 | wait(tempo_anti_horario); |
diogonac | 0:7049aa99ce41 | 189 | pulsos_anti_horario+=1; |
diogonac | 0:7049aa99ce41 | 190 | |
diogonac | 0:7049aa99ce41 | 191 | } |
diogonac | 0:7049aa99ce41 | 192 | } |
diogonac | 0:7049aa99ce41 | 193 | } |
diogonac | 0:7049aa99ce41 | 194 | |
diogonac | 0:7049aa99ce41 | 195 | |
diogonac | 0:7049aa99ce41 | 196 | } |