Fernando Sakabe / Mbed 2 deprecated Projeto_CCM

Dependencies:   mbed

Committer:
fernandosakabe
Date:
Tue Nov 29 16:20:11 2022 +0000
Revision:
1:a5accbc79c11
Parent:
0:cc81b0dd1ded
Projeto CCM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fernandosakabe 1:a5accbc79c11 1 #include "mbed.h" //Inclui biblioteca mbed
fernandosakabe 0:cc81b0dd1ded 2
fernandosakabe 1:a5accbc79c11 3 //Pinos do motor de passo
fernandosakabe 1:a5accbc79c11 4 DigitalOut EN_A (D10);
fernandosakabe 0:cc81b0dd1ded 5 DigitalOut IN1_A (D5);
fernandosakabe 0:cc81b0dd1ded 6 DigitalOut IN2_A (D4);
fernandosakabe 0:cc81b0dd1ded 7 DigitalOut EN_B (A4);
fernandosakabe 0:cc81b0dd1ded 8 DigitalOut IN1_B (A0);
fernandosakabe 0:cc81b0dd1ded 9 DigitalOut IN2_B (A1);
fernandosakabe 0:cc81b0dd1ded 10
fernandosakabe 1:a5accbc79c11 11 //pinos motor DC
fernandosakabe 1:a5accbc79c11 12 PwmOut EN_A_DC (D11);
fernandosakabe 1:a5accbc79c11 13 DigitalOut IN1_A_DC (D12);
fernandosakabe 1:a5accbc79c11 14 DigitalOut IN2_A_DC (D13);
fernandosakabe 0:cc81b0dd1ded 15
fernandosakabe 1:a5accbc79c11 16 Timeout desaciona_DC; //timeout que define quantidade tempo o motor DC vai rodar
fernandosakabe 0:cc81b0dd1ded 17
fernandosakabe 1:a5accbc79c11 18 int motor; //escolhe qual motor vai ser acionado
fernandosakabe 1:a5accbc79c11 19 int enable_passo=0; // liga/desliga motor de passo
fernandosakabe 1:a5accbc79c11 20 int enable_DC=0; // liga/desliga motor DC
fernandosakabe 1:a5accbc79c11 21 int sentido_passo; //define sentido de rotação do motor de passo
fernandosakabe 1:a5accbc79c11 22 int sentido_DC; //define sentido de rotação do motor de passo
fernandosakabe 1:a5accbc79c11 23 float velocidade_passo; //define velocidade do motor de passo em RPM
fernandosakabe 1:a5accbc79c11 24 float velocidade_DC; //define velocidade do motor DC em RPM
fernandosakabe 1:a5accbc79c11 25 int numero_rotacoes_passo=0; //define quantas vezes o motor de passo vai rodar
fernandosakabe 1:a5accbc79c11 26 int numero_de_passos_passo_pratico=0; //define a quantidade de passos que o motor deu
fernandosakabe 1:a5accbc79c11 27 float tempo_rotacionando_DC=0; //Define por quanto tempo o motor DC vai estar acionado
fernandosakabe 1:a5accbc79c11 28 float numero_de_passos_por_volta_passo=200; //A quantidade de passos por volta do motor de passo é 200
fernandosakabe 1:a5accbc79c11 29 float tempo_passo; //Calcula o wait a ser utilizado para cada fase
fernandosakabe 1:a5accbc79c11 30 float duty_cycle_DC=1; //define o duty cycle
fernandosakabe 1:a5accbc79c11 31 int ligado_DC; //aciona ou desaciona o motor DC no meio do suo
fernandosakabe 1:a5accbc79c11 32
fernandosakabe 1:a5accbc79c11 33 void desliga() //Muda valor de ligado_DC
fernandosakabe 0:cc81b0dd1ded 34 {
fernandosakabe 1:a5accbc79c11 35 ligado_DC=!ligado_DC;
fernandosakabe 0:cc81b0dd1ded 36 }
fernandosakabe 0:cc81b0dd1ded 37
fernandosakabe 0:cc81b0dd1ded 38 int main()
fernandosakabe 0:cc81b0dd1ded 39
fernandosakabe 0:cc81b0dd1ded 40 {
fernandosakabe 1:a5accbc79c11 41
fernandosakabe 0:cc81b0dd1ded 42 while(1) {
fernandosakabe 1:a5accbc79c11 43
fernandosakabe 1:a5accbc79c11 44 //Perguntas para atribuir valor das variáveis
fernandosakabe 1:a5accbc79c11 45 printf("Digite 0 para motor de passo ou 1 para DC \r\n");
fernandosakabe 1:a5accbc79c11 46 scanf("%d", &motor );
fernandosakabe 1:a5accbc79c11 47 if(motor==0) {
fernandosakabe 1:a5accbc79c11 48 printf("Digite 1 para acionar o motor de passo e 0 para desacionar\r\n");
fernandosakabe 1:a5accbc79c11 49 scanf("%d", &enable_passo);
fernandosakabe 1:a5accbc79c11 50 if(enable_passo==1){
fernandosakabe 1:a5accbc79c11 51 printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n");
fernandosakabe 1:a5accbc79c11 52 scanf("%d", &sentido_passo);
fernandosakabe 1:a5accbc79c11 53 printf("Digite a Velocidade em RPM do motor de passo (valor entre 0 e 60 RPM)\r\n");
fernandosakabe 1:a5accbc79c11 54 scanf("%f", &velocidade_passo);
fernandosakabe 1:a5accbc79c11 55 printf("Digite o número de rotações do motor de passo\r\n");
fernandosakabe 1:a5accbc79c11 56 scanf("%d", &numero_rotacoes_passo);
fernandosakabe 1:a5accbc79c11 57 }
fernandosakabe 1:a5accbc79c11 58 } else if(motor==1) {
fernandosakabe 1:a5accbc79c11 59 printf("Digite 1 para acionar o motor DC e 0 para desacionar\r\n");
fernandosakabe 1:a5accbc79c11 60 scanf("%d", &enable_DC);
fernandosakabe 1:a5accbc79c11 61 if(enable_DC==1) {
fernandosakabe 1:a5accbc79c11 62 printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n");
fernandosakabe 1:a5accbc79c11 63 scanf("%d", &sentido_DC);
fernandosakabe 1:a5accbc79c11 64 printf("Digite a Velocidade em RPM do motor DC (valor entre 900 e 2000 RPM))\r\n");
fernandosakabe 1:a5accbc79c11 65 scanf("%f", &velocidade_DC);
fernandosakabe 1:a5accbc79c11 66 printf("Digite o tempo de rotação do motor DC em segundos\r\n");
fernandosakabe 1:a5accbc79c11 67 scanf("%f", &tempo_rotacionando_DC);
fernandosakabe 1:a5accbc79c11 68 }
fernandosakabe 1:a5accbc79c11 69 }
fernandosakabe 1:a5accbc79c11 70
fernandosakabe 1:a5accbc79c11 71 if(motor==0) { //escolhe qual motor será ativado. No caso o de passo.
fernandosakabe 1:a5accbc79c11 72
fernandosakabe 1:a5accbc79c11 73 tempo_passo=0.3/velocidade_passo; //Calcula o tempo do passo pela velocidade inserida pelo usuário
fernandosakabe 1:a5accbc79c11 74 numero_de_passos_passo_pratico=0; //Contador de passos
fernandosakabe 1:a5accbc79c11 75 while(numero_de_passos_passo_pratico < numero_de_passos_por_volta_passo*numero_rotacoes_passo) { //roda o motor até numero de rotações definidas
fernandosakabe 1:a5accbc79c11 76 if(enable_passo) {
fernandosakabe 1:a5accbc79c11 77 //Define se o motor rotacionará no sentido horario ou anti-horario
fernandosakabe 1:a5accbc79c11 78 switch(sentido_passo) {
fernandosakabe 1:a5accbc79c11 79 case 0:
fernandosakabe 0:cc81b0dd1ded 80
fernandosakabe 1:a5accbc79c11 81 //passo 0
fernandosakabe 0:cc81b0dd1ded 82
fernandosakabe 1:a5accbc79c11 83 EN_A = 1;
fernandosakabe 1:a5accbc79c11 84 IN1_A = 1;
fernandosakabe 1:a5accbc79c11 85 IN2_A = 0;
fernandosakabe 1:a5accbc79c11 86 EN_B = 1;
fernandosakabe 1:a5accbc79c11 87 IN1_B = 1;
fernandosakabe 1:a5accbc79c11 88 IN2_B = 0;
fernandosakabe 1:a5accbc79c11 89 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 1:a5accbc79c11 90
fernandosakabe 1:a5accbc79c11 91 //passo 1
fernandosakabe 0:cc81b0dd1ded 92
fernandosakabe 1:a5accbc79c11 93 EN_A = 1;
fernandosakabe 1:a5accbc79c11 94 IN1_A = 0;
fernandosakabe 1:a5accbc79c11 95 IN2_A = 1;
fernandosakabe 1:a5accbc79c11 96 EN_B = 1;
fernandosakabe 1:a5accbc79c11 97 IN1_B = 1;
fernandosakabe 1:a5accbc79c11 98 IN2_B = 0;
fernandosakabe 1:a5accbc79c11 99 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 100
fernandosakabe 1:a5accbc79c11 101 //passo 2
fernandosakabe 0:cc81b0dd1ded 102
fernandosakabe 1:a5accbc79c11 103 EN_A = 1;
fernandosakabe 1:a5accbc79c11 104 IN1_A = 0;
fernandosakabe 1:a5accbc79c11 105 IN2_A = 1;
fernandosakabe 1:a5accbc79c11 106 EN_B =1 ;
fernandosakabe 1:a5accbc79c11 107 IN1_B = 0;
fernandosakabe 1:a5accbc79c11 108 IN2_B = 1;
fernandosakabe 1:a5accbc79c11 109 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 110
fernandosakabe 1:a5accbc79c11 111 //passo 3
fernandosakabe 0:cc81b0dd1ded 112
fernandosakabe 1:a5accbc79c11 113 EN_A = 1;
fernandosakabe 1:a5accbc79c11 114 IN1_A = 1;
fernandosakabe 1:a5accbc79c11 115 IN2_A = 0;
fernandosakabe 1:a5accbc79c11 116 EN_B = 1;
fernandosakabe 1:a5accbc79c11 117 IN1_B = 0;
fernandosakabe 1:a5accbc79c11 118 IN2_B = 1;
fernandosakabe 1:a5accbc79c11 119 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 1:a5accbc79c11 120 break;
fernandosakabe 0:cc81b0dd1ded 121
fernandosakabe 1:a5accbc79c11 122 case 1:
fernandosakabe 1:a5accbc79c11 123
fernandosakabe 1:a5accbc79c11 124 //passo 3
fernandosakabe 0:cc81b0dd1ded 125
fernandosakabe 1:a5accbc79c11 126 EN_A = 1;
fernandosakabe 1:a5accbc79c11 127 IN1_A = 1;
fernandosakabe 1:a5accbc79c11 128 IN2_A = 0;
fernandosakabe 1:a5accbc79c11 129 EN_B = 1;
fernandosakabe 1:a5accbc79c11 130 IN1_B = 0;
fernandosakabe 1:a5accbc79c11 131 IN2_B = 1;
fernandosakabe 1:a5accbc79c11 132 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 133
fernandosakabe 1:a5accbc79c11 134 //passo 2
fernandosakabe 1:a5accbc79c11 135
fernandosakabe 1:a5accbc79c11 136 EN_A = 1;
fernandosakabe 1:a5accbc79c11 137 IN1_A = 0;
fernandosakabe 1:a5accbc79c11 138 IN2_A = 1;
fernandosakabe 1:a5accbc79c11 139 EN_B = 1;
fernandosakabe 1:a5accbc79c11 140 IN1_B = 0;
fernandosakabe 1:a5accbc79c11 141 IN2_B = 1;
fernandosakabe 1:a5accbc79c11 142 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 143
fernandosakabe 1:a5accbc79c11 144 //passo 1
fernandosakabe 0:cc81b0dd1ded 145
fernandosakabe 1:a5accbc79c11 146 EN_A = 1;
fernandosakabe 1:a5accbc79c11 147 IN1_A = 0;
fernandosakabe 1:a5accbc79c11 148 IN2_A = 1;
fernandosakabe 1:a5accbc79c11 149 EN_B = 1;
fernandosakabe 1:a5accbc79c11 150 IN1_B = 1;
fernandosakabe 1:a5accbc79c11 151 IN2_B = 0;
fernandosakabe 1:a5accbc79c11 152 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 1:a5accbc79c11 153
fernandosakabe 1:a5accbc79c11 154 //passo 0
fernandosakabe 0:cc81b0dd1ded 155
fernandosakabe 1:a5accbc79c11 156 EN_A = 1;
fernandosakabe 1:a5accbc79c11 157 IN1_A = 1;
fernandosakabe 1:a5accbc79c11 158 IN2_A = 0;
fernandosakabe 1:a5accbc79c11 159 EN_B = 1;
fernandosakabe 1:a5accbc79c11 160 IN1_B = 1;
fernandosakabe 1:a5accbc79c11 161 IN2_B = 0;
fernandosakabe 1:a5accbc79c11 162 wait(tempo_passo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 163
fernandosakabe 1:a5accbc79c11 164 break;
fernandosakabe 1:a5accbc79c11 165
fernandosakabe 1:a5accbc79c11 166 }
fernandosakabe 1:a5accbc79c11 167 numero_de_passos_passo_pratico+=4;
fernandosakabe 1:a5accbc79c11 168 } else {
fernandosakabe 1:a5accbc79c11 169 //se botão enable desativado, desativa o EN_A e EN_B
fernandosakabe 1:a5accbc79c11 170 EN_A=0;
fernandosakabe 1:a5accbc79c11 171 EN_B=0;
fernandosakabe 1:a5accbc79c11 172 }
fernandosakabe 1:a5accbc79c11 173 }
fernandosakabe 1:a5accbc79c11 174 } else if(motor==1) { //escolhe qual motor será ativado. No caso o DC
fernandosakabe 0:cc81b0dd1ded 175
fernandosakabe 1:a5accbc79c11 176 ligado_DC=1;
fernandosakabe 1:a5accbc79c11 177 desaciona_DC.attach(&desliga, tempo_rotacionando_DC); //aciona o Timeout pelo tempo definidopelo usuário. Este timout desligara o motor.
fernandosakabe 1:a5accbc79c11 178
fernandosakabe 1:a5accbc79c11 179 //O duty cycle foi calculado de acordo com a linha de tendência do gráfico obtido variando a velocidade pelo PWM a partir de testes.
fernandosakabe 1:a5accbc79c11 180 duty_cycle_DC = 8*(0.00000000001)*(velocidade_DC*velocidade_DC*velocidade_DC) - 4*(0.0000001)*(velocidade_DC*velocidade_DC) + 0.0005*velocidade_DC - 0.0274;
fernandosakabe 1:a5accbc79c11 181 if(enable_DC) {
fernandosakabe 1:a5accbc79c11 182 if(sentido_DC==0) { //define se o motor rotacionará pelo sentido horário ou anti-horario
fernandosakabe 1:a5accbc79c11 183 IN1_A_DC=0;
fernandosakabe 1:a5accbc79c11 184 IN2_A_DC=1;
fernandosakabe 0:cc81b0dd1ded 185
fernandosakabe 1:a5accbc79c11 186 while(ligado_DC) {
fernandosakabe 1:a5accbc79c11 187 EN_A_DC.write(duty_cycle_DC); //Aciona motor DC na velocidade e sentido definido peo tempo também definido pelo usuário
fernandosakabe 0:cc81b0dd1ded 188
fernandosakabe 1:a5accbc79c11 189 }
fernandosakabe 1:a5accbc79c11 190 } else if(sentido_DC==1) {
fernandosakabe 1:a5accbc79c11 191 IN1_A_DC=1;
fernandosakabe 1:a5accbc79c11 192 IN2_A_DC=0;
fernandosakabe 1:a5accbc79c11 193 while(ligado_DC) {
fernandosakabe 1:a5accbc79c11 194 EN_A_DC.write(duty_cycle_DC);
fernandosakabe 1:a5accbc79c11 195 }
fernandosakabe 1:a5accbc79c11 196 }
fernandosakabe 0:cc81b0dd1ded 197 }
fernandosakabe 1:a5accbc79c11 198 IN1_A_DC=0; //desaciona o motor DC
fernandosakabe 1:a5accbc79c11 199 IN2_A_DC=0;
fernandosakabe 1:a5accbc79c11 200 EN_A_DC.write(0);
fernandosakabe 0:cc81b0dd1ded 201 }
fernandosakabe 0:cc81b0dd1ded 202 }
fernandosakabe 0:cc81b0dd1ded 203 }