Electronique de l`homéostat page 1/7 Introduction L`électronique de
Transcription
Electronique de l`homéostat page 1/7 Introduction L`électronique de
Electronique de l’homéostat page 1/7 Introduction L’électronique de l’homéostat permet de recevoir les informations analogiques (un potentiel compris entre 0 et +5 volts) issus du point médian de 4 potentiomètres et de commander la marche des moteurs à aimant permanents qui actionnent ces potentiomètres. On inverse le sens de la marche de ces moteurs en permutant les fils de leur alimentation. Ces donnés sont acheminées sur le port série d’un ordinateur. Quand j’ai réalisé l’électronique de l’homéostat en 1990, j’ai utilisé des UART pour convertir les données séries en données parallèles, de relais avec des transistors Darlington pour actionner les moteurs à courants continus des potentiomètres et des circuits convertisseurs analogiques digitaux (DAC8008) pour convertir les données issues des points milieux des potentiomètres. J’ai refait en 2002 l’électronique de l’homéostat avec en tout et pour tout, un PicBasic 3B qui fait les conversions digitales analogiques et un montage dit "H-bridge" pour piloter les moteurs. Alors que la première version m’a demandé plusieurs jours de travail, la version avec micro contrôleur ne m’a pris que quelques heures. Description électronique L’alimentation comporte un pont de diodes, des condensateurs de filtrage et un régulateur (7812 et 7805). L’alimentation 12 volts est destinée aux moteurs des potentiomètres et l’alimentation 5 volts destinée au convertisseur et au PicBasic. Electronique de l’homéostat page 2/7 La carte qui supporte le PicBasic et l’interface RS232 /TTL reçoit du 12 volt régulé par l’intermédiaire d’une diode dé trompeuse (diode de redressement type 1N4001) puis le régulateur 7805 puis un condensateur de 470 nFd; la diode évite les dégâts quand on intervertit les fils d’alimentation par mégarde, ce qui n’est pas du tout exceptionnel. La carte avec le PicBasic et l’interface RS232/TTL Cette carte reçoit 4 entrées analogiques provenant des points milieux des potentiomètres et envoie aux H-bridges deux fils par moteur, ce qui nous fait 8 fils . A est la commande moteur0 en avant, B est la commande moteur0 en arrière, C est la commande moteur1 en avant, etc … Electronique de l’homéostat page 3/7 Le H-Bridge Pour piloter les 4 moteurs, il faut 4 H-bridges, i.e. 2 cartes de 2 H-bridges Je donne l’implantation des composants sur le circuit imprimé qui peut être fait à l’aide de vernis à ongle, les pistes étant très larges. Je pense qu’il est très facile de se tromper dans l’implantation des composants. J’ai représenté le circuit imprimé vu coté composants donc par en haut. Par ailleurs si l’on met au niveau 1 (soit + 5 volts) chaque entrée d’un H-Bridge, l’alimentation est alors en court circuit ; il est donc prudent d’insérer un fusible de 1 ampère dans l’alimentation de chaque carte double H-bridge, fusible qui fond dans le cas de cette manipulation malheureuse. J’ai aussi programmé le PicBasic de sorte qu’on ne puisse jamais avoir plus d’un des 8 fils de commande des moteurs a + 5 volts. page 4/7 Electronique de l’homéostat Le logiciel du PicBasic Par un port série, le PC envoie un caractère ascii, selon le caractère, le PicBasic met une des entrées des H-bridge à 5 volts (caractères 1 à 8), le caratère 0 qui correspond à la commande stop met tous les fils des entrées des H-bridge à 0 volt et les caractères a à d commandent une conversion des potentiels des points milieux des potentiomètres et renvoient au PC le résultat de cette conversion au port série du PC. Le PicBasic écrit aussi sur un afficheur LCD ce qu’il reçoit et ce qu’il envoie, cet outil est très utile à la mise au point. '************************************** ' Fichier Homeostat.bas ' lundi 17 janvier 2000 '************************************** 5 10 set picbus high lcdinit 'LCD serie a 9600 bauds 'initialisation LCD 'on met toutes les commande de moteur a zero Electronique de l’homéostat page 5/7 11 12 13 14 15 16 17 18 out out out out out out out out 19,0 18,0 16,0 17,0 12,0 13,0 14,0 15,0 20 dim char as byte, result as byte 30 serin 11,103,0,100,40,[char] 35 serout 10,103,0,10,[char,13,10] 40 45 50 lcdinit locate 0,0 'on se met a la ligne 0 du LCD print "le caractere recu est un ", char 55 56 60 65 if char = "1" then gosub stop gosub mot0_avant end if 'pour eviter les court circuits 'port 12 a 1 70 71 75 80 if char = "2" then gosub stop gosub mot0_arriere end if 'pour eviter les court circuits 'port 13 a 1 85 86 90 95 if char = "3" then gosub stop gosub mot1_avant end if 'pour eviter les court circuits 'port 14 a 1 100 101 105 110 if char = "4" then gosub stop gosub mot1_arriere end if 'pour eviter les court circuits 'port 15 a 1 115 116 120 125 if char = "5" then gosub stop gosub mot2_avant end if 'pour eviter les court cir cuits 'port 16 a 1 130 131 135 140 if char = "6" then gosub stop gosub mot2_arriere end if 'pour eviter les court circuits 'port 17 a 1 145 146 150 155 if char = "7" then gosub stop gosub mot3_avant end if 'pour eviter les court circuits 'port 18 a 1 160 161 165 170 if char = "8" then gosub stop gosub mot3_arriere end if 'pour ev iter les court circuits 'port 19 a 1 'si on recoit un caractere, on va ' a la ligne 40 'le caractere est renvoye en echo page 6/7 Electronique de l’homéostat 200 210 215 if char = "0" gosub stop end if 220 225 230 if char = "a" then goto conv0 end if 'conversion A/D tension de I/O 0 235 if char = "b" then 'conversion A/D tension de I/O 1 240 245 goto conv1 end if 250 255 260 if char = "c" goto conv2 end if 265 270 275 if char = "d" then goto conv3 end if goto 30 mot0_avant: out 12,1 return mot0_arriere: out 13,1 return mot1_avant: out 14,1 return mot1_arriere: out 15,1 ret urn mot2_avant: out 16,1 return mot2_arriere: out 17,1 return mot3_avant: out 18,1 return mot3_arriere: out 19,1 return stop: out 19,0 out 18,0 out 16,0 then then 'tous les ports a 0 'conversion A/D tension de I/O 2 'conversion A/D tension de I/O 3 page 7/7 Electronique de l’homéostat out 17,0 out 12,0 out 13,0 out 14,0 out 15,0 return conv0: result = adin (0) locate 0,1 'on se met a la ligne 1 du LCD print "resultat du canal 0 = ", dec(result) serout 10,103,0,10,[result] char = "@" return conv1: result = adin (1) locate 0,1 print "resultat du canal 1 = ", serout 10,103,0,10,[result] char = "@" return dec(result) conv2: result = adin (2) locate 0,1 print "resultat du canal 2 = ", s erout 10,103,0,10,[result] char = "@" return dec(result) conv3: result = adin (3) locate 0,1 print "resultat du canal 3 = ", serout 10,103,0,10,[result] char = "@" return dec(result)