collapse

* Posts Recentes

Fabricação de ferramenta de corte por zordlyon
[Ontem às 00:23]


SCT-013 + i2c eeprom, Gravar e Ler dados. por dennis_boy
[23 de Abril de 2018, 21:43]


Controlar Motor AC por senso
[23 de Abril de 2018, 12:34]


Apresentação do Legendary Urban Hacker por Sarat
[23 de Abril de 2018, 00:24]


Redes LoRa por ralex
[22 de Abril de 2018, 22:53]


Canal de video aulas no youtube! por zkreamer
[22 de Abril de 2018, 21:58]


Nueva en el Foro!!!!!!!! me presento!! por zkreamer
[22 de Abril de 2018, 21:48]


Alguem usa as libs md_max72xx e md_parola ? por vasco
[21 de Abril de 2018, 23:44]


Paineis Fotovoltaicos para Autoconsumo (Kits EDP)? por KammutierSpule
[20 de Abril de 2018, 13:42]


Como repôr posições dos Icones/Pastas no Desktop W8? por senso
[19 de Abril de 2018, 23:55]

Autor Tópico: programação de motor brushless  (Lida 1096 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline afar

  • Mini Robot
  • *
  • Mensagens: 12
programação de motor brushless
« em: 27 de Março de 2012, 04:01 »
Estou com duvida aonde meu código pode estár errado, sem os IF para eu testar as condição de "manobra" do quadricoptero ele funciona. Quando eu insiro a linha do printfln para baixo nao funciona mais o código porque?
 :-X :-X :-X

Alguem pode me ajudar?

Desculpe por algum erro!!! :D

o Código:

Código: [Seleccione]
#define MINCOMMAND 1000
#define MAXCOMMAND 1400
#define DIRCOMMAND 1600

int motorPinL = 2; // onde L= Lefth , R= Right , U= Up, D= Down
int motorPinU = 4; // por causa de direita e dianteiro
int motorPinD = 6;
int motorPinR = 8;

void setup()
{
pinMode(motorPinL , OUTPUT);
pinMode(motorPinR , OUTPUT);
pinMode(motorPinU , OUTPUT);
pinMode(motorPinD , OUTPUT);
  arm();
}

void arm()
{
  analogWrite(motorPinL, MINCOMMAND / 8);
  analogWrite(motorPinR, MINCOMMAND / 8);
  analogWrite(motorPinU, MINCOMMAND / 8);
  analogWrite(motorPinD, MINCOMMAND / 8);
}

void loop()  {
  int a=0;
  int d=0;

 for(int motorCommand = MINCOMMAND ; motorCommand <= MAXCOMMAND; motorCommand +=5)
  {
    analogWrite(motorPinL, motorCommand / 8); 
    analogWrite(motorPinR, motorCommand / 8);
    analogWrite(motorPinU, motorCommand / 8);
   analogWrite(motorPinD, motorCommand / 8);
  }

  Serial.println(" Digite A,S,D,W"); //D para direita, E para esqueradr F para frente e T para traseira ");
  a=Serial.read();
  d=a+2;
  delay(1000);
 //Serial.println(d);

  if (d==99)
  {
    for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=5)
    {
      analogWrite(motorPinL, motorCommand / 8); 
    }
  }

  if (d==117)
  {
    for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
    {
      analogWrite(motorPinD, MINCOMMAND / 8);
  }
  }

  if (d==102)
  {
    for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
    {
      analogWrite(motorPinR, motorCommand / 8);
    }
  }

  if (d==121)
  {
    for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
    {
     analogWrite(motorPinU, motorCommand / 8);
    }
  }
}
« Última modificação: 27 de Março de 2012, 10:25 por TigPT »

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: programação de motor brushless
« Responder #1 em: 27 de Março de 2012, 10:12 »
Parece que te estás a esquecer de iniciar o Serial, por exemplo no Setup.  ;)
Tr3s
Daniel Gonçalves

Offline afar

  • Mini Robot
  • *
  • Mensagens: 12
Re: programação de motor brushless
« Responder #2 em: 18 de Abril de 2012, 15:00 »
modifiquei minha programação mas me parece que está com erro no loop:

Os Esc´s são controlados como se fossem servo motores, alguém tem outra programação que ajuda a controlar a velocidade dos motores?

Código: [Seleccione]
int motorPin = 8;
int motor2Pin = 6;
int motor3Pin = 4;
int motor4Pin = 2;

#define MINCOMMAND 1000
#define MAXCOMMAND 1600
#define DIRCOMMAND 2000

void setup() 
{
  Serial.begin(9600);

  pinMode(motorPin , OUTPUT);
  pinMode(motor2Pin , OUTPUT);
  pinMode(motor3Pin , OUTPUT);
  pinMode(motor4Pin , OUTPUT);
  arm();
}


void arm()
{
  analogWrite(motorPin, MINCOMMAND / 8);
  analogWrite(motor2Pin, MINCOMMAND / 8);
  analogWrite(motor3Pin, MINCOMMAND / 8);
  analogWrite(motor4Pin, MINCOMMAND / 8);
}


void loop()  {
  for(int MC = MINCOMMAND ; MC <= MAXCOMMAND; MC +=10) {
    analogWrite(motorPin, MC / 8); 
    analogWrite(motor2Pin, MC / 8);
    analogWrite(motor3Pin, MC / 8);
    analogWrite(motor4Pin, MC / 8);

    delay(500);             
  }



  int dir,a=10;


  Serial.println(" D para direita, E para esquerda F para frente e W para traseira ");

  if (Serial.available() >0) { //existem caracteres para ler

    dir=Serial.read();

    Serial.println(a);
    //altera a velocidade consoante o caracter.
  }


  if (dir == 'a')
  {
    for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
    {
      analogWrite(motorPin, MC / 8); 
      Serial.println(dir);
    }
  }

  if (dir == 's')
  {
    for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
    {
      analogWrite(motor2Pin, MC / 8);
      Serial.println(dir);
    }
  }

  if (dir == 'w')
  {
    for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
    {
      analogWrite(motor3Pin, MC / 8);
      Serial.println(dir);
    }
  }

  if (dir == 'd')
  {
    for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
    {
      analogWrite(motor4Pin, MC / 8);
      Serial.println(dir);
    }
  }
}