renomeando para projeto CCM

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
fernandosakabe
Date:
Tue Nov 29 16:20:11 2022 +0000
Parent:
0:cc81b0dd1ded
Commit message:
Projeto CCM

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Oct 31 02:41:59 2022 +0000
+++ b/main.cpp	Tue Nov 29 16:20:11 2022 +0000
@@ -1,159 +1,203 @@
-#include "mbed.h" //Incluea biblioteca mbed
+#include "mbed.h" //Inclui biblioteca mbed
 
-//define quais pinos serão para acionar a IHM
-DigitalOut EN_A (D2);
+//Pinos do motor de passo
+DigitalOut EN_A (D10);
 DigitalOut IN1_A (D5);
 DigitalOut IN2_A (D4);
 DigitalOut EN_B (A4);
 DigitalOut IN1_B (A0);
 DigitalOut IN2_B (A1);
 
+//pinos motor DC
+PwmOut EN_A_DC (D11);
+DigitalOut IN1_A_DC (D12);
+DigitalOut IN2_A_DC (D13);
 
-InterruptIn interr(D8); //Define o InterruptIn para identificar os sinais da onda quadrada
-DigitalIn enable (D12); //Botão que liga e desliga projeto
-InterruptIn push(PC_13); //Botão de usuário que muda a direção do motor
-float periodo_seg = 2.0; //Quantidade de tempo em que se define a frequência do motor
-float frequencia = 0; //Frequência do motor
-float Tempo; //Periodo da onda
-int contador=0; //Conta a quantidadde de pulsos no periodo_seg
-Ticker tempo_alto;//Aciona função de calcula_frequencia (calcula a frequencia)
-int horario = 0; //Determina o sentido de rotação do motor em horário ou anti-horário
+Timeout desaciona_DC; //timeout que define quantidade tempo o motor DC vai rodar
 
-void muda_direcao() //Função que faz com que o sentido mude de horario para anti-horario e vice e versa
+int motor; //escolhe qual motor vai ser acionado
+int enable_passo=0; // liga/desliga motor de passo
+int enable_DC=0; // liga/desliga motor DC
+int sentido_passo; //define sentido de rotação do motor de passo
+int sentido_DC; //define sentido de rotação do motor de passo
+float velocidade_passo; //define velocidade do motor de passo em RPM
+float velocidade_DC; //define velocidade do motor DC em RPM
+int numero_rotacoes_passo=0; //define quantas vezes o motor de passo vai rodar
+int numero_de_passos_passo_pratico=0; //define a quantidade de passos que o motor deu
+float tempo_rotacionando_DC=0; //Define por quanto tempo  o motor DC vai estar acionado
+float numero_de_passos_por_volta_passo=200; //A quantidade de passos por volta do motor de passo é 200
+float tempo_passo; //Calcula o wait a ser utilizado para cada fase
+float duty_cycle_DC=1; //define o duty cycle
+int ligado_DC; //aciona ou desaciona o motor DC no meio do suo
+
+void desliga() //Muda valor de ligado_DC
 {
-    if(horario==1) {
-        horario=0;
-    } else {
-        horario=1;
-    }
-}
-void alto() //Função que conta quantas vezes o InterruptIn foi acionado.
-{
-    contador++;
-}
-
-void calcula_frequencia() //Função que calcula a frequencia
-{
-    frequencia=contador/periodo_seg;
-    contador=0;
+    ligado_DC=!ligado_DC;
 }
 
 int main()
 
 {
-    push.rise(&muda_direcao); //ativa a funcao muda direção quando obotão de usuário é acionado
-    interr.rise(&alto); //Ativa a função alto quando há um rise nas ondas
-    tempo_alto.attach(&calcula_frequencia, periodo_seg); //Ativa a funcao calcula a cada passagem de periodo
-
-    EN_A = 0; // Desliga Ponte-H (A)
-    EN_B = 0; // Desliga Ponte-H (B)
-    IN1_A = 0;
-    IN2_A = 0; // Ponte-H (A) Motor 'travado'
-    IN1_A = 0;
-    IN1_B = 0; // Ponte-H (B) Motor 'travado’
-
+    
     while(1) {
-        Tempo = 1/frequencia; //calcula periodo a partir da frequencia
-        printf("TEMPO = %f FREQUENCIA = %f \n\r", Tempo, frequencia);
-        //Se o botão enable estiver acionado, liga o sistema
-        if(enable) {
-            //Define se o motor rotacionará no sentido horario ou anit-horario
-            switch(horario) {
-                case 0:
-
-                //passo 0
+        
+        //Perguntas para atribuir valor das variáveis 
+        printf("Digite 0 para motor de passo ou 1 para DC \r\n");
+        scanf("%d", &motor );
+        if(motor==0) {
+            printf("Digite 1 para acionar o motor de passo e 0 para desacionar\r\n");
+            scanf("%d", &enable_passo);
+            if(enable_passo==1){
+                printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n");
+                scanf("%d", &sentido_passo);
+                printf("Digite a Velocidade em RPM do motor de passo (valor entre 0 e 60 RPM)\r\n");
+                scanf("%f", &velocidade_passo);
+                printf("Digite o número de rotações do motor de passo\r\n");
+                scanf("%d", &numero_rotacoes_passo);
+            }
+        } else if(motor==1) {
+            printf("Digite 1 para acionar o motor DC e 0 para desacionar\r\n");
+            scanf("%d", &enable_DC);
+            if(enable_DC==1) {
+                printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n");
+                scanf("%d", &sentido_DC);
+                printf("Digite a Velocidade em RPM do motor DC (valor entre 900 e 2000 RPM))\r\n");
+                scanf("%f", &velocidade_DC);
+                printf("Digite o tempo de rotação do motor DC em segundos\r\n");
+                scanf("%f", &tempo_rotacionando_DC);
+            }
+        }
+        
+        if(motor==0) {        //escolhe qual motor será ativado. No caso o de passo.
+    
+            tempo_passo=0.3/velocidade_passo; //Calcula o tempo do passo pela velocidade inserida pelo usuário
+            numero_de_passos_passo_pratico=0; //Contador de passos
+            while(numero_de_passos_passo_pratico < numero_de_passos_por_volta_passo*numero_rotacoes_passo) { //roda o motor até numero de rotações definidas
+                if(enable_passo) {
+                    //Define se o motor rotacionará no sentido horario ou anti-horario
+                    switch(sentido_passo) {
+                        case 0:
 
-                    EN_A = 1;
-                    IN1_A = 1;
-                    IN2_A = 0;
-                    EN_B = 1;
-                    IN1_B = 1;
-                    IN2_B = 0;
-                    wait(Tempo); //periodo definido anteriormente
+                            //passo 0
 
-                //passo 1
+                            EN_A = 1;
+                            IN1_A = 1;
+                            IN2_A = 0;
+                            EN_B = 1;
+                            IN1_B = 1;
+                            IN2_B = 0;
+                            wait(tempo_passo); //periodo definido anteriormente
+
+                            //passo 1
 
-                    EN_A = 1;
-                    IN1_A = 0;
-                    IN2_A = 1;
-                    EN_B = 1;
-                    IN1_B = 1;
-                    IN2_B = 0;
-                    wait(Tempo); //periodo definido anteriormente
+                            EN_A = 1;
+                            IN1_A = 0;
+                            IN2_A = 1;
+                            EN_B = 1;
+                            IN1_B = 1;
+                            IN2_B = 0;
+                            wait(tempo_passo); //periodo definido anteriormente
 
-                //passo 2 
+                            //passo 2
 
-                    EN_A = 1;
-                    IN1_A = 0;
-                    IN2_A = 1;
-                    EN_B =1 ;
-                    IN1_B = 0;
-                    IN2_B = 1;
-                    wait(Tempo); //periodo definido anteriormente
+                            EN_A = 1;
+                            IN1_A = 0;
+                            IN2_A = 1;
+                            EN_B =1 ;
+                            IN1_B = 0;
+                            IN2_B = 1;
+                            wait(tempo_passo); //periodo definido anteriormente
 
-                //passo 3
+                            //passo 3
 
-                    EN_A = 1;
-                    IN1_A = 1;
-                    IN2_A = 0;
-                    EN_B = 1;
-                    IN1_B = 0;
-                    IN2_B = 1;
-                    wait(Tempo); //periodo definido anteriormente
+                            EN_A = 1;
+                            IN1_A = 1;
+                            IN2_A = 0;
+                            EN_B = 1;
+                            IN1_B = 0;
+                            IN2_B = 1;
+                            wait(tempo_passo); //periodo definido anteriormente
+                            break;
 
-                    break;
+                        case 1:
+
+                            //passo 3
 
-                case 1:
+                            EN_A = 1;
+                            IN1_A = 1;
+                            IN2_A = 0;
+                            EN_B = 1;
+                            IN1_B = 0;
+                            IN2_B = 1;
+                            wait(tempo_passo); //periodo definido anteriormente
 
-                //passo 3
+                            //passo 2
+
+                            EN_A = 1;
+                            IN1_A = 0;
+                            IN2_A = 1;
+                            EN_B = 1;
+                            IN1_B = 0;
+                            IN2_B = 1;
+                            wait(tempo_passo); //periodo definido anteriormente
 
-                    EN_A = 1;
-                    IN1_A = 1;
-                    IN2_A = 0;
-                    EN_B = 1;
-                    IN1_B = 0;
-                    IN2_B = 1;
-                    wait(Tempo); //periodo definido anteriormente
+                            //passo 1
 
-                //passo 2
+                            EN_A = 1;
+                            IN1_A = 0;
+                            IN2_A = 1;
+                            EN_B = 1;
+                            IN1_B = 1;
+                            IN2_B = 0;
+                            wait(tempo_passo); //periodo definido anteriormente
+
+                            //passo 0
 
-                    EN_A = 1;
-                    IN1_A = 0;
-                    IN2_A = 1;
-                    EN_B = 1;
-                    IN1_B = 0;
-                    IN2_B = 1;
-                    wait(Tempo); //periodo definido anteriormente
+                            EN_A = 1;
+                            IN1_A = 1;
+                            IN2_A = 0;
+                            EN_B = 1;
+                            IN1_B = 1;
+                            IN2_B = 0;
+                            wait(tempo_passo); //periodo definido anteriormente
 
-                //passo 1
-
-                    EN_A = 1;
-                    IN1_A = 0;
-                    IN2_A = 1;
-                    EN_B = 1;
-                    IN1_B = 1;
-                    IN2_B = 0;
-                    wait(Tempo); //periodo definido anteriormente
+                            break;
+                            
+                    }
+                    numero_de_passos_passo_pratico+=4;
+                } else {
+                    //se botão enable desativado, desativa o EN_A e EN_B
+                    EN_A=0;
+                    EN_B=0;
+                }
+            }
+        } else if(motor==1) {         //escolhe qual motor será ativado. No caso o DC
 
-                //passo 0
+            ligado_DC=1;
+            desaciona_DC.attach(&desliga, tempo_rotacionando_DC); //aciona o Timeout pelo tempo definidopelo usuário. Este timout desligara o motor.
+            
+            //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.
+            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;
+            if(enable_DC) {
+                if(sentido_DC==0) { //define se o motor rotacionará pelo sentido horário ou anti-horario
+                    IN1_A_DC=0;
+                    IN2_A_DC=1;
 
-                    EN_A = 1;
-                    IN1_A = 1;
-                    IN2_A = 0;
-                    EN_B = 1;
-                    IN1_B = 1;
-                    IN2_B = 0;
-                    wait(Tempo); //periodo definido anteriormente
+                    while(ligado_DC) { 
+                        EN_A_DC.write(duty_cycle_DC); //Aciona motor DC na velocidade e sentido definido peo tempo também definido pelo usuário
 
-                    break;
-
+                    }
+                } else if(sentido_DC==1) {
+                    IN1_A_DC=1;
+                    IN2_A_DC=0;
+                    while(ligado_DC) {
+                        EN_A_DC.write(duty_cycle_DC);
+                    }
+                }
             }
-
-        } else {
-            //se botão enable desativado, desativa o EN_A e EN_B
-            EN_A=0;
-            EN_B=0;
-
+            IN1_A_DC=0; //desaciona o motor DC
+            IN2_A_DC=0;
+            EN_A_DC.write(0);
         }
     }
 }