hdo  beta
HDO Detector

Projekt pro demostraci vyhodnocení signálu HDO 216,6 Hz v síťovém napětí. Oproti dříve používaným metodám, které sice používaly k vyhodnocení procesor, ale jen na určení tvaru telegramu tato metoda nevyžaduje prakticky žádný analogový filtr, napětí z rozvodné sítě se přivádí (po transformaci, tj. jen oddělení) přímo do A/D převodníku. Moderní rychlé procesory tak umožňují trochu jiný přístup k problému a to vede k podstatnému zjednodušení hardware. Zajímavé je zjištění, že tento přístup by zřejmě vedl k úspěchu i při použití 8-bitového procesoru a to i nikterak rychlého.

Projekt není stavebním návodem na koncové zařízení, které bude spínat spotřebiče podle nastaveného tarifu, případně indikovat tarif, ale jen popis několika praktických zkoušek principu, na němž je možné takovéto zařízení úspěšně zhotovit.

Vše podstatné je zde zveřejněno v podobě zdrojových kódů v jazyce C, je to jen dost hrubá, avšak funkční kostra, komerční zařízení by vyžadovalo dodělat ještě několik konfiguračních parametrů (216,6 Hz není jediná používaná frekvence) a metodu jak tyto parametry nastavit. Jako inspirace pro vlastní konstrukci tento projekt může docela dobře posloužit.

Bližší popis

  1. main.c - hlavní program
  2. goertzel.h - utility pro výpočet poměrného výkonu signálu pomocí Goertzelova algoritmu
  3. hdo.h - dekódování telegramu a převod do čitelné podoby, jednoduchý konečný automat

Podporované platformy

Projekt byl vytvořen pro procesor AT91SAM7S256 a vývojový kit od fy. Kramara. Nástrojová sada je GNU ARM - arm-elf-gcc ... Vyzkoušel jsem rychlost výpočtu na 8-bit architektuře AT89C51ED2 v normálním módu, s oscilátorem na 11,0592 MHz, data pro výpočet v XRAM, aritfmt long (32 bit). Výpočet trvá asi 42 msec, takže zatížení je tak 1/3. Z toho je vidět, že portovat metodu na osmibitovou architekturu je možné, chtělo by to ale provádět výpočet koeficientů Goertzelova algoritmu přímo v přerušení, pouze vyhodnocení v main. Tím by klesly nároky na paměť a zvýšila by se rychlost.

Obrázky

tlg.png

Ukazuje tvar telegramu po vyhodnocení Goertzelovým algoritmem

hdo.png

Schéma realizovaného přípravku. Funguje, ale mohlo by to mít větší citlivost.

wien.png

Schéma, jak by se to dalo zlepšit. Wienův můstek potlačí 50 Hz, přičemž signál 216,6Hz je tlumen jen málo. Dá se přesněji nastavit pomocí RV1. Vinutí transformátoru musí být symetrické.

Licence

Program je publikován pod GPL License, verze2

Ke stažení

Testovací verze

Doplnění.

Protože se ozývají jedinci, že použitý procesor není žádná špička, přidal jsem zdrojáky pro STM32F0 Discovery kit. Je to dost překopáno, protože jsem použil již hotové kusy kódu psané v C++ a ADC v tomto procesoru se chová trochu odlišně, bylo nutné předělat i vyhodnocení telegramu. Možná je to tak lépe. Princip i fukčnost zůstává. Kód je trochu úspornější, takže nic nebrání použít i menší procesor s jádrem Cortex-M0+, který je ještě levnější (F030,31). Pro praktické použití by bylo nutné připojit krystal 8 MHz a v csystem.c přepnout hodiny na HSE. Sice to funguje i s HSI, ale obávám se, že tyto hodiny nejsou dostatečně stabilní. Ostatně je vidět i velký jitter, který znesnadňuje vyhodnocování telegramu. Právě z tohoto důvodu je i v ADC použit PCLK/2 místo ADCCLK, jehož jitter je ještě větší. Obsah signálu HDO v síťovém napětí je dost malý, takže nastavit to na spolehlivé vyhodnocení vyžaduje poměrně značné úsilí. S původní periodou vyhodnocení 166 ms se mi to vůbec nepodařilo, bylo nutno zvolit periodu 120 ms, což je násobek (26.) periody signálu 216.66 Hz.

Verze pro STM32F0 Discovery