Parametrieren des 433 MHz Funkmoduls HC-12

Gleich einmal vorweg: Von allen bisher von mir verwendeten 433 MHZ Funkmodulen sind die HC-12 Module mit Abstand die Besten in Bezug auf Reichweite innerhalb von Gebäuden, die ich je eingesetzt habe. Funkübertragungen über mehrere Zimmer hinweg, mit geschlossenen Türen, auch stockwerkübergreifend, funktionieren problemlos. Und im Freien sollen Übertragungsstrecken bis zu 1000 m möglich sein. Das habe ich zwar noch nicht getestet, aber mehrere 100 m sind kein Problem.

Mittels Parameter können Eigenschaften der HC-12 Module verändert werden. Das Modul ist zwar mit seinen voreingestellten Parametern sofort einsatzbereit, um das Modul jedoch für seine Zwecke in Bezug auf Kanal, Geschwindigkeit, Stromverbrauch oder Reichweite optimal zu nutzen, müssen die voreingestellten Parameter eventuell angepasst werden.

                                

                   Bild 1: HC-12 Modul

    Anschlüsse:

  •     VCC, GND: Stromversorgung 3,2 - 5,5 V
  •     RXD, TXD: Serieller Schnittstelle
  •     SET: Eingangspin für Parametrier-Modus
  •     ANT1: Anschluss für SMA-Antenne
  •     ANT2: Lötanschluss für Federantenne

Einstellbare Parameter:

Baudrate der UART-Kommunikation:

1200, 2400, 4800, 9600, 19200, 38400, 57600 oder 115200 bps


Sendekanal:

Ch001 (433,4 MHz) bis Ch100 (473,0 MHz)

(maximal bis Ch127, jedoch bei Kanal > Ch100 ist Kommunikationsdistanz nicht garantiert)


Übertragungsmodus FU1 - FU4:

FU1: Mittlerer Stromsparmodus

  • Ruhestrom ca. 3,6 mA
  • Alle 8 UART-Baudraten möglich
  • Luft-Baudrate: konstant 250000 bps
  • Geringe Übertragungsdistanz


FU2: Maximaler Stromsparmodus

  • Ruhestrom ca. 80 µA
  • UART-Baudrate: automatisch 4800 bps oder tiefer
  • Luft-Baudrate: konstant 250000 bps
  • Geringe Übertragungsdistanz


FU3: Variable Geschwindigkeit, variable Übertragungsdistanz

  • Ruhestrom ca. 16 mA
  • Alle 8 UART-Baudraten möglich
  • Luft-Baudrate: abhängig von der eingestellten UART-Baudrate bis zu 236000 bps (siehe  Tabelle 1)
  • Für weitest mögliche Übertragungsdistanz bei Einstellung mit geringster UART-Baudrate (siehe Tabelle 2)


Tabelle 1: Zusammenhang zwischen UART-Baudrate und Luftbaudrate


Tabelle 2: Zusammenhang zwischen Luft-Baudrate und Eingangsempfindlichkeit (Info zu "dBm" siehe nachfolgend unter "Sendeleistung")


FU4: Maximale Übertragungsdistanz, niedrigste Übertragungsrate

  • Ruhestrom ca. 16 mA
  • UART-Baudrate: automatisch 1200 bps
  • Luft-Baudrate: konstant 500 bps
  • Nur für kleine Datenpakete (max. 60 Byte je Paket) im Abstand von mind. 2 Sekunden


Info: Der maximale Arbeitsstrom (während des Sendes) liegt bei ca. 100 mA!


Sendeleistung:

-1, 2, 5, 8, 11, 14, 17 oder 20 dBm


Info zur Sendeleistung:

dBm (Dezibel Milliwatt) ist die Einheit des logarithmischen Leistungspegel Lp und ist definiert als:

Lp [dBm]  = 10*log(P/1mW)   (log ... Logarithmus zur Basis 10)

daraus ergibt sich:

P [mW] = 1mW*10^(Lp/10)

Ist z.B. die Sendeleistung mit 20 dBm vorgegeben, ergibt das eine Sendeleistung von

P = 1*10^(20/10) = 100 mW

Eine Sendeleistung von -1 dBm ergibt somit

P = 1*10^(-1/10) = 0,79 mW


Datenformat der UART-Kommunikation:

  • Anzahl der Datenbits und Stoppbits
  • Gerade, ungerade oder keine Parität

Das Datenformat kann mit dem Parametrierprogramm nicht verändert werden, darauf habe ich bewusst verzichtet (siehe Hinweis weiter unten).


Das Anzeigen und/oder Verändern der Parameter erfolgt - wie auch das Senden und Empfangen von Nachrichten - über die Serielle Schnittstelle. Nur der SET-Eingang des Moduls muss dazu noch zusätzlich beschaltet werden.


Werkseitig sind folgende Parameter eingestellt:

  • Baudrate: 9600 bps
  • Sendekanal: Ch001 (433,4 MHz)
  • Übertragungsmodus: FU3
  • Sendeleistung: 20 dBm
  • Datenformat: 8N1 (8 Datenbits, keine Parität, 1 Stoppbit)


Mit nachfolgendem Programm können die Parameter mit Ausnahme des Datenformats über den Seriellen Monitor angezeigt und verändert werden.

Hinweis: Das Datenformat kann mit dem Programm deshalb nicht verändert werden, da dann vermutlich keine UART-Kommunikation mehr zum Arduino möglich ist. Die Kommunikation im Arduino läuft über die SoftwareSerial-Library und da ist mir keine Möglichkeit bekannt, das Datenformat zu ändern.


Das Datenblatt zum HC-12 kann z.B. hier heruntergeladen werden: statics3.seeedstudio.com/assets/file/bazaar/product/HC-12_english_datasheets.pdf


Testaufbau:

Verwendete Bauteile:

  • 1 Arduino Nano
  • 1 433 MHz HC-12 Modul

    Optional:

  • 1 Messgerät (mit mA und µA-Messbereich)



Anschluss des HC-12 Moduls:

HC-12 Pin             Arduino-Pin

   VCC         ->         5V

   GND        ->          GND

   RXD         ->          D4 (txPin)

   TXD         ->          D3 (rxPin)

   SET          ->          D5


Achtung auf das "Auskreuzen" der RX- und TX-Leitungen. Das Programm verwendet für die Serielle Schnittstelle die SoftwareSerial-Library. Die Definition der RX und TX-Leitung des Arduino erfolgt dabei bei der Erzeugung der Instanz:

#define rxPin 3
#define txPin 4

#include <SoftwareSerial.h>

SoftwareSerial swSerial(rxPin, txPin);

Programm zur Parametrierung des HC-12:

Das Parametrierprogramm wird über den Seriellen Monitor bedient (Baudrate 115200 bps). Nach Aufruf des Programms wird die eingestellte Baudrate des angeschlossenen HC-12 Moduls gescannt und angezeigt. Danach können folgende Funktionen aufgerufen werden:


Funktionen:

  • Anzeigen des Menüs (wenn aus dem Bildschirm gescrollt)
  • Anzeige und Änderung der UART-Baudrate
  • Anzeige und Änderung des Sendekanals
  • Anzeige und Änderung des Übertragungsmodus
  • Anzeige und Änderung der Sendeleistung
  • Anzeigen aller Parameter 1)
  • Anzeigen der Firmware Version
  • Testen des Schlafmodus (Messgerät zur Strommessung erforderlich)
  • Scannen der eingestellten UART-Baudrate 2)
  • Rücksetzen auf Werkseinstellung
  • Übernahme der Änderungen und weiter
  • Programm beenden mit Übernahme der Änderungen


1)  Es werden die Parameter UART-Baudrate, Sendekanal, Übertragungsmodus und Sendeleistung angezeigt. Das eingestellte Datenformat der Seriellen Schnittstelle kann dabei aus dem HC-12 nicht ausgelesen werden.

2)  Sollte sich eine Diskrepanz zwischen der parametrierten Baudrate des HC-12 Modul und der beim Programmstart ermittelten und vom Parametrierprogramm verwendeten Baudrate ergeben (was sich durch Nichtfunktionieren der Kommunikation zeigt), kann durch den Befehl "Scannen der UART-Baudrate" wieder behoben werden.


AT Command mode:

Zur Parametrierung muss das HC-12 Modul in den "AT command mode" gesetzt werden. Dazu wird der SET-Eingang des Moduls durch das Programm auf LOW gelegt. Je nach Menüauswahl wird über die Serielle Schnittstelle ein AT-Kommando AT+Befehl an das Modul gesendet. Das Modul quittiert anschließend die Meldung mit OK+Rückmeldung, was am Seriellen Monitor angezeigt wird. AT-Kommandos und Rückmeldungen sind nicht durch das Parametrierprogramm, sondern durch die Firmware des HC-12 bestimmt und können im Datenblatt (siehe obigen Link) nachgelesen werden.


Beispiele für die Kommunikation mit dem HC-12:

Test der Kommunikation:

  • Abgesetztes Kommando: AT
  • Quittierung durch HC-12: OK


Ändern der UART-Baudrate auf 4800 bps:

  • Abgesetztes Kommando: AT+B4800
  • Quittierung durch HC-12: OK+B4800


Anzeigen des eingestellten Sendekanals (im Beispiel Kanal Ch001):

  • Abgesetztes Kommando: AT+RC
  • Quittierung durch HC-12: OK+RC001


Alle möglichen Kommandos und Quittierungen können dem oben verlinkten Datenblatt entnommen werden!


Ruhestromaufnahme:

Die Ruhestromaufnahme, also die Stromaufnahme des Moduls, wenn nicht gerade gesendet wird, ist in erster Linie abhängig vom gewählten Übertragungsmodus (siehe Angaben zum "Übertragungsmodus FU1 - FU4" oben) und ist ein Entscheidungskriterium, ob die Stromversorgung über Batteriebetrieb erfolgen kann (während des Sendevorgangs beträgt die Stromaufnahme bis zu 100 mA). Zusätzlich kann das Modul auch während längerer Sendepausen in einen Schlafmodus gesetzt werden, die Stromaufnahme beträgt dann laut Datenblatt 22 µA (bei meiner Strommessung kam ich nur auf ca. 6 µA - siehe Bild 3).

Wenn man die Angaben im Datenblatt zum Ruhestromverbrauch überprüfen möchte, kann man den Stromverbrauch auch während der Ausführung des Parametrierprogramms messen. Änderungen von Parametern oder Setzen in den Schlafmodus und damit verbundene Änderungen der Ruhestromaufnahme werden aber erst wirksam, wenn der "AT command mode" wieder verlassen wurde. Das wird auch vom Parametrierprogramm berücksichtigt. Beim Testen des Schlafmodus kann der Ruhestrom sofort gemessen werden. Nach Änderung eines oder mehrerer Parameter werden diese aber erst mit der Menuauswahl "Uebernahme der Aenderung" wirksam. Das Programm verlässt dabei den "AT command mode", so dass der Ruhestrom mit den nun eingestellten Parametern gemessen werden kann. Nach Eingabe einer beliebigen Zahl kehrt dann das Programm in den "AT command mode" zurück.


Bedienung des Programms (Beispiele):

Nach Start des Programms wird die eingestellte Baudrate des HC-Moduls gescannt und das Auswahlmenü angezeigt. Durch Eingabe der Zahl "6" werden alle Parameter (wie bereits beschrieben, ohne Datenformat der Seriellen Schnittstelle) angezeigt, so wie diese von der Firmware des HC-12 zurückgegeben werden:

OK+9600             -> UART-Baudrate 9600 bps

OK+RC001           -> Sendekanal Ch001

OK+RP:+20dBm  -> Sendeleistung +20 dBm

OK+FU3               -> Übertragungsmodus FU3


Bild 2: Programmstart mit Abfrage der Parameter


Durch Eingabe der Zahl "14" kann der Übertragungsmodus gewählt werden, mit "2" wird der Modus "FU2" festgelegt. Dieser Übertragungsmodus begrenzt die UART-Baudrate auf 4800 bps, was auch bei der Rückmeldung des Moduls angezeigt wird:

OK+FU2, B4800 -> Übertragungsmodus FU2, UART-Baudrate 4800 bps


Bild 3: Ändern des Übertragungsmodus mit automatischer Begrenzung der UART-Baudrate


Mit Eingabe von "20" kann der Schlafmodus getestet werden. Das HC-12 Modul quittiert die Anforderung mit OK+SLEEP. Der gemessene Stromverbrauch wird mit ca. 6 µA angezeigt (laut Datenblatt sollten es ca. 22 µA sein). Mit Eingabe einer belieben Zahl kann das Programm dann fortgesetzt werden.


Bild 4: Setzen des Moduls in den Schlafmodus mit Anzeige des Stromverbrauchs am Multimeter von ca. 6 µA (Messbereichsvorwahl 200 µA)


Hier nun das Programm Config_HC-12_V1.0.ino als Textfile:

Das Programm benötigt neben der Standard-Librariy SoftwareSerial auch meine Library MySerialRead. Diese kann hier heruntergeladen werden: Serieller Monitor


Leider kann ich hier keine "ino"-Files hochladen, daher zum Verwenden des Programms ".txt" aus dem Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "Config_HC-12_V1.0" speichern.

Config_HC-12_V1.0.ino.txt