Go Down

Topic: BrushLess Vs Servo (Read 2442 times) previous topic - next topic

magieweb

Bonjour,

j'ai une carte contrôleur pour moteur brushless (petit moteur), elle fonctionne niquel!
J'ai un soucis, lorsque je veux utiliser les moteurs brushless et le servo en même temps et bien le servo fonctionne mais pas les moteurs brushless :'(.
Avez vous une idée?
Pour info j'ai une alim 9V. (via des piles)

Voici mon code:

Code: [Select]
#include <Ultrasonic.h>
#include <Servo.h>

// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;

// motor B
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;


//ultrasonic
int pingPin = 2;
int inPin = 3;

//servo
Servo myservo;  // create servo object to control a servo


void setup() {

 //ultrasonic
  pinMode(pingPin, OUTPUT);
  pinMode(inPin, INPUT);
 
 
  //motor
 pinMode(dir1PinA, OUTPUT);
 pinMode(dir2PinA, OUTPUT);
 pinMode(speedPinA, OUTPUT);
 pinMode(dir1PinB, OUTPUT);
 pinMode(dir2PinB, OUTPUT);
 pinMode(speedPinB, OUTPUT);
 
 myservo.attach(5);
 
}

long microsecondsToCentimeters(long microseconds)
{
 // The speed of sound is 340 m/s or 29 microseconds per centimeter.
 // The ping travels out and back, so to find the distance of the
 // object we take half of the distance travelled.
 return microseconds / 29 / 2;
}




void loop() {

 
// Ping ultrason
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(pingPin, LOW);
// Mesure ultrason
 int duration = pulseIn(inPin, HIGH);
 int cm = microsecondsToCentimeters(duration);

if (cm<30) {
analogWrite(speedPinA, 0);
analogWrite(speedPinB, 0);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
 myservo.write(0);
 delay(3000);
    myservo.write(180);
    delay(3000);
} else {
analogWrite(speedPinA, 255);
analogWrite(speedPinB, 255);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
myservo.write(90);
}

delay(500);

}



merci

magieweb

Petite info en plus, ce sont des moteurs DC classiques, et j'ai remarqué que quand je met en commentaire servo.attach(num); bah les moteurs tournent, sauf evidemment le servo. Il semble qu'il y ait un probleme dans .attach() qui fait que mes moteurs ne tournent pas! :o

Jean-François

#2
Oct 06, 2010, 02:31 pm Last Edit: Oct 06, 2010, 02:34 pm by jfs Reason: 1
Euh...attends voir, dans ton premier message tu parles de moteur brushless et dans le second tu dis que ces sont des moteur DC classique... :-?

c'est pas la même chose !!

Comme d'habitude.... donne nous les réfs, lien et photos de ta carte de contrôle , de tes moteurs et tes servos !
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Korman

Quelle durée d'impulsion est nécessaire pour ton servo? Essaye avec des valeurs entre 1000 et 2000 pour la fonction myservo.write a la place de 0 et 180. Les premières sont des µs, les dernières des degrés.

Korman

Jean-François

#4
Oct 06, 2010, 02:49 pm Last Edit: Oct 06, 2010, 02:49 pm by jfs Reason: 1
Le problème ne vient apparemment pas des servos (puisqu'ils fonctionnent lorsque le code est correct), mais des moteurs qui ne sont pas des brushless.

Pour actionner des moteur brushless de la même manière que les servo il faut entre le moteur, la plaque et l'alimentation un controleur brushless...
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

magieweb

#5
Oct 06, 2010, 03:10 pm Last Edit: Oct 06, 2010, 03:13 pm by magieweb Reason: 1
Concernant les moteurs se sont des moteurs DC classiques, pas brushless, j'ai fait une erreur!
ma carte:


mes moteurs sur plateforme:
http://www.littlebirdelectronics.com/products/4WD-Mobile-Platform-%28Arduino-Controller%29.html

Servo:
sanwa SRM-101

Pour info le shield n'a pas les connectiques supplémentaires que l'on peut voir sur la photo (connectiques servo).

merci

Korman

Une question stupide, mais as-tu vérifié si la broche 5 est utilisée par la caret de moteurs. Si oui, ça risque de poser des problèmes.

Korman

magieweb

oui, les branches 8 9 10 11....12 sont utilisées mais pas la 5 ;-)

Jean-François

Photos ou schéma de ton montage...

Lien vers le datasheet du motor drive shield....
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa


Jean-François

Arfff... c'est chinois  ;D
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Teiva

Hi magieweb, ci joint le schéma de ton contrôleur, ça t'aidera peut être ...

Aussi vérifier que le strap VL est en position V5V
moreover,there is a VL jumper wire on this shield, it is used for choosing logic level for L298N, we will choose V5V usually, that's to say get logic coltage from Arduino.



Tout comme tu as testé le servo seul, tu devrais tester le motor shield seul pour valider les branchements.


A+ Teiva
---------------------------------------------------
www.MicroDuino.fr : Votre source Arduino en France


www.Zartronic.fr : Arduino & Robotique

magieweb

Merci, j'ai essayé toutes les combinaisons concernant les straps! (chez moi ce sont des petits switch).
J'ai vraiment l'impression que le probleme viens du fait que le shield n'aime pas la librairie Servo.h :'(
Any idea?


Korman

#13
Oct 07, 2010, 02:34 pm Last Edit: Oct 07, 2010, 02:34 pm by Korman Reason: 1
La librairie Servo n'utilise pas beaucoup de ressources: Timer1 sur l'Arduino duemilanove et Uno et les broches que tu définis avec myservo.attach. Sinon elle ne touche à rien.

Korman

magieweb

:o pfff je désespère franchement!  :'(

Go Up