Centro de Controle de Motores

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers passo.cpp Source File

passo.cpp

00001 /*******************************************
00002 Motor de Passo
00003 *******************************************/
00004 
00005 #include "mbed.h"
00006 
00007 Serial pc(USBTX, USBRX);
00008 
00009 // variáveis
00010 int estado = 0;
00011 float tempo;
00012 char ligado = 'c';
00013 char desligado = 'd';
00014 char hor = 'h';
00015 char antihor = 't';
00016 
00017 // motor de passo
00018 DigitalOut EN_A(D2);
00019 DigitalOut IN1_A(D5);
00020 DigitalOut IN2_A(D4);
00021 DigitalOut EN_B(A4);
00022 DigitalOut IN1_B(A0);
00023 DigitalOut IN2_B(A1);
00024 
00025 // entradas
00026 InterruptIn ena_all(D11);
00027 InterruptIn enable(PB_6);
00028 DigitalIn dir(D9);
00029 AnalogIn POT(A5);
00030 
00031 // debouncing
00032 Timer debounce;
00033 
00034 
00035 void muda_en(){
00036     if (debounce.read_ms()>200){
00037         estado=!estado;
00038     }
00039     debounce.reset();
00040 }
00041 
00042 
00043 void muda_all(){
00044     //pc.printf("%c", desligar);
00045     estado = 0;
00046     debounce.reset();
00047 }
00048 
00049 int main(){    
00050     enable.rise(&muda_en);
00051     ena_all.rise(&muda_all);
00052     debounce.start();
00053     pc.baud(115200);
00054     
00055     // configurações iniciais
00056     EN_A = 0; 
00057     EN_B = 0; 
00058     IN1_A = 0;
00059     IN2_A = 0;
00060     IN1_A = 0;
00061     IN1_B = 0;
00062 
00063     while(1) {
00064         
00065         if (estado == 1){
00066             tempo = 0.002+(0.050*POT.read());
00067             //pc.printf("%c", ligado);
00068         
00069             //SENTIDO HORÁRIO     
00070             if (dir.read() == 0){
00071                 //pc.printf("%c", hor);
00072         
00073                 // passo 0
00074                 EN_A = 1;
00075                 IN1_A = 1;
00076                 IN2_A = 0;
00077                 EN_B = 0;
00078                 IN1_B = 1;
00079                 IN2_B = 0;
00080                 wait(tempo);
00081                 
00082                 // passo 1
00083                 EN_A = 0;
00084                 IN1_A = 0;
00085                 IN2_A = 1;
00086                 EN_B = 1;
00087                 IN1_B = 1;
00088                 IN2_B = 0;
00089                 wait(tempo);
00090        
00091                 // passo 2
00092                 EN_A = 1;
00093                 IN1_A = 0;
00094                 IN2_A = 1;
00095                 EN_B = 0;
00096                 IN1_B = 0;
00097                 IN2_B = 1;
00098                 wait(tempo);
00099                 
00100                 // passo 3
00101                 EN_A = 0;
00102                 IN1_A = 1;
00103                 IN2_A = 0;
00104                 EN_B = 1;
00105                 IN1_B = 0;
00106                 IN2_B = 1;
00107                 wait(tempo);
00108             }
00109             
00110             //SENTIDO ANTI-HORÁRIO
00111             else if (dir.read() == 1){ 
00112                 //pc.printf("%c", antihor);
00113             
00114                 // passo 0
00115                 EN_A = 1;
00116                 IN1_A = 1;
00117                 IN2_A = 0;
00118                 EN_B = 0;
00119                 IN1_B = 1;
00120                 IN2_B = 0;
00121                 wait(tempo);
00122                 
00123                 // passo 1 ("passo 3")
00124                 EN_A = 0;
00125                 IN1_A = 1;
00126                 IN2_A = 0;
00127                 EN_B = 1;
00128                 IN1_B = 0;
00129                 IN2_B = 1;
00130                 wait(tempo);
00131                 
00132                 // passo 2
00133                 EN_A = 1;
00134                 IN1_A = 0;
00135                 IN2_A = 1;
00136                 EN_B = 0;
00137                 IN1_B = 0;
00138                 IN2_B = 1;
00139                 wait(tempo);
00140                
00141                 // passo 3 ("passo 1")
00142                 EN_A = 0;
00143                 IN1_A = 0;
00144                 IN2_A = 1;
00145                 EN_B = 1;
00146                 IN1_B = 1;
00147                 IN2_B = 0;
00148                 wait(tempo);
00149              }
00150         }
00151         
00152         else{
00153             //pc.printf("%c", desligado);
00154             
00155             EN_A = 0;
00156             EN_B = 0;
00157             IN1_A = 0;
00158             IN2_A = 0;
00159             IN1_A = 0;
00160             IN1_B = 0;
00161         }
00162     }
00163 }