logo

 

Présentation

EPAR est un système de télégestion de l'éclairage public créé par BH Technologies au début des années 90, il est encore utilisé aujourd'hui dans de nombreuses communes Françaises. Une version plus récente, commercialisée à partir de 2000 nommée Xylos a elle, interessé un ami.

Ce système m'est interessant car il est de grande envergure, relativement répandu, mystérieux compte tenu du peu de documentation technique accessible au public, et possède un potentiel à connerie conséquent. L'objectif est de "reverse-engineerer" le système afin de construire un émetteur/scanner portable pour piloter l'éclairage de n'importe quel quartier équipé avec ce système.

L'ensemble du système installé dans une ville, appelé le parc, consiste en un émetteur radio piloté par une horloge ou un interrupteur crépusculaire. Les récepteurs sont sous forme de petits boîtiers pour rail DIN, qui pilotent des relais de puissance et qui sont eux, reliés au circuit d'éclairage du quartier. Ces boîtiers sont généralement trouvés dans des armoires que l'on peut croiser sur les trottoirs ou près des postes de transformation.

Boitier eclairage public

[Scruffy] a pu mettre la main sur un de ces récepteurs "ECPR LH500" (même pas volé !).
Le récepteur possède deux interrupteurs permettant de choisir la zone (4 combinaisons possibles), un interrupteur de test qui force les sorties, une LED secteur (alimentation 230V), une (ou deux) LED(s) "sortie activée" et une LED "champ".
Les 4 zones possibles sont appelées A, B, C et TP (Test Parc). Dans notre cas, le récepteur était réglé d'origine sur TP.

Deux modèles de ce récepteur existent: à une ou deux sorties. Notre version n'en a qu'une.

Lorsque le récepteur est à portée de l'émetteur la LED "champ" s'allume, indiquant qu'une porteuse à une fréquence précise doit être continuellement émise.

Analyse: Reprise du schéma

Ce fut long !

(Cliquer pour voir en grande taille)

Points test: TP1: Masse. TP2: Oscillateur local 1 (42.0875MHz). TP3: Signal numérique.
TP4: RSSI (force du signal reçu). TP5: Signal démodulé.

 

Analyse: Généralités


A l'intérieur, on trouve deux cartes: celle de puissance qui sert d'alimentation et de support pour les relais (transfo, diodes et régulateur 10v), et le circuit de réception/décodage qui est peuplé d'un nombre effrayant de quartz et de selfs.

Notre récepteur ne possédait qu'un relais, mais tous les composants nécessaires pour en faire fonctionner un deuxième étaient présents. J'ai donc ajouté une résistance à la place de la bobine du relais absent et une LED sur la face avant pour simuler la version à deux sorties.

Les deux cartes sont soudées ensembles via une paire de connecteurs. Sur la photo, le connecteur de droite (6 broches) fait la liaison pour l'alimentation et la commande des relais, celui de gauche (3 broches) fait la liaison avec la prise coaxiale pour l'antenne (que [Scruffy] a aussi pu obtenir).
Une étiquette est d'ailleurs collée sur cette antenne, où il est inscrit "31.3875 MHz". Intéressant !

D'après le peu de documentation fournie sur le net, l'émission se ferait par "sauts de fréquence" dans les environs de 32MHz, ce qui concorde avec l'étiquette de l'antenne. Certaines autres documentations parlent de modulation de phase, mais étant donnée la date d'invention du système, la modulation FSK est plus probable.

La documentation parle aussi d'une répétition des messages à intervalles variables. La commande des récepteurs serait répétée toutes les 30 minutes, avec des intervalles plus courtes lorsque le message change (5, puis 15 minutes). Attendre de recevoir un message n'imposerait donc pas de devoir attendre une demie journée.
Pour chaque commune, en plus d'une fréquence précise, un code numérique serait aussi attribué en usine pour éviter d'éventuels conflits géographiques (et peut être aussi pour éviter que les services de voirie ne s'échangent les récepteurs de ville en ville...).

 

Analyse: Logique

Le décodage du message reçu se fait d'une façon relativement complexe. Là où un simple microcontroleur aurait pu suffire, les ingénieurs de BH Technologies ont préféré utiliser un décodeur réversible similaire à celui des sonnettes sans fil: un UM3750 (aussi trouvable sous la référence MM53200). Ce circuit peut être configuré comme émetteur ou comme récepteur selon l'état d'une broche, et fonctionne en récepteur en comparant des données série codées par durée d'impulsion avec une adresse de 12 bits. Il se peut qu'il ait été choisi pour son coût, et parce qu'il est stricte: il doit réceptionner 4 bons mots correspondant a son adresse, chacun à moins de 64ms de l'autre avant d'activer sa sortie.

Ce codeur/décodeur possède une particularité qui m'a d'abord fait froncer les sourcils: il est uniquement prévu pour décoder 12 bits d'adresse fixes, aucuns bits de données (variables).
Comment le récepteur peut donc recevoir des messages pour deux relais tels que "relais 1 off", "relais 2 on" ? C'est là que les choses se compliquent un peu.

La réponse se trouve en suivant les lignes d'adresse: on découvre que les 8 premières sont fixes et codés "en dur" par des soudures sur le circuit imprimé (sur la photo, à droite: A1 à A8). Ce code est celui dont la documentation parlait, dans notre cas, c'est "11011100" (0xDC).
Les deux bits suivants (A9 et A10) sont directement reliés aux interrupteurs permettant de choisir la zone:
"TP": 11, "A": 10, "B": 01, et "C": 00. On sait donc que les zones sont simplement codées sur 2 bits.

Le bit A11 est connecté à la sortie d'une bascule D, et le bit A12 à deux switchs analogiques contenus dans un 4066. Ceci fournit déjà un élément de réponse: les deux derniers bits peuvent être variables et sont probablement utilisés pour commander les relais.

On sait donc maintenant que les 8 premiers bits vont toujours être les mêmes (du moins, pour une ville donnée). Que les bits A9 et A10 vont certainement l'être aussi (en fonction du découpage de la ville en zones, par exemple pour certains quartiers, pour piloter les fontaines, etc...), et que les deux derniers bits vont changer.

En observant la partie logique de plus près grâce au schéma, on découvre comment ils se sont débrouillés pour que le récepteur soit capable de réagir à des messages différents.
Avec 2 bits variables, on peut croire que le récepteur est en mesure de recevoir 4 messages différents. En réalité, ils vont par paires et 2 sont ignorés a la fois, selon l'état précèdent des relais.

Pour comprendre, imaginons une suite d'événements en commençant par la première mise sous tension du récepteur, la journée.

  1. Un circuit (C15, R27) produit une impulsion "power-on reset" sur les bascules U1:A et U1:B, qui force les deux relais à être ouverts. Ceci se produit uniquement quand le récepteur est installé ou après une coupure de courant de longue durée.
  2. Via le switch U5:B, le bit A12 (qui est en temps normal tiré à +10V par les pull-ups internes du UM3750) est fixé à l'inverse de l'état du relais R2, c'est à dire 1.
  3. Dès que la transmission radio commence, une partie du circuit radio fournit une impulsion sur SET, qui fixe la sortie de la bascule U2:B à 1: le bit A11 est donc à 1 aussi.
  4. Le récepteur s'attend donc à recevoir le message 0011101111 11 (il fonctionne LSB en premier), tout autre message est simplement ignoré.
  5. Si l'UM3750 reçoit 4 fois ce message, il active sa sortie, qui démarre un oscillateur lent constitué de U6:C et U6:D et inverse l'état du relais actuel (R2) grâce à U1:A, qui est donc maintenant fermé: les lampadaires du relais R2 s'allument !
  6. Au bout d'un certain moment, l'oscillateur précédemment démarré fait changer le relais actuel grâce à U2:B: Le bit A11 passe désormais à 0, et le bit A12 devient de manière identique, l'inverse de l'état du relais R1: c'est à dire 1. Le récepteur s'attend donc maintenant au message 00111011 11 01.
  7. Si l'UM3750 reçoit 4 fois ce message, il active sa sortie a nouveau, inverse l'état du relais actuel (R1) grâce à U1:B, qui est donc maintenant fermé: les lampadaires du relais R1 s'allument !
  8. Dans les deux cas précédents, le récepteur continue de s'attendre au message quoi qu'il arrive. Si le message n'est pas reçu, rien ne se passe. Il y a donc bien 4 messages possibles, mais qui vont par paires (relais fermés ou ouverts).

Pour résumer, l'émetteur fonctionne par paires de commandes. La première doit toujours concerner le relais R2 (bit A11 à 1), et la seconde toujours le relais R1 (bit A11 à 0).
Si la commande est une répétition et que le bit A12 (le bit d'état du relais) est le même, la commande est ignorée.

 

Confirmation de l'analyse logique

Pour confirmer ces informations devinées, rien ne vaut une comparaison entre ce qu'on a prévu et la réalité.

Afin de pouvoir enregistrer le signal radio reçu pendant de longues périodes, j'ai câblé l'entrée du UM3750 au reset d'un oscillateur à NE555 produisant un signal carré afin qu'il puisse être enregistré dans Audacity via la carte son de mon PC (les cartes son possèdent un condensateur en entrée, il faut donc un signal alternatif). Dans les enregistrements suivants, les bursts à 3kHz représentent donc un signal bas, et les "creux" un signal haut.

En temps normal, lorsqu'il n'y a pas de transmission, le signal radio est amplifié au point de générer du bruit. Dès que la transmission démarre, on entend tout de suite la différence et les codes s'enchaîner.

(Attention, ça gueule fort !)

En faisant bien attention, on peut même entendre le bit A11 changer exactement au milieu de cet échantillon.

Un message est constitué d'une suite de 52 mots, organisés en 2 groupes de 26 avec le bit A11 qui passe de 1 à 0, comme prévu: les 26 premiers mots concernent le relais R2, les 26 derniers concernent le relais R1.Une trame complète ressemble à ceci:

L'oscillateur lent précédemment cité créé une sorte de "fenêtre" avec le bit A11 passant de 1 à 0 sur le signal radio décodé.
De cette manière le décodage est fait à coup sur, même sans synchronisation car les deux codes de la séquence de 52 mots (qui dure 6.8 secondes) sont forcément testés entre ces fenêtres.
La seule restriction est de devoir transmettre avec A11 à 1 en premier, puis à 0.

Vus de plus près, les messages transmis sont bien comme décrits dans la documentation du UM3750: un bit de start à "1" suivi des 12 bits d'adresse:

La journée

Premiers 26 messages:
Derniers 26 messages:
On a donc ici, le code ville (00111011), l'état des deux interrupteurs (11, "TP"), relais adressé R2, état 0 (ouvert).
Ici on a également le code ville, l'état des deux interrupteurs (11, "TP"), relais adressé R1 cette fois ci, état 0 (ouvert).

La nuit

La nuit, ou selon la luminosité, les messages suivants sont transmis:

Premiers 26 messages:
Derniers 26 messages:
Le code ville, l'état des deux interrupteurs (11, "TP"), relais adressé R2, état 1 (fermé: allumage des lampadaires !).
Ici on a également le code ville, l'état des deux interrupteurs (11, "TP"), relais adressé R1, état 0 (ouvert, le relais R1 étant inutilisé où j'habite).

Voici un relevé des messages reçus ("nuit" indique un relais fermé, "jour" indique un relais ouvert):

Le 24/10/08:

20h30: "nuit" reçu
20h56: "nuit" reçu après 26 minutes
21h22: "nuit" reçu après 26 minutes
21h48: "nuit" reçu après 26 minutes
22h14: "nuit" reçu après 25 minutes
22h39: "nuit" reçu après 26 minutes
23h05: "nuit" reçu après 26 minutes
23h31: "nuit" reçu après 26 minutes
01h13: "nuit" reçu après 4*26 minutes
01h39: "nuit" reçu après 26 minutes

Le 16/02/09:
17h58: premier "nuit" reçu
18h05: "nuit" reçu après 7 minutes
18h11: "nuit" reçu après 6 minutes
18h24: "nuit" reçu après 13 minutes
18h50: "nuit" reçu après 26 minutes
20h59: "nuit" reçu après 5*26 minutes
21h25: "nuit" reçu après 26 minutes
21h51: "nuit" reçu après 26 minutes
22h16: "nuit" reçu après 25 minutes
22h42: "nuit" reçu après 26 minutes
23h08: "nuit" reçu après 26 minutes
23h59: "nuit" reçu après 2*26 minutes
00h25: "nuit" reçu après 26 minutes
00h51: "nuit" reçu après 26 minutes
01h17: "nuit" reçu après 26 minutes
01h43: "nuit" reçu après 26 minutes
02h08: "nuit" reçu après 26 minutes
Le 07/12/11:

7h26: "nuit" reçu
7h52: "nuit" reçu après 26 minutes
8h08: premier "jour" reçu
8h14: "jour" reçu après 6 minutes
8h33: "jour" reçu après 19 minutes

Comme l'indiquait bien la documentation, les message son répétés. Après un changement d'état (passage du jour à la nuit ou inversement), le message est répété deux fois après 6 minutes, puis après 13 minutes, puis toujours après 26 minutes (avec quelques sauts ?) jusqu'au prochain changement.

Les composants R10 et C12 permettant de fixer la fréquence du UM3750 sont sous son ventre et je n'ai pas pu les lire. D'après les chronogrames, sa fréquence serait dans les environ de 17.5Khz.
Tu = 1.825ms (largeur de l'impulsion de start, la largeur d'un bit vaut 3Tu).
D'après la documentation, Tu=(1/f)*32. Soit f = 1/(Tu/32) = 17.5Khz en moyenne.

Note: les deux bascules D pilotant les transistors des relais ont leur état maintenu hors tension par la charge du condensateur C13. Pour éviter que les relais se ré-enclenchent automatiquement, il faut court-circuiter ce condensateur pour réinitialiser les bascules à la prochaine mise sous tension.

 

Injection d'un signal imité

En imitant le signal reçu avec un microcontroleur, j'ai pu faire fermer et ouvrir le relais R2 comme le feraient les messages originaux, et également confirmer que le message 00111011 11 01 faisait bien fait fermer le relais R1 qui aurait pu être implanté.
On connaît donc parfaitement le format et la séquence des messages à transmettre pour piloter le récepteur.

 

Analyse: Radio

La partie radio est un récepteur à double conversion basé sur un MC3372. Ce circuit comporte un mélangeur, un ampli IF, un démodulateur et un ampli de filtre BF. La fonction squelch n'est pas utilisée.

La LED "champ" s'allume lorsqu'un signal assez puissant est détecté dans une bande de 10kHz autour de la fréquence centrale (c-à-d que le récepteur est à portée de l'émetteur). Cette LED est reliée à la sortie RSSI du MC3372 via un comparateur à hysteresis.

Réalisation de la télécommande

Le signal numérique vient d'un ATTiny45, la tension de commande ("DATA") varie entre 9V et 0.6V.

Le circuit HF est des plus simples: un oscillateur colpitts modulé par une LED verte utilisée comme Varicap du pauvre (j'en avais pas).

J'ai pu émettre et faire reconnaître le message radio à plus d'une vingtaine de mètres !
Très encourageant mais malheureusement la dérive en fréquence est beaucoup trop grande, il faut sans cesse re-régler le montage...

A améliorer, c'est inutilisable sur le terrain.

Le signal numérique provient toujours d'un ATTiny45, sur quartz désormais, afin de s'assurer de la précision des temps du message. J'ai pu le confirmer en injectant directement via un point test sur le récepteur.

Cette fois un oscillateur MC1648 est utilisé, qui fonctionne de la même façon avec un circuit LC et une LED comme Varicap. Le réglage de la fréquence est toujours difficile mais la stabilité est meilleure, le montage peut fonctionner pendant plusieurs minutes avant de nécessiter un nouveau réglage.

Encore à améliorer...

Enfin le bon ! Il utilise un module DDS à base de AD9850.

Source Version 1.1 pour AVR Studio 4

footer
symbol symbol symbol symbol symbol