Cours:RobotArrex : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Bleu|Code de test de DRV8830}})
({{Bleu|Code de test de DRV8830}})
Ligne 102 : Ligne 102 :
 
=={{Bleu|Code de test de DRV8830}}==
 
=={{Bleu|Code de test de DRV8830}}==
  
https://github.com/sparkfun/SparkFun_MiniMoto_Arduino_Library
+
==={{Vert|Librairie drv8830}}===
  
 +
*Récupérer les fichiers (zip) sur le lien : https://github.com/sparkfun/SparkFun_MiniMoto_Arduino_Library
 +
*Décompresser le fichier
 +
*Modifier le nom du dossier pour qu'il ne contienne que des caractères alphanumériques
 +
*Déplacer les fichiers du sous répertoire src à la base de la librairie
 +
*Déplacer la librairie dans le répertoire library arduino
 +
*'''Attention''' : Sur certains postes, vérifier dans les {{Rouge|préférences}} que le répertoire par défaut est correct !
 +
 +
==={{Vert|Utilisation}}===
  
 
<source lang=c>
 
<source lang=c>
//upload=isp
 
 
#include <SparkFunMiniMoto.h>  // Include the MiniMoto library
 
#include <SparkFunMiniMoto.h>  // Include the MiniMoto library
  
Ligne 112 : Ligne 119 :
 
MiniMoto motorG(0xC0); // moteur gauche
 
MiniMoto motorG(0xC0); // moteur gauche
 
MiniMoto motorD(0xD0); // moteur droit
 
MiniMoto motorD(0xD0); // moteur droit
 
#define FAULTn  16    // Pin used for fault detection.
 
#define mini 15
 
#define maxi 63
 
  
 
void setup()
 
void setup()
 
{
 
{
   delay(1000);
+
   ....
  Serial.begin(57600);
 
  Serial.println("Debut du test !");
 
  pinMode(FAULTn, INPUT);
 
 
}
 
}
 
  
 
void loop()
 
void loop()
 
{
 
{
   static unsigned char i=mini,j=maxi;
+
   ...
  static unsigned char sens=1,sens2=-1;
 
  Serial.print("i =!");
 
  Serial.println(i);
 
 
   motorD.drive(i);
 
   motorD.drive(i);
 
   motorG.drive(j);
 
   motorG.drive(j);
   delayUntil(100);
+
   ...
  if (i==maxi) sens=-1;
 
  if (j==maxi) sens2=-1;
 
  if (i==mini) sens=1;
 
  if (j==mini) sens2=1;
 
  i+=sens;
 
  j+=sens2;
 
 
}
 
}
 +
</source>
  
// delayUntil() is a little function to run the motor either for
 
//  a designated time OR until a fault occurs. Note that this is
 
//  a very simple demonstration; ideally, an interrupt would be
 
//  used to service faults rather than blocking the application
 
//  during motion and polling for faults.
 
void delayUntil(unsigned long elapsedTime)
 
{
 
  // See the "BlinkWithoutDelay" example for more details on how
 
  //  and why this loop works the way it does.
 
  unsigned long startTime = millis();
 
  byte result;
 
  while ((startTime + elapsedTime) > millis())
 
  {
 
   
 
    // If FAULTn goes low, a fault condition *may* exist. To be
 
    //  sure, we'll need to check the FAULT bit.
 
 
      // We're going to check both motors; the logic is the same
 
      //  for each...
 
      result = motorD.getFault();
 
        if (result & OCP) Serial.println("Chip overcurrent!");
 
        if (result & ILIMIT) Serial.println("Load current limit!");
 
        if (result & UVLO) Serial.println("Undervoltage!");
 
        if (result & OTS) Serial.println("Over temp!");
 
      result = motorD.getFault();
 
        if (result & OCP) Serial.println("Chip overcurrent!");
 
        if (result & ILIMIT) Serial.println("Load current limit!");
 
        if (result & UVLO) Serial.println("Undervoltage!");
 
        if (result & OTS) Serial.println("Over temp!");
 
  
   
+
{| class="wikitable"
  }
+
|-
}
+
! Classe
</source>
+
||MiniMoto
 +
|-
 +
! Méthodes
 +
||
 +
{| class="wikitable"
 +
|-
 +
| drive(v) || v (de type int) est la vitesse, dont le signe indique le sens de rotation, valeur dans l'intervalle [-63 63]
 +
|}
 +
|}

Version du 13 janvier 2016 à 09:55

Fabrication du robot

Le robot Arrex est composé de 2 cartes électronique, que vous allez fabriquer.

Pour ces 2 cartes et assez naturellement, le côté :

  • TOP sera le côté vers le haut.
  • BOTTOM sera le côté vers la table.

Il faudra donc nécessairement faire un "miroir" sur les photocoupleurs par réflexion CNY70.


Consignes globales

Lors de la conception des cartes électroniques, vous devrez respecter les critères suivants :

  • les pistes devront:
    • être larges
      • idéalement 0,8mm ou 0,6mm (ou plus si possible)
      • 0,4mm pour passer entre des pastilles
      • ponctuellement 0,3mm (voir 0,2mm sans garanti d'absences de coupures !)
    • être courtes
    • être espacées
  • autant de vias que nécessaires (dans la limite de votre courage !)
  • positionnement
    • ne pas sortir du contour
    • ne pas déplacer
      • le contour
      • les connecteurs
      • les 3 perçages de centrage
  • marquage
    • prévoir l'inscription de vos noms
    • vous pouvez éventuellement supprimer/réduire le texte proposé

Carte "capteurs"

Consignes

Les recommandations suivantes sont spécifiques à la carte capteur, à savoir :

  • les capteurs seront :
    • disposés juste au dessus de la ligne horizontale
    • collés côte à côte
    • disposés symétriquement par rapport à la ligne verticale
    • attention au bon positionnement des capteurs (droite, milieu, côté ...)
  • la carte doit être simple face (toutes les pistes sur la face TOP )

Documents

Vous avez à disposition les 2 fichiers suivants :

Composants

Type Composant/Boitier Librairie Eagle Référence eagle
Résistance CMS : 1206 rcl R-EU_R1206
Photocoupleur CNY70 CNY70 CNY70
Transistor NPN CMS : SOT23 transistor-npn BC849SMD
Led 5mm ou 3mm led LED5MM ou LED3MM
Connecteur barrette femelle sécable con-lstb MA06-1

Carte "gestion"

Consignes

Les recommandations suivantes sont spécifiques à la carte de gestion, à savoir :

  • les DRV8830 :
    • seront alimentés par des pistes très larges ( GND / VDD )
    • les pistes allant des DRV8830 aux moteurs doivent être les plus courtes et les plus larges possibles
    • la pastille située au milieu du composant sert à évacuer la chaleur, il faut la relier à une piste de grande surface
  • le TMA0505S :
    • sera raccordé à des pistes très larges ( alimentations )
  • les condensateurs C2, C3, C4  :
    • devront être placés au plus près des DRV8830 et du microcontrôleur ( découplage des alimentations )


Documents

Vous avez à disposition les 2 fichiers suivants :

Si besoin, le fichier de librairie suivant contient, entre autre, le composant DRV8830

Composants

Programmation du robot

Code de test de DRV8830

Librairie drv8830

  • Récupérer les fichiers (zip) sur le lien : https://github.com/sparkfun/SparkFun_MiniMoto_Arduino_Library
  • Décompresser le fichier
  • Modifier le nom du dossier pour qu'il ne contienne que des caractères alphanumériques
  • Déplacer les fichiers du sous répertoire src à la base de la librairie
  • Déplacer la librairie dans le répertoire library arduino
  • Attention : Sur certains postes, vérifier dans les préférences que le répertoire par défaut est correct !

Utilisation

#include <SparkFunMiniMoto.h>   // Include the MiniMoto library

// Create two MiniMoto instances, with different address settings.
MiniMoto motorG(0xC0); // moteur gauche
MiniMoto motorD(0xD0); // moteur droit

void setup()
{
  ....
}

void loop()
{
  ...
  motorD.drive(i);
  motorG.drive(j);
  ...
}


Classe MiniMoto
Méthodes
drive(v) v (de type int) est la vitesse, dont le signe indique le sens de rotation, valeur dans l'intervalle [-63 63]