renomeando para projeto CCM
Embed:
(wiki syntax)
Show/hide line numbers
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