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)