View on GitHub

MD25 - Dual 12Volt 2.8Amp H Bridge Motor Drive

Description de la classe MD25 développée en C# sous .NETMF 4.3 pour les cartes Netduino et FEZ (PANDA, COBRA...)

Download this project as a .zip file Download this project as a tar.gz file

Sommaire

  1. LE MATERIEL
    1. La carte MD25 - Dual 12Volt 2.8Amp H Bridge Motor Drive
    2. Les cartes Netduino
    3. Les cartes FEZ
  2. LE LOGICIEL
    1. Contenu du répertoire proposé au téléchargement
    2. Le NuGet MicroToolsKit
    3. Le wiki .NetMF v4.4
    4. Description et utilisation de la classe MD25
  3. LIENS
    1. Exemples codés en C# pour les cartes Netduino et Fez (Panda 3, BrainPad)
    2. La page du projet MicroToolsKit

1. LE MATERIEL


1.1 La carte MD25 - Dual 12Volt 2.8Amp H Bridge Motor Drive



1.2 Les cartes Netduino

Secret Labs

Netduino plus 2 Netduino 3 wifi
Netduino 3 Ethernet Netduino 3 wifi*

1.3 Les cartes FEZ

GHI Electonics (Extrait)

PANDA III COBRA III
PANDA III COBRA III* (compatible Gadgeteer)

2. LE LOGICIEL


2.1 Contenu du répertoire proposé au téléchargement

Le répertoire proposé au téléchargement (au format zip ou tar.gz) contient la solution MD25 composée:


2.2 Le NuGet MicroToolsKit

La dernière version compilée de la classe MotorControlMD2x se situe dans la bibliothèque MicroToolsKit disponible sur nuget.org.

Organisation des classes contenues dans MicroToolsKit [lien]

Important : Installer ce nuget dans le projet Visual Studio simplifie l'utilisation de la classe.


2.3 Le wiki .NetMF v4.4


2.4 Description et utilisation de la classe MD2x


Création d'un projet avec l'IDE Visual Studio

  1. Créer un nouveau projet en suivant la démarche décrite dans le chapitre "Premier programme en C# étape par étape" avec une carte Netduino ou avec une carte Fez (Panda 3, BrainPad etc). [lien]
  2. Utiliser le gestionnaire de paquets NuGet pour ajouter la bibliothèque MicroToolsKit ( nuget.org) dans le projet. (Dans l'explorateur de solution, clic droit sur les Références du projet puis choisir Gérer les packages NuGet.... Installer le paquet.)
  3. Ajouter l'espace de noms Microtoolskit.Hardware.MotorDrivers dans l'en-tête du fichier source.
  4. Créer un objet en utilisant un des constructeurs MotorControlMD2x.
  5. Régler la fréquence de rotation des moteurs avec la méthode SetSpeedTurn.
  6. etc...

Exemple

using System;
using System.Threading;
using Microsoft.SPOT;

using Microtoolskit.Hardware.MotorDrivers;

namespace NetduinoMD25
{
	public class Program
	{
		public static void Main()
		{   
			var MD25 = new MotorControlMD2x();

			// Pour info : Lecture des registres de la carte MD2x et affichage de la version du logiciel
			Debug.Print("Vers.=" + MD25.SoftRev.ToString());
			Debug.Print("Tension=" + ((Single)MD25.Battery / 10).ToString("N1") + "V");
			Debug.Print("Acceleration=" + MD25.AccelerationRate.ToString());
			Debug.Print("Mode=" + MD25.Mode.ToString());

			while (true)
			{
				// Essai : Rotation des moteurs jusqu'à ce que la distance recherchée soit atteinte
				// ---------------------------------------------------------------------
				MD25.RazEncoders(); // Remise à zéro des codeurs
				MD25.SetSpeedTurn(140, 140); // Réglage de la vitesse des moteurs

				while (MD25.Encoder1 < 2000)
				{
					Debug.Print("Codeur 1=" + MD25.Encoder1.ToString() + " " + "Codeur 2=" + MD25.Encoder2.ToString() +
					 " Speed1=" + MD25.Speed1.ToString() + " Speed2=" + MD25.Speed2Turn.ToString());
				}
				MD25.StopMotor();  // Arrêt des moteurs
				Thread.Sleep(5000);
			}          
		}
	}
}
      		

Constructeurs

Syntaxe Description
MotorControlMD2x() Instancie un objet "MD25".
SLA = 0x58 (par défaut).
Frequency : fréquence du bus I²C = 100kHz (par défaut)

Exemple
var MD25 = new MotorControlMD2x();
MotorControlMD2x( UInt16 SLA) Instancie un objet "MD25".
SLA: à définir dans l'intervalle [0x58,0x5F].
Frequency: fréquence du bus I²C = 100kHz

Exemple
var MD25 = new MotorControlMD2x(0x59);
MotorControlMD2x( UInt16 SLA, UInt16 Frequency) Instancie un objet "MD25".
SLA: à définir dans l'intervalle [0x58,0x5F].
Frequency: fréquence du bus I²C à définir dans l'intervalle [100kHz,400kHz].

Exemple
var MD25 = new MotorControlMD2x(0x58,200);

Enumérations

Syntaxe Description
ModeRegister Mode 0, Mode 1
Commande indépendante des deux moteurs.
- Speed 1 règle la vitesse du moteur 1.
- Speed 2 règle la vitesse du moteur 2.

Mode 2, Mode 3
- Le registre Speed1 définit la vitesse médiane des deux moteurs.
- Le registre Speed2Turn définit le diférentiel de vitesse à appliquer en + ou en - à chaque moteur (voir la propriété Speed2).

Effet des paramètres de la méthode SetSpeedTurn : ValSpeed1 et ValSpeed2 ou des propriétés Speed1 et Speed2Turn dans les différents modes.
  • Mode 0 (par défaut)
    0 (Full Reverse) 128 (Stop) 255 (Full Forward)
  • Mode 1
    -128 (Full Reverse) 0 (Stop) 127 (Full Forward).
  • Mode 2
    0 (Full Reverse) 128 (Stop) 255 (Full Forward)
  • Mode 3
    -128 (Full Reverse) 0 (Stop) 127 (Full Forward)

Propriétés

Syntaxe Description
Speed1 Fixe (à venir) ou retourne la consigne de vitesse du moteur 1 (mode 0, 1) ou des deux moteurs (mode 2,3).
Type : byte

Note
  • Dans les modes 0 et 1, il règle la vitesse du moteur 1. Plus la valeur augmente, plus la fréquence de rotation augmente.
  • Dans les modes 2 et 3 (Turn) il contrôle la vitesse moyenne des deux moteurs.

Exemples
// Pour connaître la consigne de vitesse du moteur 1
Debug.Print("Speed1=" + MD25.Speed1.ToString());

// Pour fixer la consigne de vitesse du moteur 1 (mode 0)
MD25.Speed1 = 140;
Speed2Turn Fixe (à venir) ou retourne la consigne de vitesse du moteur 2 (mode 0, 1) ou la consigne de direction du système déplacé par les deux moteurs (mode 2,3 : Turn).
Type : byte

Note sur le mode Turn
Selon la valeur du registre de vitesse (Speed1), le logiciel de la carte MD25 détermine si la direction est directe ou inverse.
  • Si la direction est directe :
    - La vitesse du moteur 1 = speed - turn
    - La vitesse du moteur 2 = speed + turn
  • Si la direction est inverse :
    - La vitesse du moteur 1 = speed + turn
    - La vitesse du moteur 2 = speed - turn
Exemples
// Pour connaître la consigne de vitesse du moteur 2
Debug.Print("Speed2=" + MD25.Speed2Turn.ToString());

// Pour fixer la consigne de direction
A venir
Encoder1 Retourne la valeur de l'encodeur 1 (calculée à partir des registres Enc1a,b,c et d).
Type : Int32

Exemple
Debug.Print("Codeur 1=" + MD25.Encoder1.ToString());
Encoder2 Retourne la valeur de l'encodeur 2 (calculée à partir des registres Enc2a,b,c et d).
Type : Int32

Exemple
Debug.Print("Codeur 2=" + MD25.Encoder2.ToString());
Battery Retourne la tension d'alimentation (x10) de la carte en (V).
Type : byte

Exemple
Debug.Print("Tension=" + ((Single)MD25.Battery / 10).ToString("F1") + "V");
Current1 Retourne l'intensité du moteur 1 (x10) en (A).
Type : byte

Exemple
Debug.Print("I_moteur 1=" + ((Single)MD25.Current1 / 10).ToString("F1") + "A");
Current2 Retourne l'intensité du moteur 2 (x10) en (A).
Type : byte

Exemple
Debug.Print("I_moteur 2=" + ((Single)MD25.Current2 / 10).ToString("F1") + "A");
SoftRev Retourne le numéro de version du logiciel de la carte MD25.
Type : byte

Exemple
Debug.Print("Vers.=" + MD25.SoftRev.ToString());
AccelerationRate En cours de rédaction
Fixe ou retourne l'accélération programmée lors d'un changement de vitesse.
Type : byte

Exemples
// Pour connaître la valeur de l'accélération
Debug.Print("Acceleration=" + MD25.AccelerationRate.ToString());

// Pour fixer la valeur de l'accélération
MD25.AccAccelerationRate = 1;
Mode Fixe (à venir) ou retourne le mode de fonctionnement de la carte 0, 1, 2 ou 3.
Type : byte

Exemples
// Pour connaitre le mode de fonctionnement de la carte
Debug.Print(Mode=" + MD25.Mode.ToString());

// Pour fixer le mode de fonctionnement de la carte
MD25.Mode = 2;
Command En cours de rédaction
Fixe ou retourne le contenu du registre de commande.
Type : byte

Exemple
Debug.Print("" + );
TransactionTimeOut Fixe ou retourne le temps (en ms) accordé à la transaction avant la génération d'une exception System.IO.Exception. 1000ms par défaut.
Type : ushort

Exemples
// Pour régler la durée maximum d'une transaction à 200ms.
MD25.TransactionTimeOut = 200;
// Pour connaître la durée maximum accordée à une transaction
ushort time = MD25.TransactionTimeOut;

Méthodes publiques

Syntaxe Description
void GetAllRegister() Lecture des 16 registres de la carte MD25.
void RazEncoders() Remise à zéro des deux encodeurs.
void SetMode( ModeRegister valmode) Définit le mode de fonctionnnement de la carte valmode=0, 1,2 ou 3.
void SetSpeedTurn( byte ValSpeed1, byte ValSpeed2Turn) Règle la vitesse des moteurs.
void StopMotor() Arrêt des deux moteurs.