Module MD03 utilisation (Pont en H 20A 50V)
Description du module MD03
Pont en H pour commande de moteurs grâce a différent mode et notamment I2C, 50V, 20A maximum. Attention avant de commencer veillez à vérifier que les switch sont correctement configurés, cet à dire que la led sur la carte ne doit pas clignoter. Celle ci indique une adresse impossible. Le programme de test ci-dessous utiliser par défaut B0 ou 176 en décimal comme adresse de base, soit tout les switcher sur ON (vers le bas).
Il existe 5 modes de fonctionnement pour ce module:
- Analog Mode - 0v-2.5v-5v
- Analog Mode 0v -5V
- RC mode
- RC mode with TIMEOUT
- I2C mode
Rc mode permet l’utilisation d’un récepteur de modélisme pour piloter directement un moteur dans les 2 sens. Dans ce cas seul 3 fils seront utilisés. 0v(fil noir), 5v (fil rouge) et le signal pwm partiel (Modulation en largeur d’impulsion). Le fils blanc sera relié sur la borne sda
Programme de test avec compilateur css et mplab.
Programme de test
Afin de vérifier que la communication est bonne voici un mini programme de test qui permet de faire des phase d’accélération et décélération du moteur connecté sur la carte MD03 .
Le module est ici utilisé en mode i2c.

Ce programme est chargé dans le pic grâce au programmateur /débugger icd2. (pour info)
Les broches présentes sur icd2 sont: PGD PGC GND Vcc Vpp
C’est bornes seront reliées comme ceci:
PGD sur la pin 40 (RB7)
PGC sur la pin 39 (RB6)
GND sur la masse du montage
Vcc sur le 5 VVpp sur la pin 1. (MCLR/)
Ce programme est réalisé pour un pic 16f877 à 20mhz. Il faudra relier SCL sur la pin 18 et SDA sur la pin 23.
void main(){
port_b_pullups(TRUE);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);// setup_psp(PSP_DISABLED);
//setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
while (1){
output_D(255);//allumer une led pour vérifier que ça tourne
delay_ms(100);output_D(000);
delay_ms(100);//speed (2)
i2c_start();
i2c_write(176);
i2c_write(2);
i2c_write(250);
i2c_stop();//acceleration (3)
i2c_start();
i2c_write(176);
i2c_write(3);
i2c_write(250);
i2c_stop();//sens (0)
i2c_start();
i2c_write(176);
i2c_write(0);
i2c_write(2);
i2c_stop();
delay_ms(5000);//attendre que la phase d’accélération soit fini
//speed (2)
i2c_start();
i2c_write(176);
i2c_write(2);
i2c_write(128);
i2c_stop();
//acceleration (3)
i2c_start();
i2c_write(176);
i2c_write(3);
i2c_write(250);
i2c_stop();
//sens (0)
i2c_start();
i2c_write(176);
i2c_write(0);
i2c_write(2);
i2c_stop();
delay_ms(5000);//attendre la phase de décélération
}
}
Une valeur élevé dans le registre d’accélération permet une accélération progressive, une valeur faible une accélération très rapide.
L’adresse pour l’écriture est 176 et 177 pour lire la température ou un autre paramètre interne.(surintensité, température trop élevé, version software …)
Les différents registres utilisables.
|
Register Address |
Name |
Read/Write |
Description |
|
0 |
Command |
R/W |
Write 01 Forwards - 02 Reverse |
|
1 |
Status |
Read only |
Acceleration, Temperature and Current Status |
|
2 |
Speed |
R/W |
Motor Speed 0-255 (0×00 - 0xFF) |
|
3 |
Acceleration |
R/W |
Motor Acceleration 0-255 (0×00 - 0xFF) |
|
4 |
Temperature |
Read only |
Module temperature |
|
5 |
Motor Current |
Read only |
Motor Current |
|
6 |
Unused |
Read only |
Read as zero |
|
7 |
Software Revision |
Read only |
Software Revision Number- Currently |
Si vous écrivez dans les registres vitesse ou accélération vous devez envoyer de nouveau le sens pour forcer les nouveaux paramètres.Avant de pouvoir démarrer votre moteur il est donc nécessaire d’écrire une valeurs dans les registres speed et accélération puis sens.
Lire la température
int temp;
temp= 0;
i2c_start();
i2c_write(176); //addresse de base en écriture
i2c_write(4); //registre température
i2c_start();
i2c_write(177); //adresse en lecture, r/w a 1
temp = i2c_read(0) ;
La valeur diminue avec la température. Le capteur est placé sous la résistance de 0.003 ohm. Il est possible de chauffer avec un fer à souder ce shunt afin de constater la diminution de la valeur de temp. 1 correspond 1.42 degré Celsius.
Lire le courant moteur
int inten;
inten= 0;
i2c_start();
i2c_write(176); //adresse de base en écriture
i2c_write(5); //registre Motor Current
i2c_start();
i2c_write(177); //adresse en lecture, r/w a 1
inten = i2c_read(0) ;
La valeur maximum de 20A représenterais 186, par simple produit en croix on obtient par exemple 1.61A pour 15 (20 *15 /186 = 1.61)
…
Et voila vous pouvez maintenant passer a la puissance supérieure grâce a ce module qui permet une puissance théorique maximale de 50v x 20A soit 1000W, largement de quoi mouvoir votre robot.
Documentation:
http://www.robot-electronics.co.uk/htm/md03tech.htm
AVIS
+ Une sacré puissance disponible avec ce module (1000w)
+ Plusieurs mode de fonctionnement .
+ Facile à utiliser, documentation disponible.
- le prix, pas donné quant même.
Distributeur:
http://www.gotronic.fr/catalog/robotique/robframe.php?page_cible=commandes.htm

[…] des différents modules externes sont en cours, c’est notament le cas des modules pont en h (MD03) , le module boussole électronique, le module détecteur à […]
Pingback par » Tondeuse automatique électrique | 31 mai 2009
[…] (radiocommandée) Tondeuse rc home made avec moteur thermique. Il est possible d’utiliser les modules md03 qui supporte le signal pwm des recepteurs de […]
Pingback par » Tondeuse RC (radiocommandée) | 1 mai 2010