Firmware VMC Helios
Projet réalisé par fma38.
Abandonné
Présentation
Le but de ce projet est de remplacer le firmware d'une VMC Double Flux Helios KWL EC-270/370. Pourquoi ? Quelques éléments de réponse :
- il est bugué
- la gestion du by-pass en mode automatique est incomplète
- pas de passerelle pour le bus domotique KNX
- inexistence du support technique Helios
Cela fait beaucoup pour un produit censé être du haut de gamme, certifié Passiv'Haus ! Après 18 mois de dialogue de sourd avec Helios, où j'ai bien compris qu'il ne se passera rien, je me lance dans le développement d'un nouveau firmware. Sous réserve qu'on puisse sauvegarder l'ancien et uploader le nouveau (il est possible de bloquer ces fonctions sur le µ-contrôleur utilisé ; espérons que les allemands ne soient pas aussi pervers !).
Problèmes du firmware d'origine
Bug date/heure
J'ai constaté que lors de certains changement de dates, genre passage du 31 mars au 1er avril, ou du 31 janvier au 1er février, au lieu de passer à 00h00, l'horloge continue de s'incrémenter au delà de 24h00 !!! Non content de cela, si la VMC est en mode auto (gestion de la vitesse des ventilateur en fonction de l'heure et du jour de la semaine, selon une séquence programmable), elle passe en vitesse maxi ! Autant vous dire qu'à minuit, cela réveille toute la maison, vu les bruits engendrés par la machine lorsqu'elle est à fond !
Bypass merdique
Cette VMC est équipée d'un bypass motorisé, pilotable de manière automatique selon certains critères. Le but du bypass est de court-circuiter l'échangeur, afin d'envoyer l'air extérieur directement dans la maison. C'est très intéressant l'été, lorsque la température extérieure redescend, la nuit ; cela permet de rafraîchir.
Les critères d'ouverture du bypass (mise hors service de l'échangeur) sont les suivants (ET logique) :
- température intérieur supérieure à la température de bypass (consigne)
- température de l'air extérieur inférieure à la température de l'air intérieur
- température extérieur supérieure à la limite basse (consigne)
Tout cela est parfait, et fonctionne très bien. Là où ça coince, c'est sur les conditions de fermeture du bypass (remise en service de l'échangeur). En effet, les conditions sont les suivantes (OU logique) :
- température de l'air intérieur inférieure à la température de bypass (consigne) moins 2°C
- température de l'air extérieur inférieure à la limite basse (consigne)
Or, la seconde loi de Morgan dit :
NON(a ET b) = NON(a) OU NON(b)
On s'aperçoit donc qu'il manque une condition par rapport aux critères d'ouverture du bypass :
- température de l'air extérieur supérieure à la température de l'air intérieur
Cela correspond à la négation de la seconde condition d'ouverture du bypass. Et je peux vous dire que cette condition manquante fout un belle merde !!! En effet, si, au petit matin, la première condition de fermeture (température de l'air intérieur inférieure à la température de bypass (consigne) moins 2°C) n'est pas vraie, c'est à dire si l'on n'a pas réussi à rafraîchir suffisamment la maison pendant la nuit (ce qui est souvent le cas en été dans nos régions où les nuits ne sont pas très fraîches) le bypass va rester ouvert (échangeur hors service). Plus tard dans la journée, la température extérieure va monter bien au dessus de la température intérieure, et la VMC va souffler de l'air très chaud dans la maison, alors que passer par le bypass permet de pré-rafraichir l'air entrant en croisant l'air sortant. À la fin de la journée, c'est 2 à 3°C de plus dans la maison ! C'est bien la peine de construire passif :o/
Le plus délirant, c'est que la réponse d'Helios est qu'ils savent qu'il y a ce problème, mais qu'ils ne peuvent pas le résoudre, car cela pourrait engendrer des problèmes de condensats à des endroits non prévus ! Mouarf, vraiment du grand n'importe quoi. La condition de fermeture du bypass interviendrait justement lorsque toutes les températures sont à peu près égales !!! Où et comment cela peut-il condenser dans ce cas ? De toute façon, la VMC est équipée d'évacuations ; heureusement, car l'hiver, ça pisse de partout, vu les deltas de température. Et il n'y a aucun souci.
En fait, c'est même pire que ça, car c'est dans le cas où le bypass reste ouvert que l'on se retrouve à balancer de l'air chaud et très humide dans des gaines qui, elles, sont plus fraîches. Donc c'est dans ce cas que ça peut condenser, dans les gaines d'insufflation, et éventuellement couler par les bouches !!!
On sent une grande maîtrise de la part de ce constructeur...
Passerelle KNX
Une des raisons qui m'a fait choisir Helios, c'est la passerelle KNX (bus domotique). Mais ce modèle (KWL EC 370 Pro) était tout récent lorsque je l'ai acheté, et la passerelle n'était pas encore disponible ; elle devait sortir un peu plus tard. Quelques 2 ans après, toujours pas de passerelle, et d'après ce que j'ai compris, elle ne sortira pas pour cette VMC, mais uniquement pour les nouvelles versions qui ont une régulation un peu différente !!! Là, ça me reste vraiment en travers de la gorge !
Bilans des entrées/sorties
Bon, avant de se lancer dans l'écriture d'un firmware, il faut savoir où sont connectés les périphériques, et comment ils s'utilisent...
Ventilateurs
Les 2 ventilateurs centrifuges (soufflage et extraction) sont de la marque EBM-PAPST. Bien que je n'ai pas pu lire la référence exacte, je pense qu'il s'agit de moteur de la série EC (d'où son nom à la VMC !), peut-être bien un M3G 074-BF (la courbe aérolique correspond à peu près). Ces ventilateurs s'alimentent en 230VAC, et se pilotent en 0-10V. Ils disposent également d'un retour tachy (1 pulse par rotation).
Sur la VMC, les sorties 0-10V sont pilotées en PWM via un montage à ampli-op (2904), lui-même alimenté en 24V :
- PE9 (extraction)
- PE11 (soufflage)
La fréquence du PWM est de 5kHz :
- vitesse 1 : 25%
- vitesse 2 : 50%
- vitesse 3 : 75%
- vitesse 4 : 100%
Les entrées tachy sont routés au µ-contrôleur via :
- PB6 (extraction)
- PB7 (soufflage)
Les valeurs de pulse sont :
- vitesse 1 :
- vitesse 2 : 55ms (~1100tr/min)
- vitesse 3 :
- vitesse 4 :
TODO: vérifier largeur des pulses et fréquence
Sondes de température
Il s'agit de simples thermistances NTC, donc la valeur à 21°C vaut environ 2,35kOhm. Cela semble être des 2K@25°C.
Elles sont interfacées via une simple résistance de tirage au Vdd, plus une capa à la masse :
- T1 - PA1 (air extérieur)
- T2 - PA2 (air soufflé)
- T3 - PA3 (air repris)
- T4 - PA4 (air rejeté)
- T5 - PA5 (sonde chauffage - option)
- T6 - PA6 (sonde pré-chauffage, antigel - option)
Bypass
Le fameux bypass est un bête moteur DC alimenté en 12V. Il est piloté via un pont en H (VN5770), lui-même alimenté en 24V :
- PB0 (input 1)
- PB1 (input 2)
- PD8 (input 3)
- PD9 (input 4)
- PC5 (C.sense, via une résistance à la masse de 680Ohm)
Suivant le sens de déplacement voulu, la VMC commute les entrées 1+4 ou 2+3. Au repos, les entrées 3 et 4 sont activées, ce qui force les 2 broches du moteur à la masse (cela doit également servir à le freiner lors de l'arrêt) :
- fermeture bypass (échangeur en service) : 2 + 3
- ouverture bypass (échangeur hors service) : 1 + 4
Il n'y a pas de fin de course ; c'est le µ-contrôleur qui doit contrôler le courant consommé et détecte le blocage du moteur en fin de déplacement.
D'après ce que j'ai pu mesurer, PB0 et PB1 sont des signaux PWM, de fréquence ~330Hz, et de rapport cyclique de 1/3. Je n'ai pas réussi à mesurer la tension résultante, mais cela devrait donner 8V (alors que la doc parle de 12V). Je n'ai pas non plus réussi à mesurer la valeur sur PC5...
Relais et triacs
La VMC dispose d'un certain nombre de relais et triacs, soit destinés à piloter des composants externes, soit pour des fonctions internes.
Les relais sont piloté via un transistor (ou FET) :
- PB9 - relais 1 (alimentation des ventilateurs)
- PE1 - relais 2 (clapet air extérieur - option)
- PB12 - relais 3 (clapet air rejeté - option)
- PE2 - relais 4 (alarme)
2 triacs de puissance, montés sur dissipateur, sont utilisé pour le chauffage et l'anti-gel (options). Ces 2 triacs sont eux-même pilotés par 2 optos-triacs (MOC2023) :
- PB10 (anti-gel)
- PB11 (chauffage)
Il y a sur le PCB transfo et régulateur générant du 24V. Ce transfo de faible puissance est épaulé par un second transfo, plus puissant, monté hors PCB. Ce second transfo est mis en service par le µ-contrôleur, via un opto-triac :
- PB8 (transfo)
Communication
La VMC dispose d'un bus RS485 pour communiquer avec les petits terminaux et les sondes hygro/CO2 :
- PA9 (D RS485) - transmission données
- PA10 (R RS485) - réception données
- PA8 (DE/_RE_ RS485) - sélection direction
Autres entrées/sorties
La VMC permet de piloter une vanne mélangeuse, pour la fonction chauffage via batterie hydraulique. C'est une sortie 0-10V générée de la même manière que les signaux 0-10V des ventilateurs :
- PE13 (vanne mélangeuse)
Il y a également 2 entrées par contact sec (le contact referme un signal à la masse), sur le même principe que les retour tachy des ventilateurs :
- PC0 (contact externe - fonction programmable)
- PC1 (thermostat sécurité chauffage)
Le PCB dispose de 2 petit switchs DIL, pour sélectionner des fonction internes (maître/esclave) :
- PC6 (maître/esclave)
- PC7 (inutilisé)
Il y a même l'emplacement pour 2 autres switchs DIL (non soudés) :
- PC8
- PC9
Programmation
Un petit connecteur type HE10 est relié à divers ports du µ-contrôleur, pour les fonctions de programmation/débugage :
9 7 5 3 1 O O O O O O O O 10 8 6 4 2
- 1 : PA10 (Rx USART1)
- 2 : Vdd
- 3 : BOOT0_ (signal inversé)
- 4 : PA9 (Tx USART1)
- 5 : NRST
- 6 : Vss
- 7 : NC
- 8 : NC
- 9 : PA14 (SWCLK)
- 10 : PA13 (SWDIO)
Ce connecteur permet de basculer le contrôleur en mode bootloader, et d'uploader le firmware via l'USART1. Les pins SWxxx permettent également une programmation style JTAG.
Résumé
| Pin number | Pin Name | Direction | Function | Ventilation unit usage |
|---|---|---|---|---|
| 15 | PC0 | input | PC0 | contact sec externe (programmable) |
| 16 | PC1 | input | PC1 | thermostat sec sécurité chauffage |
| 63 | PC6 | input | PC6 | contact interne DIL (master/slave) |
| 64 | PC7 | input | PC7 | contact interne DIL (-) |
| 65 | PC8 | input | PC8 | contact interne (non monté) |
| 66 | PC9 | input | PC9 | contact interne (non monté) |
| 24 | PA1 | input | ADC12_IN1 | T1 (température air extérieur) |
| 25 | PA2 | input | ADC12_IN2 | T2 (température air soufflé) |
| 26 | PA3 | input | ADC12_IN3 | T3 (température air repris) |
| 29 | PA4 | input | ADC12_IN4 | T4 (température air rejeté) |
| 30 | PA5 | input | ADC12_IN5 | T5 (température chauffage) |
| 31 | PA6 | input | ADC12_IN6 | T6 (température anti-gel) |
| 34 | PC5 | input | ADC12_IN15 | c.sense H-bridge (moteur bypass) |
| 35 | PB0 | output | TIM3_CH3 | input 1 H-bridge (moteur bypass) |
| 36 | PB1 | output | TIM3_CH4 | input 2 H-bridge (moteur bypass) |
| 55 | PD8 | output | PD8 | input 3 H-bridge (moteur bypass) |
| 56 | PD9 | output | PD9 | input 4 H-bridge (moteur bypass) |
| 40 | PE9 | output | TIM1_CH1 | 0-10V en PWM (ventilateur extraction) |
| 42 | PE11 | output | TIM1_CH2 | 0-10V en PWM (ventilateur soufflage) |
| 44 | PE13 | output | TIM1_CH3 | 0-10V en PWM (vanne 3 voies chauffage) |
| 47 | PB10 | output | PB10/TIM2_CH3 | puissance batterie anti-gel (triac) |
| 48 | PB11 | output | PB11/TIM2_CH4 | puissance batterie chauffage (triac) |
| 67 | PA8 | output | PA8 | RS485 (sélection RD/WR) |
| 68 | PA9 | output | USART1_TX | RS485 (TX) |
| 69 | PA10 | input | USART1_RX | RS485 (RX) |
| 72 | PA13 | bidir | SWDIO | Data JTAG |
| 76 | PA14 | output | SWCLK | Clock JTAG |
| 14 | NRST | input | NRST | Reset |
| 92 | PB6 | input | PB6/TIM4_CH1 | tachy ventilateur extraction |
| 93 | PB7 | input | PB7/TIM4_CH2 | tachy ventilateur soufflage |
| 94 | BOOT0 | input | BOOT0 | sélection boot |
| 95 | PB8 | output | PB8 | mise en service transfo |
| 96 | PB9 | output | PB9 | relais 1 (ventilateurs) |
| 98 | PE1 | output | PE1 | relais 2 (clapet air extérieur) |
| 51 | PB12 | output | PB12 | relais 3 (clapet air rejeté) |
| 1 | PE2 | output | PE2 | relais 4 (alarme) |
Gestion VMC et nouveau firmware
Pilotage ventilateurs
L'alimentation de puissance des ventilateurs se fait au travers du relais 1. La VMC met en service ce relais lors de la phase d'initialisation. Elle pilote ensuite la vitesse via les sorties 0-10V, à la valeur de la dernière consigne enregistrée en mémoire.
Les ventilateurs ne démarrent qu'à une tension de 1,7V mini, et sont à leur vitesse max à 10V. Le firmware d'origine est limité à 4 vitesses ; autant faire mieux dans le nouveau firmware, en utilisant une consigne type 0-100%.
Lecture sondes de températures
Pilotage bypass
Lors du cycle d'initialisation, après la mise sous tension, le VMC pilote le bypass en position fermée pour être certain de sa position initiale.
Outils de développement
Carte de test
Pour les tests, j'ai acheté une carte ARM Cortex-M3 MINI STM32 Development Board STM32F103VBT6, pour une vingtaine d'euros. Cetet carte a le même chip que dans la VMC. La seule différence est qu'elle est cadencée par un quartz de 8MHz, au lieu de 12MHz pour celle d'Helios. Pas difficile à changer !
Pour me simplifier le développement au maximum, et le rendre facile d'accès à d'autres utilisateurs qui voudront hacker leur firmware, j'utilise l'environnement de développement Maple IDE ; c'est un équivalent de l'IDE Arduino, mais avec des librairies pour STM32.
Comme ma carte de dev. n'était pas supportée, j'ai commencé par modifier le code pour qu'elle puisse être utilisée.
Upload du firmware
La carte Helios ne disposant pas de port USB, il ne sera pas possible d'utiliser le bootloader Maple (sauf si possible de l'adapter pour qu'il utilise l'USART1, dispo sur le connecteur HE10)...
Le firmware devrait pouvoir être uploadé via le bootloader hard intégré dans le STM32. En effet, Helios a sorti sur le connecteur HE10 tous les signaux nécessaires pour ça :
- BOOT0 - permet de sélectionner la banque contenant le bootloader
- NRST - reset du chip
- Vss - GND
- Vdd - 3,3V
- Tx USART1 - réception des données
- Rx USART1 - envoi des données
Pour communiquer avec l'USART1, il faut un adaptateur FTDI en 3,3V.
La séquence pour passer en mode bootloader est la suivante :
- TODO
Une autre solution, peut-être plus simple, est d'utiliser une carte supportant stlink (jtag-like), et d'utiliser les pins SWCLK/SWDIO.
Documents
Photos
Schémas
Attention : aucune garantie sur la justesse de ce schéma
Liens
- VMC Helios:
- µ-contrôleur STM32 :
- Chaîne de développement :