Microcontrôleur micro:bit et circuit RC

par Jean Luc Leloire .

Utilisation d’une carte Micro:Bit pour mesurer la constante de temps d’un circuit RC (programme de Terminale)

Cet article est une adaptation de celui de Christophe Bellessort pour la micro:bit

Mesure de la constante de temps

Le montage proposé utilise une carte Micro:Bit associée à un montage RC afin de mesurer la valeur de la constante de temps.
On relève la tension aux bornes du condensateur lors de sa charge. L’échelon de tension est appliqué à l’aide de la pin0 de la carte Micro:Bit.
$$U_0 = 3,3\ \mathrm V$$


Lors de la charge, la tension UC aux bornes du condensateur varie en fonction du temps selon la relation :
$$ U_C = U_0 \times \left(1- e^{-\dfrac{t}{\tau}} \right) $$
Au bout d’une durée égale à la constante de temps la charge est effectuée à 63,2%, donc :
$$ U_C \left(\tau \right)=0{,}632 \times U_0 $$

La tension UC est mesurée sur l’entrée analogique pin2 de la carte Micro:Bit. Le convertisseur analogique/numérique de la carte renvoie 1023 si la tension lue vaut 3,3 V. La valeur correspondant à une charge à 63,2% est 1023*63.2% = 647.

On utilise la carte Micro:Bit pour mesurer le temps nécessaire pour atteindre 647 sur l’entrée analogique, condensateur initialement déchargé.

Le principe de la mesure est le suivant :

  • On appuie sur le bouton A de la carte pour entamer une décharge du condensateur en plaçant la pin0 à 0. Si la décharge est trop lente, on peut aussi appuyer sur le bouton ajouté sur la platine d’essai.
  • Une fois le condensateur déchargé, l’afficheur dessine une flèche invitant à appuyer sur le bouton B.
  • On relève la date t0, puis on commence la charge en passant la pin 0 à 3,3V. On boucle sans rien faire en mesurant à chaque tour le niveau lu sur l’entrée analogique. Quand ce dernier atteint la valeur 647, on sort de la boucle et on mesure la date t1.
  • La constante de temps en ms se déduit par une simple différence.
  • Après affichage de la valeur de la constante de temps, l’afficheur dessine une flèche invitant à appuyer sur le bouton A pour entamer un nouveau cycle de mesure.

Remarque importante
Pour obtenir des mesures suffisamment précises, il faut des constantes de temps plutôt longues, de l’ordre de la seconde. La durée d’une boucle incluant la mesure de la tension est de l’ordre du dixième de milliseconde, ce qui ne permet pas de mesurer des charges trop rapides.

Programme pour la carte Micro:Bit

  1. from microbit import *
  2. tau=0
  3. #fleche vers bouton A
  4. A = Image("00900:"
  5.           "09000:"
  6.           "99999:"
  7.           "09000:"
  8.           "00900")
  9. #fleche vers bouton B
  10. B = Image("00900:"
  11.           "00090:"
  12.           "09999:"
  13.           "00090:"
  14.           "00900")
  15. display.show(A)          
  16. while True:
  17.     if button_a.is_pressed():
  18.         print("Decharge du condensateur : pressez le bouton sur la platine si la decharge est trop longue")
  19.         pin0.write_analog(0)
  20.         while pin2.read_analog()>5:
  21.             sleep(50)
  22.         display.show(B)
  23.         print("Condensateur decharge")
  24.     if button_b.is_pressed():
  25.         print("Charge du condensateur")
  26.         t0=running_time()
  27.         pin0.write_analog(1023)
  28.         while pin2.read_analog()<647:
  29.             pass
  30.         t1=running_time()
  31.         tau = str((t1 - t0))+" ms"
  32.         print(tau)
  33.         display.scroll(tau,delay=500)
  34.         sleep(1000)
  35.         display.show(A)

Une mesure
Le résultat ci-dessous a été obtenu après avoir mesuré la valeur de la résistance à l’ohmmètre.
$$C = 100\ \mathrm{\mu F}\ et\ R = 9{,}30\ \mathrm{k \Omega}\ donne\ \tau_{th}=0{,}930\ \mathrm s\ et\ \tau_{mes} = 0{,}891\ \mathrm s$$

repl

Courbes de charge et décharge Uc=f(t)

Le grapheur de Mu permet d’afficher les données graphiquement en cliquant sur le bouton Graphique.

courbe

Programme pour la carte Micro:Bit

  1. from microbit import *
  2. pin0.write_analog(0)
  3. sleep(2000)
  4. tension=998
  5. while True:
  6.     charge=0
  7.     while tension>23:
  8.         tension=pin2.read_analog()
  9.         print((0,tension*3.3/1023,0))
  10.         sleep(100)
  11.     pin0.write_analog(1023)    
  12.     while tension<1000:
  13.         tension=pin2.read_analog()
  14.         print((0,tension*3.3/1023,3.3))
  15.         sleep(100)
  16.     pin0.write_analog(0)    
courbe

Documents joints