Letzter Schritt vor Atmel-Austausch?

Nachdem nun bereits PWM sicher auf dem Atmel-Nachfolger STM32F4 funktioniert, wurde als nächstes der AD-Wandler implementiert. Hier galt es den Spannungsteiler anzupassen, damit das STM-Board nicht mehr als 3,3 Volt an den Eingangs-Pins erhält – und natürlich überhaupt den Code für den AD-Wandler für den ARM-Prozessor zu implentieren. Eine Besonderheit dabei ist DMA (Direct Memory Access).

Der STM32F4-Prozessort unterstützt mehrere DMA-Streams mit jeweils mehren Kanälen. Das bedeutet, man gibt in seinem Sourcecode unter anderem eine Speicheradresse innerhalb der CPU an, die sozusagen direkt mit dem Inhalt einer Variable verbunden wird. Das heißt, man aktiviert zum Programmstart einmalig die AD-Wandlung die danach kontienuierlich im Hintergrund läuft, ohne Interrupt, while-loops oder ähnliches. Der aktuelle Wert der Analog-Digital-Wandlung liegt jederzeit abrufbereit in der gewünschten Variable. Und durch DMA auch noch ohne die CPU zu belasten! Man kann sich an dieser Stelle durchaus fragen, warum Leute noch Atmel-Prozessoren verwerden…

Ach so, die Wandlung wird auf dem Roboter benötigt, um die Akku-Spannungen zu überwachen. Das heißt, die 24 Volt und die 12 Volt gehen „in den Spannungsteiler hinein“ und landen dann zum Messen am Pin des STM42F4-AD-Wandlers.

Hier wie immer die Fotos der Tests. Als erstes das übliche Steckbrett mit einer der zu überwachenden Spannungen (hier 24 Volt):

Hier das „Ergebnis“ wie es „in den Port“ des AD-Wandlers rein geht (wie gesagt, nicht mehr als 3,3 Volt!):

 
In diesem Bild sieht man, dass es 2,85 Volt für den AD-Wandler ergibt. Hintergrund ist, dass zwei 12 Volt-Blei-Gel-Akkus eine Spannung >24 Volt aufweisen. Darum wurde der Spannungsteiler so gewählt, dass maximal 25 Volt am Eingang anliegen, welches im Programm dann dem Dezimalwert 4095 entspricht.

Als letztes noch die verwendete Schaltung (leider etwas unscharf) mit Z-Diode zum Schutz des Ports:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert