Après le succès de mon premier minuteur, j'ai décidé de le moderniser et de l'améliorer
tout en conservant un faible encombrement. Voici les améliorations apportées :
Ce minuteur est principalement destiné à une utilisation en cuisine, il doit être facilement réglable et peu encombrant.
Pour le choix des composants, j'ai sélectionné le microcontrôleur STM32L100RC que j'ai déjà utilisé dans plusieurs de mes projets. Ce microcontrôleur présente l'avantage d'avoir une faible consommation d'énergie.
Pour l'affichage, le EADOG102 me semble parfaitement adapté à mon utilisation, étant le plus petit écran LCD graphique que j'ai pu trouver. La gestion de la consommation du système est cruciale pour moi, car je cherche à minimiser la consommation afin d'obtenir la meilleure autonomie possible avec une pile bouton de type CR2450.
Dans la version précédente, j'utilisais un switch de type joystick pour le réglage. Cependant, ce composant est devenu difficile à trouver et assez fragile. C'est pourquoi j'ai décidé de le remplacer par un encodeur rotatif.
Le bouton poussoir de l'encodeur rotatif est utilisé pour enclencher l'alimentation via le transistor (Q2), tandis que le microprocesseur maintient l'alimentation par l'intermédiaire du transistor (Q1).
Pour le buzzer, j'ai intégré un transistor (Q3) en configuration émetteur-suiveur afin d'amplifier le courant à partir de la sortie DAC du microcontrôleur.
Pour minimiser la consommation, j'ai également ajouté un dispositif pour couper l'alimentation du module Bluetooth via le transistor (Q4).
Enfin, j'ai inclus un pont résistif pour mesurer la tension de la batterie et ainsi être averti lorsque celle-ci nécessite un remplacement.
id | Référence | Empreinte | Quantité | Désignation |
---|---|---|---|---|
1 | C1,C3,C5,C2,C10 | C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | 5 | 100n |
2 | R3,R2,R7,R4 | R_0805_2012Metric_Pad1.18x1.45mm_HandSolder | 4 | 10 |
3 | C7,C8 | C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | 2 | 6.8p |
4 | C18,C11,C9 | C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | 3 | 1u |
5 | R10 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 1 | 10K |
6 | D1,D2,D3 | D_MiniMELF | 3 | LL4148 |
7 | R14,R5,R1,R11 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 4 | 100K |
7 | R9 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 1 | 100 |
9 | SW1 | SW_Push_SPST_NO_Alps_SKRK | 1 | SW_Push |
10 | R8 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 1 | 47K |
11 | Y1 | Crystal_SMD_2012-2Pin_2.0x1.2mm | 1 | 32.768 |
12 | R6 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 1 | 510 |
13 | SW2 | PEC11L_Encodeur | 1 | RotaryEncoder_Switch |
14 | Q3,Q1 | SOT-23 | 2 | BC850 |
15 | C20,C19,C6 | C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | 3 | 10u |
16 | C4 | C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | 1 | 1n |
18 | Q2,Q4 | SOT-23 | 2 | BC860 |
19 | U2 | LQFP-64_10x10mm_P0.5mm | 1 | STM32L100RCTx |
20 | U4 | EA-DOGS102 | 1 | EA_DOGS102-6 |
21 | R12 | R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | 1 | 15K |
22 | J1 | PinHeader_2x05_P1.27mm_Vertical_SMD | 1 | Conn_02x05_Odd_Even |
23 | BZ1 | EKULIT-1 | 1 | Buzzer |
24 | U1 | ST_SPBTLE | 1 | SPBTLE-RF |
25 | BT1 | Support pile CR2450 | 1 | Battery_Cell |
Correction : J'ai initialement supposé l'existence d'une référence de tension interne au microprocesseur, un bandgap, utilisable comme référence pour le convertisseur ADC. Après consultation du datasheet du microcontrôleur, j'ai découvert qu'il existe effectivement une référence interne utilisée pour la calibration du convertisseur ADC.
La référence du convertisseur correspond à la tension d'entrée VDDA. Lorsque le convertisseur est configuré sur 12 bits, une tension d'entrée équivalente à VA = VDDA produira une valeur de 4096. En utilisant un pont résistif de 100K et 33K, j'obtiendrai toujours la même valeur :
4096 . VDDA R14 + R13 . R13 VDDA = X => (4096 . K) = X avec K = R13 R13 + R14Après quelques mois d'utilisation, j'ai rencontré un problème avec le codeur incrémental. En effet, le filtre logiciel proposé dans l'application n'est pas assez efficace, ce qui empêche de distinguer correctement le sens de rotation.
Pour résoudre ce problème, j'ai ajouté un filtre passe-bas sur chaque sortie du codeur incrémental.