- Werbung -

Durch ein paar glückliche Umstände ist Martin im Zugriff auf ein paar nette Embedded Systeme, Einplatinencomputer auch genannt, gekommen. Nun ja, irgendwie fragt man sich, was kann man mit einem solchen System denn anfangen? Da hatte Martin die glorreiche Idee, man könnte eine Überwachung von einem Klofenster machen. Warum? Ganz einfach, man hat das Problem, dass man doch mal gerne lüften würde im Klo. Was passiert aber, wenn man im Winter vergisst, das Fenster zu schließen? Klar, es wird kalt... und im Extremfall könnten auch die Leitungen reißen.

Was könnte man also tun um dem vorzubeugen? Ganz klar, man nehme eine einfache Steuerung, die einem dabei hilft, das Problem zu beseitigen.
Wir brauchen dazu folgende Punkte:

  • Fenster offen - geschlossen
  • Temperatur im Raum
  • evtl. Außentemperatur
  • Möglichkeit zur Kontaktierung

So, das sind mal die primären Ziele, auf die wir hinarbeiten wollen. Jetzt kommt zuerst das Board. Mal sehen, was wir da eigentlich vor uns haben.
STM32VL-Discovery:

  • 32 Bit Microcontroller
  • 128 kiB Flash-Speicher (nicht flüchtiger Speicher)
  • 8kiB RAM
  • 64 Pin Ausführung
  • LED Grün - LD3 verbunden an Pin PC9
  • LED Blau - LD4 verbunden an Pin PC8
  • User Button - verbunden an Pin PA0
  • Reset Button
  • Alle 64 Pins sind an Steckpins zum einfachen Hantieren herausgeführt
  • 12 Bit Analogwandler
  • Digital-Analog-Wandler
  • PWM-Generator
  • Verschiedene Timer

 

Betrachten wir erst mal die vorhandenen Bauteile:
Da wäre der User-Button. Wenn wir das Elektrische Schema dazu anschauen, wie es in dem PDF vorhanden ist, sieht das folgendermaßen aus:

 

 Der Kondensator C22 ist auf der Platine nicht eingebaut.

Versuchen wir die Spannung bzw. den Strompfad zu analysieren:

→ User Button nicht gedrückt:
Die 3.3V liegen an bis zum Taster, da der aber den Stromkreis unterbricht, wird das Potential vom GND (Ground/0V) über den Widerstand an PC0 anlegen.
UPA0 = 0V

→ User Button gedrückt:
In diesem Fall fällt die Spannung am größten Widerstand ab, in dem Fall an R21. Da der „Anfang“ von R21 aber direkt mit PA0 verbunden ist, liegen in diesem Fall 3,3V am Pin PA0 an.
UPA0 = 3,3V

Das hört sich schon wieder zu einfach an um wahr zu sein, aber es ist so.

Den Fensterkontakt könnte man ganz einfach über einen Reedkontakt herstellen. Ein Reedkontakt ist nichts anders als ein Schalter, der mechanisch über einen Magneten betätigt wird.
Das Beispiel für unser Board würde dann wie folgt aussehen:

In diesem Fall wird ein 1KOhm Widerstand genommen, was aber die gleiche Funktion bietet. (Es fließt nur ein etwas höherer Strom.

Kommen wir zu den LEDs. Die sind laut des Schemas wie folgt beschaltet:

Jetzt stellt sich die Frage, wie hoch sind die Ausgänge belastbar ?
Man könnte es sich anhand der LEDs ja mal ausrechnen. Messen wir erst mal die Spannung am Widerstand.

 

 

 

So, und da wir in Physik, bzw. als Elektriker gelernt haben:

 

 

 

 

Öhm, das kommt mir aber etwas komisch vor, normalerweise sagt man bei LEDs, die Spannung ist unterschiedlich je nach Farbe, der Sättigungsstrom wie hell die LED leuchtet ist in etwa gleich.

Schauen wir uns die Platine mal genauer an.

 

Sieht ja soweit OK aus, wir erkennen unseren R25, der eine Größe von 330 Ohm hat.

 

 

 

So, die andere Seite:

Interessant, hier lesen wir beim Widerstand R26 80A, bzw. eigentlich 80R, das heißt, 80 Ohm.
Rechnen wir das zweite Beispiel nochmals mit dem Wert durch:

Das sieht jetzt viel besser aus. Daraus können wir schließen, dass wir die Ausgänge mit 4mA belasten können. Wie groß die Gesamtbelastbarkeit ist, steht evtl. in den Datenblättern.

Analogwerte, oder wie stellen wir fest wie warm es ist?

Wenn wir diversen Beispielen im Internet folgen, können wir es ganz einfach machen. Wir nehmen ein Potentiometer (Dreh/Verstellbarer Widerstand), schließen ihn an 0V (GND) an, die andere maximale Seite an 3,3V und den Mittelabgriff an den Eingang. Wir nehmen der Einfachheit halber den Eingang PB1.

Schauen wir uns erst mal an, was wir hier für Werte bekommen.
Drehen wir das Poti mal ganz nach links. Wir bekommen den Wert 0 (Spannung = 0V)
Drehen wir das Poti mal ganz nach rechts. Wir bekommen den Wert 4096 (Spannung = 2.92V)
Interessant, dann heißt das also deshalb 12 Bit AD Wandler, weil 212=4096 ist.

Wie bekommen wir am einfachsten eine Fühlermessung hin?
Hmm... es gibt den Begriff eines Spannungsteilers, ich glaube das könnte dann hier helfen.
Schauen wir uns das mal als ein Bildchen an:

Es sieht nicht anders aus als unser Poti, nur dass es jetzt nicht drehend verändert werden kann, sondern über die Temperatur.

Nehmen wir mal ein paar Beispiele aus dem Datenblatt:
 

Temperatur in °C -20 -10 0 10 20 25 30 40
Widerstandswert in Ohm 684 747 815 886 961 1000 1040 1122

 

So, im obigen Bild habe ich dann den Wert 815 genommen für 0°C, dem Wert, an dem Wasser anfängt Eis zu werden.

Wie rechnen wir uns das jetzt aus? Eigentlich ist die Spannung UPB1 gleich der Spannung, die am Temperaturfühler anliegt. Das wiederum lässt sich berechnen über das Verhältnis der Widerstände, denn die Spannung teilt sich im Verhältnis der Widerstände auf.
D.h.

 

 

Wenn wir jetzt noch einen Dreisatz zu Hilfe nehmen, dann würde das wie folgt aussehen:

 

 

 

 

Also um den Wert 2034 muss Alarm gegeben werden. Für die anderen Werte können wir das ja in einer Tabelle mal anlegen.
 

Temepratur in °C U in V RKTY in Ω R in Ω R + RKTY in Ω UKTY in V Analogwert
-20 2,92 684 826 1510 1,32 1855
-10 2,92 747 826 1573 1,39 1945
0 2,92 815 826 1641 1,45 2034
10 2,92 886 826 1712 1,51 2120
20 2,92 961 826 1787 1,57 2203
25 2,92 1000 826 1826 1,6 2243
30 2,92 1040 826 1866 1,63 2283
40 2,92 1122 826 1948 1,68 2359

 

So, wie wir jetzt deutlich erkennen, sind die kühleren Temperaturen kleiner als 2034.
Eigentlich wäre es sogar besser, wenn wir sagen, wenn der Wert kleiner als 2120 wird, dann soll es Alarm geben.

Es gibt sicherlich noch bessere Methoden das festzustellen, das war die, die mir als erste eingefallen ist.

Der Temperatursensor on Board ist auf dem Analogen Kanal 16 zu finden, leider findet man nicht wirklich, wie man den sinnvoll zurück rechnen kann. Wenn ich einen Wert von 1900 bekomme, weiß ich ja nicht, was es entsprechen soll... und nein, es sind keine 19°C.

Serielle Schnittstelle

Nachdem wir geschmökert haben auf der Wikipedia-Seite von RS232 müssen wir leider erkennen, dass wir die UART-Schnittstellen von dem STM32-Board nicht direkt verwenden können. RS232 braucht zum Erkennen, dass es eine 0 ist, eine negative Spannung (-3 bis -12V) und eine 1 (3V bis 12V). Ergo wir brauchen einen Umsetzer.

Zum Glück bieten uns die Unterlagen zum STM32-Board die Vorlagen, und die sehen wie folgt aus:

Nach dem Bild sieht das ja einfach aus. Wir organisieren uns einen MAX3232-Baustein, und ein Paar Kondensatoren und schließen ihn dann genau so an. Und plötzlich spricht der STM32 mit uns... und kann uns warnen, wenn die Temperatur zu sehr sinkt und das Klofenster noch offen ist.

Evtl. wäre es ein Gedanke, mal bei eBay zu schmökern, und nach einem Handy zu schauen, das eine serielle Ansteuerung bietet. Damit könnte man dann direkt gleich eine Textnachricht verschicken gehen.

Fortsetzung folgt

So viel zur Hardware. Im bald folgenden zweiten Teil geht es dann um die Software, also die Programmierung des STM32.