Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" //Inclui biblioteca mbed 00002 00003 //Pinos do motor de passo 00004 DigitalOut EN_A (D10); 00005 DigitalOut IN1_A (D5); 00006 DigitalOut IN2_A (D4); 00007 DigitalOut EN_B (A4); 00008 DigitalOut IN1_B (A0); 00009 DigitalOut IN2_B (A1); 00010 00011 //pinos motor DC 00012 PwmOut EN_A_DC (D11); 00013 DigitalOut IN1_A_DC (D12); 00014 DigitalOut IN2_A_DC (D13); 00015 00016 Timeout desaciona_DC; //timeout que define quantidade tempo o motor DC vai rodar 00017 00018 int motor; //escolhe qual motor vai ser acionado 00019 int enable_passo=0; // liga/desliga motor de passo 00020 int enable_DC=0; // liga/desliga motor DC 00021 int sentido_passo; //define sentido de rotação do motor de passo 00022 int sentido_DC; //define sentido de rotação do motor de passo 00023 float velocidade_passo; //define velocidade do motor de passo em RPM 00024 float velocidade_DC; //define velocidade do motor DC em RPM 00025 int numero_rotacoes_passo=0; //define quantas vezes o motor de passo vai rodar 00026 int numero_de_passos_passo_pratico=0; //define a quantidade de passos que o motor deu 00027 float tempo_rotacionando_DC=0; //Define por quanto tempo o motor DC vai estar acionado 00028 float numero_de_passos_por_volta_passo=200; //A quantidade de passos por volta do motor de passo é 200 00029 float tempo_passo; //Calcula o wait a ser utilizado para cada fase 00030 float duty_cycle_DC=1; //define o duty cycle 00031 int ligado_DC; //aciona ou desaciona o motor DC no meio do suo 00032 00033 void desliga() //Muda valor de ligado_DC 00034 { 00035 ligado_DC=!ligado_DC; 00036 } 00037 00038 int main() 00039 00040 { 00041 00042 while(1) { 00043 00044 //Perguntas para atribuir valor das variáveis 00045 printf("Digite 0 para motor de passo ou 1 para DC \r\n"); 00046 scanf("%d", &motor ); 00047 if(motor==0) { 00048 printf("Digite 1 para acionar o motor de passo e 0 para desacionar\r\n"); 00049 scanf("%d", &enable_passo); 00050 if(enable_passo==1){ 00051 printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n"); 00052 scanf("%d", &sentido_passo); 00053 printf("Digite a Velocidade em RPM do motor de passo (valor entre 0 e 60 RPM)\r\n"); 00054 scanf("%f", &velocidade_passo); 00055 printf("Digite o número de rotações do motor de passo\r\n"); 00056 scanf("%d", &numero_rotacoes_passo); 00057 } 00058 } else if(motor==1) { 00059 printf("Digite 1 para acionar o motor DC e 0 para desacionar\r\n"); 00060 scanf("%d", &enable_DC); 00061 if(enable_DC==1) { 00062 printf("Digite 0 para sentido horario e 1 para sentido anti-horario\r\n"); 00063 scanf("%d", &sentido_DC); 00064 printf("Digite a Velocidade em RPM do motor DC (valor entre 900 e 2000 RPM))\r\n"); 00065 scanf("%f", &velocidade_DC); 00066 printf("Digite o tempo de rotação do motor DC em segundos\r\n"); 00067 scanf("%f", &tempo_rotacionando_DC); 00068 } 00069 } 00070 00071 if(motor==0) { //escolhe qual motor será ativado. No caso o de passo. 00072 00073 tempo_passo=0.3/velocidade_passo; //Calcula o tempo do passo pela velocidade inserida pelo usuário 00074 numero_de_passos_passo_pratico=0; //Contador de passos 00075 while(numero_de_passos_passo_pratico < numero_de_passos_por_volta_passo*numero_rotacoes_passo) { //roda o motor até numero de rotações definidas 00076 if(enable_passo) { 00077 //Define se o motor rotacionará no sentido horario ou anti-horario 00078 switch(sentido_passo) { 00079 case 0: 00080 00081 //passo 0 00082 00083 EN_A = 1; 00084 IN1_A = 1; 00085 IN2_A = 0; 00086 EN_B = 1; 00087 IN1_B = 1; 00088 IN2_B = 0; 00089 wait(tempo_passo); //periodo definido anteriormente 00090 00091 //passo 1 00092 00093 EN_A = 1; 00094 IN1_A = 0; 00095 IN2_A = 1; 00096 EN_B = 1; 00097 IN1_B = 1; 00098 IN2_B = 0; 00099 wait(tempo_passo); //periodo definido anteriormente 00100 00101 //passo 2 00102 00103 EN_A = 1; 00104 IN1_A = 0; 00105 IN2_A = 1; 00106 EN_B =1 ; 00107 IN1_B = 0; 00108 IN2_B = 1; 00109 wait(tempo_passo); //periodo definido anteriormente 00110 00111 //passo 3 00112 00113 EN_A = 1; 00114 IN1_A = 1; 00115 IN2_A = 0; 00116 EN_B = 1; 00117 IN1_B = 0; 00118 IN2_B = 1; 00119 wait(tempo_passo); //periodo definido anteriormente 00120 break; 00121 00122 case 1: 00123 00124 //passo 3 00125 00126 EN_A = 1; 00127 IN1_A = 1; 00128 IN2_A = 0; 00129 EN_B = 1; 00130 IN1_B = 0; 00131 IN2_B = 1; 00132 wait(tempo_passo); //periodo definido anteriormente 00133 00134 //passo 2 00135 00136 EN_A = 1; 00137 IN1_A = 0; 00138 IN2_A = 1; 00139 EN_B = 1; 00140 IN1_B = 0; 00141 IN2_B = 1; 00142 wait(tempo_passo); //periodo definido anteriormente 00143 00144 //passo 1 00145 00146 EN_A = 1; 00147 IN1_A = 0; 00148 IN2_A = 1; 00149 EN_B = 1; 00150 IN1_B = 1; 00151 IN2_B = 0; 00152 wait(tempo_passo); //periodo definido anteriormente 00153 00154 //passo 0 00155 00156 EN_A = 1; 00157 IN1_A = 1; 00158 IN2_A = 0; 00159 EN_B = 1; 00160 IN1_B = 1; 00161 IN2_B = 0; 00162 wait(tempo_passo); //periodo definido anteriormente 00163 00164 break; 00165 00166 } 00167 numero_de_passos_passo_pratico+=4; 00168 } else { 00169 //se botão enable desativado, desativa o EN_A e EN_B 00170 EN_A=0; 00171 EN_B=0; 00172 } 00173 } 00174 } else if(motor==1) { //escolhe qual motor será ativado. No caso o DC 00175 00176 ligado_DC=1; 00177 desaciona_DC.attach(&desliga, tempo_rotacionando_DC); //aciona o Timeout pelo tempo definidopelo usuário. Este timout desligara o motor. 00178 00179 //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. 00180 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; 00181 if(enable_DC) { 00182 if(sentido_DC==0) { //define se o motor rotacionará pelo sentido horário ou anti-horario 00183 IN1_A_DC=0; 00184 IN2_A_DC=1; 00185 00186 while(ligado_DC) { 00187 EN_A_DC.write(duty_cycle_DC); //Aciona motor DC na velocidade e sentido definido peo tempo também definido pelo usuário 00188 00189 } 00190 } else if(sentido_DC==1) { 00191 IN1_A_DC=1; 00192 IN2_A_DC=0; 00193 while(ligado_DC) { 00194 EN_A_DC.write(duty_cycle_DC); 00195 } 00196 } 00197 } 00198 IN1_A_DC=0; //desaciona o motor DC 00199 IN2_A_DC=0; 00200 EN_A_DC.write(0); 00201 } 00202 } 00203 }
Generated on Mon Jan 30 2023 03:58:34 by
1.7.2