Commmande moteur CC en PWM

Bonjour à tous !
Donc j'utilise un Arduino Nano v.3 (connecté en permanence au PC) et une carte de commande moteur MD10C
Voila je chercher les codes du Nano pour faire tourner le moteur CC (en PWM) en fonction de la vitesse d'une voiture dans un jeu de simulation auto
J'utilise X-sim pour envoyer les informations du jeux au Nano.
Merci d'avance!

teckwarti:
Bonjour à tous !
Donc j'utilise un Arduino Nano v.3 (connecté en permanence au PC) et une carte de commande moteur MD10C
Voila je chercher les codes du Nano pour faire tourner le moteur CC (en PWM) en fonction de la vitesse d'une voiture dans un jeu de simulation auto
J'utilise X-sim pour envoyer les informations du jeux au Nano.
Merci d'avance!

tu utilise déjà un nano ou tu cherche à l'utiliser ? :grin:
je ne connais pas , mais la gestion arduino/MD10C semble etre plutot pas ma expliquée ici

le PWM (en natif) sur arduino est controlé par une valeur comprise (byte) entre 0 et 255
à voir avec "le protocole X-sim" comment est presentée/envoyée cette info de vitesse (ou autre)

Bonjour,
donc je n'ais jamais programmé et X-sim je ne connais pas trop.
je sais que Xsim a la capacité d'envoyer les valeurs directement via port série, donc à l'Arduino Nano.
Je cherche les codes déjà fais car je ne sais pas programmer mais je peux donner toutes les infos nécessaire dans la limite de mes connaissances.
Merci

PS: le lien que tu ma passé je l'ais déjà vu mais il n'y à pas ce que je cherche, merci quand même.

teckwarti:
Bonjour,
donc je n'ais jamais programmé et X-sim je ne connais pas trop.
je sais que Xsim a la capacité d'envoyer les valeurs directement via port série, donc à l'Arduino Nano.
Je cherche les codes déjà fais car je ne sais pas programmer mais je peux donner toutes les infos nécessaire dans la limite de mes connaissances.
Merci

PS: le lien que tu ma passé je l'ais déjà vu mais il n'y à pas ce que je cherche, merci quand même.

Au moins à cet instant , ton probleme n'est pas un probleme concernant le coté arduino, mais bien de savoir comment cette information est mise à disposition par X-sim.
Déjà j'irais faire un tour par là pour poser des questions

Ok j'y vais de suite et je vous tiens au jus )
Merci

teckwarti:
Ok j'y vais de suite et je vous tiens au jus )
Merci

il semble (et cela aurait été etonnant que ce ne soit pas :grin: )
qu'il y ai pas mal d'occurences sur le forum
une au hasard

Oui je l'ai déjà vu !
Mais lui il contrôle plusieurs servos en fonction de la vitesse, du régime moteur, du niveau d'huile,....
Alors que moi je veux juste un moteur CC dont sa vitesse varie en fonction de la vitesse de la voiture.
Et comme je n'ais jamais programmé, je ne peux pas adapter ces codes pour que je les utilises.
J’espère que tu comprends ma situation.
Merci

teckwarti:
Oui je l'ai déjà vu !
Mais lui il contrôle plusieurs servos en fonction de la vitesse, du régime moteur, du niveau d'huile,....
Alors que moi je veux juste un moteur CC dont sa vitesse varie en fonction de la vitesse de la voiture.
Et comme je n'ais jamais programmé, je ne peux pas adapter ces codes pour que je les utilises.
J’espère que tu comprends ma situation.
Merci

je comprend :grin:
alors maintenant , ton probleme est de comprendre comment programmer un arduino en fonction de ton "objectif" ?

il faut debuter par le debut
une bonne base
http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation

Si ton objectif en venant ici etait d'avoir du tout fait par d'autres , ce n'est pas le bon endroit :grin:

aider : oui sans probleme (et c'est ce je fais là :grin: )
faire à ta place : surement pas 8)

Oui je comprends tout à fais!!
Mais en fait, je fais des projet avec un ami, moi je m'occupe de la partie montage/électronique et lui programmation.
Mais il est en vacances pendant 1 semaine!
Donc il ma donné le fichier des codes pour notre objectif mes il ne marche pas ( le pin PWM donne une tension et fréquence constante au lieu de varier!)
Si je te passe ces codes tu pourrais le corriger et m'explique le soucis au passage?
Merci

teckwarti:

Donc il ma donné le fichier des codes pour notre objectif mes il ne marche pas ( le pin PWM donne une tension et fréquence constante au lieu de varier!)
Si je te passe ces codes tu pourrais le corriger et m’explique le soucis au passage?
Merci

Dans la mesure où c’est un code “adapté” et que tu expose plutot bien le probleme :grin:
tu peux toujours mettre le code en lecture ici
NB : bien le mettre entre balises code

Je ne le corrigerais pas seul , il sera lisible par tous 8)

Oui y a pas de soucis au contraire plus on est nombreux mieux c’est!!
Donc le voici:

//Programme destiné à tester un Buttkicker home made via X-Sim en simulant la vitesse de rotation du moteur
//interfacé avec une carte Cytron MD10C (PWM + direction)
//notre moteur ne tournera que dans une seule direction, il faut donc relier la pin de direction à la masse pour tourner dans le sens positif

#define RPMMAX 9500
#define PWMPIN 5

char SerialTemp;
char bufferArray[4];              // holds all serial data into a array
byte d1;                           // high byte temp variable
byte d2;                           // low byte temp variable

unsigned int rpm;                  //holds the rpm data (0-65535 size)

byte rpmdata = 0;                  // marker that new data are available

int rpmpwm = 1;

int rpmmax = RPMMAX;

/*
     +-----+
GND  | . . |  VCC
DIO  | . . |  CLK
STB1 | . . || STB0
STB3 | . . |  STB2
STB5 | . . |  STB4
     +-----+
*/


void setup()
{
  //Create Serial Object
  Serial.begin(115200);
  
}

void getData()
{
  if (Serial.available() > 0)
  {
    SerialTemp = Serial.read();
    
    // RPM
    if (SerialTemp == 'R')
    {
      for (int i=1; i<4; i++)
      {
        bufferArray[i] = Serial.read();
      }
     d1 = bufferArray[1];      // store high byte of rpm
     d2 = bufferArray[2];      // store low byte of rpm
     rpm = constrain(((d1*256) + d2), 1, 65535);     // concatonate bytes (shift 8 bits)
     rpmpwm = constrain(map(rpm, 0, rpmmax, 0, 255), 0, 255);
     rpmdata=1;                // Nouvelles données
    }// RPM
  }
}

void loop()
{
  getData();
  if (rpmdata == 1) //nouvelles données
  {
    analogWrite(PWMPIN, rpmpwm);
delay(60);
rpmdata=0;
  }
}

teckwarti:
Oui y a pas de soucis au contraire plus on est nombreux mieux c'est!!
...

et avec ça pour test ça donne quoi vu du comportement moteur avec ta configuration materielle actuelle ?

pas bon

J’enlève mes codes et je mets les tiens?
Si oui, le moteur ne tourne pas du tout au contraire de mes codes.

Tu n’as plus d’idées pour m’aider?
Merci

teckwarti:
Tu n’as plus d’idées pour m’aider?
Merci

Si si, mais il faut bien aussi que je bosse un peu quand meme. :grin:

me suis planté dans le programme
essaye ça

//Programme destiné à tester un Buttkicker home made via X-Sim en simulant la vitesse de rotation du moteur
//interfacé avec une carte Cytron MD10C (PWM + direction)
//notre moteur ne tournera que dans une seule direction, il faut donc relier la pin de direction à la masse pour tourner dans le sens positif


byte rpm=0;
void setup()
{
}
void loop()
{
  for (rpm=0; rpm <= 255; rpm++){
      analogWrite(5, rpm);
delay(30);
  }
}

Ah oui c'est vrai dsl!! Je suis en vacances et je perds la notion du temps :smiley:

Ok j'essaye de suite.
Merci

J'ai juste téléverser ton code sans avoir lancé X-sim.
Donc le moteur démarre lentement et augmente en vitesse progressivement puis il s’arrête net et reprend le cycle

teckwarti:
J'ai juste téléverser ton code sans avoir lancé X-sim.
Donc le moteur démarre lentement et augmente en vitesse progressivement puis il s’arrête net et reprend le cycle

ok
c'etait bien le but du jeu :grin:
la levée de doute sur le couple arduino/driver avec commande par PWM est faite, ça fonctionne parfaitement .
maintenant le reste viens de la comm X-sim vers arduino et de son interpretation.

à suivre plus tard pour moi ... :grin:

Ah ok d'acc!
Bah merci déjà de m'aider par contre plus tard sa veut dire quoi ? (je te presse pas, je veux juste savoir quand) :smiley:

plus tard, ça veut dire plus tard : quand je suis dispo :grin:
Je n'ai pas le temps d'approfondir, mais dans le lien cité au dessus
le tours/minutes semble transmis par 3 byte apres le R (correspondant à centaines,dizaines,unités )

  //****************************** READ DATA FROM SERIAL END ******************************
}

void  Read_Rpm(){

  delay(1);
  int Rpm100 = Serial.read()- '0';
  delay(1);
  int Rpm10 = Serial.read()- '0';
  delay(1);
  int Rpm1 = Serial.read()- '0';

  int rpm = 100*Rpm100 + 10*Rpm10 + Rpm1;

alors que dans ton programme ce serait sur 2 byte (un INT).
je ne sais pas où est la verité (ou si ça se configure avec X-sim)