Montag, 20. August 2012

CTHNCopter - FlightControl (alpha2)

Heute möchte ich kurz die erste Alpha-Version der Software präsentieren, welche den CTHNCopter konfigurieren, steuern und später auch Firmware-Updates durchführen kann. Die Software ist entstanden, da die Firmware bei einem Stand angelangt ist, bei dem die implementierten Features komfortabel getestet werden müssen. Die bisher entstandenen Perl- und Shellscripte waren für diesen Arbeitsschritt schlicht nicht komfortabel genug. Das folgende Video zeigt die Anwendung in Aktion.
Im Verlauf des Videos sind folgende Aktionen zu sehen:
  • Verbindungsaufbau per Bluetooth
  • Parametrisierung sowie Kalibrierung des Hexacopters
  • Anzeige von Bewegungen sowie deren zeitlicher verlauf
  • Anzeige der Ergebnisse des PID-Reglers
  • Konfiguration und Visualisierung der Eingabewerte eines 4-Achsen JoyPads
  • Visualisierung der PWM-Signale für die Motoren

Die Software wurde in CPP mit QTCreator (unter Versendung des Qt SDK sowie der SDL Library) unter Windows implementiert. Zudem ist diese auch komplett unter Linux lauffähig.

Das CTHNCpter - Projekt ist auf GitHub verfügbar.

Freitag, 10. August 2012

CTHNCopter - Hardware des ersten Prototyp vollständig...

Auch heute möchte ich die neuesten Entwicklungen am Hexacopter nicht unnötig zurück halten. Die restliche Hardware wurde nun vollständig aufgebaut und die ersten Testläufe, mit den Motoren am HexaCopter befestigt, wurden durchgeführt. Flugfähig ist er momentan noch nicht.
Da er mir jedoch beim ersten einschalten der Motoren bereits (ca. 2 Meter) quer über den Schreibtisch geflogen ist, bin ich zuversichtlich das er sich in naher Zukunft sauber in die Luft erheben wird.

Die Ausleger der Motoren bestehen aus CFK-Rohren mit 5mm Durchmesser. Die Verwindung zwischen Motorhalter, dem CFK-Rohr und der Platine wurde geklebt. Da die CFK-Rohre jedoch leitend sind musste hier entsprechend darauf geachtet werden, dass keine Verbindung zwischen den beiden Anschlüssen der Mototen entsteht.

Das Video zeigt lediglich die Motoren in Aktion, bei einer Versorgungsspannung von 5V (1A maximal).


Montag, 6. August 2012

CTHNCopter - Grundlegende Firmware-Funktionen

Wie zu erwarten, gibt es auch schon Neuigkeiten zum CTHNCopter.
Die Hardware wurde nun vollständig getestet und die kleineren Fehler im Layout korrigiert. Die beiden Kupferlack-Leitungen sind rechts auf dem Bild zu sehen.
Als Bluetooth-Antenne wird nun ein etwa 30mm langes stück Litze verwendet. Zu meiner eigenen Überraschung funktioniert dieses Provisorium recht gut. Die Reichweite liegt bei etwa 10 Metern, durch etwa 2 Altbau-Wände. Das Bluetooth-Modul (BTM-222) wird vom Mikrocontroller, beim start der Firmware, konfiguriert. In der Geräteliste wird dies nun als "CTHNCopter 0v1" angezeigt. Auch die Daten des Beschleunigungssensores werden bereits korrekt per ADC ermittelt und momentan, zu Testzwecken, per Bluetooth übertragen.

Wie im Bild links zu sehen ist, sind am BTM-222 zwei LEDs temporär angebracht. Diese dienen dazu den Verbindungs-Status der Bluetooth-Verbindung, sowie den Datentransfer anzuzeigen. Später werden diese wieder entfernt.
Das Grundgerüst zur Auswertung der empfangenen Daten wurde bereits implementiert, so dass es auch hier entsprechend weiter gehen kann.



Ein weiteres neues Feature ist, dass der Mega88 per Bluetooth über die UART-Schnittstelle programmiert werden kann. Hierzu wird dieser Bootloader verwendet. Leider ist das flashen, des AVR, momentan nur unter Windows möglich. Natürlich ist das kein anzunehmender Zustand und muss sich in der nächsten Zeit ändern.

Auch die sechs Software-PWM-Kanäle für die Motoren wurden bereits angesteuert. Da der AVR jedoch momentan per internem 8 MHz-Takt läuft, liegt die Grundfrequenz der PWM-Signale nur bei etwa 488 Hz. Die Ansteuerung der Motoren funktioniert jedoch problemlos.

Da der CTHNCopter per App gesteuert werden soll, hat Aaron bereits damit begonnen die App (Android) dazu zu implementieren. 

Und was man davon aktuell sehen kann ist in dem Video zu sehen. Es ist leider etwas unscharf aber man da Blinken eindeutig...

Die nächsten Schritte sind also:
  • Festlegen der Bluetooth-Kommunikation
  • Erfassung von Steuerkommandos per Bluetooth
  • Auslegung und Implementierung des PID-Reglers
  • Parametrisierung des PID-Reglers
  • Vervollständigung der Hardware (Motoren an Auslegern befestigen, etc.) 
  • Implementieren der Android-App

Neuigkeiten gibt wieder es hier, sobald die nächsten Schritte erledigt wurden...

Dienstag, 31. Juli 2012

CTHNCopter - Erste Platinen

Heute sind die ersten Platinen eingetroffen und die erste wurde aufgebaut. Bis auf ein paar Kleinigkeiten, die noch korrigiert werden müssen, funktioniert die Schaltung wie erwartet. Da bis jetzt leider noch nicht alle Bauteile ausgeliefert wurden, fehlt hier und dort noch das eine oder andere. Auch mit der Firmware ging es voran, die ersten Routinen zur Initialisierung der Hardware und grundlegenden Schritte wurden implementiert.

Freitag, 20. Juli 2012

CTHNCopter - Hexacopter

Im Rahmen des Chaostreff Heilbronn haben wir uns wieder mal ein herausragendes Projekt ausgedacht. Seit einigen Wochen brodelt es bereits vor sich hin. Es geht dabei um einen Hexacopter, also ein Quadrocopter mit sechs Motoren. Jedoch nicht im üblichen Format, wie man sie aus den Medien kennt. Es handelt sich dabei um eine etwas kleinere Variante. Die Elektronik alleine besitzt nur eine Grundfläche von 4x4 Zentimetern. Alle Bauteile sind SMD und es werden Bürstenmotoren mit etwa 5mm Durchmesser und 1,5cm Länge zum Einsatz kommen. Hier die wichtigsten Daten für den Anfang:


  • 6 Motoren (Bürstenbehaftet)
  • 3,7V/110mAh Akku (eine Zelle)
  • Kommunikation per Bluetooth (BTM-222)
  • Steuerung per Smartphone-App
  • Flugzeit ~5 min
  • Kosten ~120 €

Das Projekt befindet sich noch in der Phase der Entwicklung, es existiert noch kein flugfähiger Prototyp. Auf GitHub kann jedoch der Projekt-Verlauf verfolgt werden und sobald es nennenswerte Fortschritte gibt, werden diese hier oder auf CTHN.de bekanntgegeben.


Mittwoch, 12. Oktober 2011

Altera Quartus 11.0 Tools, Ubuntu 11.4, USB-Blaster

Wer mit Ubuntu 11.4 (x86) und der Software Quartus II Version 11.0 Build 157 04/27/2011 SJ Web Edition von Altera arbeitet, um z.B. sein DE0-Nano Board mit "Leben" zu befüllen wird schnell feststellen, dass diese Kombination leider ohne manuellen Eingriff, direkt nach der Installation der Altera Software, nicht funktioniert. Quartus II stürzt direkt nach dem Start mit einem Segfault (zumindest bei mir) ab. Und weder mit dem grafischen Programmer noch mit den Tools auf der Kommandozeile kann auf das DE0-Nano, welches sich am System als USB-Blaster ausgibt, zugegriffen werden. Da ich persönlich lieber auf der Konsole und mit Quartus II (aus vielerlei gründen) nur ungern arbeite, gehe ich hier nur auf die Konfiguration der Kommandozeilen Tools ein, um diese zur korrekten Arbeit zu bringen. Meine Altera Software habe ich mittels dem Altera-Installer unter ~/bin/altera/11.0 installiert.

1. Die ~/.bashrc anpassen

Als erstes muss selbstverständlich der Pfad zu den Binaries der PATH-Variable hinzugefügt werden. Weiterhin benötigen diverse Quartus Tools die Umgebungsvariable QUARTUS_ROOTDIR um korrekt arbeiten zu können, daher habe ich auch diese in meine .bashrc eingefügt.

export PATH=$PATH":~/bin/altera/11.0/quartus/bin:~/bin/altera/11.0/nios2eds/bin:~/bin/altera/11.0/quartus/sopc_builder/bin"

export QUARTUS_ROOTDIR="~/bin/altera/11.0/quartus ~/bin/altera/11.0/nios2eds/sdk_shell"

2. UDEV Zugriffsrecht auf den USB-Blaster einrichten

Ich habe die Datei "/etc/udev/rules.d/40-altera-usbblaster.rules" mit dem folgenden Inhalt angelegt:

BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6001", MODE="0666", SYMLINK+="usbblaster", GROUP="plugdev"

Startet man danach das System neu oder führt einen Reload von UDEV durch, kann auf den USB-Blaster zugegriffen werden. Die Voraussetzung dafür ist natürlich, dass dieser in der Liste der USB-Geräte auch angezeigt wird.

user@host:~$ lsusb -d 09fb:6001
Bus 002 Device 013: ID 09fb:6001 Altera

UDEV kann mit den entsprechenden Rechten mittels service udev reload dazu angewiesen werden die Konfiguration neu zu laden.

3. JTAG Daemon


Dieser Daemon muss laufen, um korrekt auf die JTAG-Chain per USB-Blaster zugreifen zu können. Gestartet wird dieser mit jtagd. Natürlich kann man diesen Daemon auch permanent laufen lassen.

4. Testen der JTAG-Verbindung

Beim Aufruf von jtagconfig wird als Standard die Option --enum ausgeführt. Es werden alle diejenigen Devices angezeigt, die an der JTAG-Chain hinter dem USB-Blaster hängen.

user@host:~$ jtagconfig
1) USB-Blaster [2-1.2.2]
  020F30DD

5. Quartus Programmer testen

Der Quartus Programmer muss selbstverständlich auch auf den USB-Blaster zugreifen können. Das kann mit dem folgenden Aufruf getestet werden.

user@host:~$ quartus_pgm --list

Info: *******************************************************************
Info: Running Quartus II Programmer
    Info: Version 11.0 Build 157 04/27/2011 SJ Web Edition
    Info: Copyright (C) 1991-2011 Altera Corporation. All rights reserved.
    Info: Your use of Altera Corporation's design tools, logic functions
    Info: and other software and tools, and its AMPP partner logic
    Info: functions, and any output files from any of the foregoing
    Info: (including device programming or simulation files), and any
    Info: associated documentation or information are expressly subject
    Info: to the terms and conditions of the Altera Program License
    Info: Subscription Agreement, Altera MegaCore Function License
    Info: Agreement, or other applicable license agreement, including,
    Info: without limitation, that your use is for the sole purpose of
    Info: programming logic devices manufactured by Altera and sold by
    Info: Altera or its authorized distributors.  Please refer to the
    Info: applicable agreement for further details.
    Info: Processing started: Sat Oct  8 18:10:02 2011
Info: Command: quartus_pgm --list
1) USB-Blaster [2-1.2.2]
Info: Quartus II Programmer was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 82 megabytes
    Info: Processing ended: Sat Oct  8 18:10:02 2011
    Info: Elapsed time: 00:00:00
    Info: Total CPU time (on all processors): 00:00:00

Die Tools quartus_pgm und quartus_pgmw (die grafische Version) sollten nun den USB-Blaster korrekt erkennen und ansteuern können.

Da aber nun das übertragen der synthetisierten Logik nicht genug ist und ich den Build-Vorgang mit einem kurzen Makefile automatisiert habe, möchte ich dass natürlich nicht vorenthalten. Voraussetzung für den korrekten Betrieb sind die oben genannten Einstellungen, dass man sich beim Start im Verzeichnis des Quartus-Projektes befindet und das die Haupt-Datei des Projektes identisch mit dem Projektnamen ist (alles natürlich Case-Sensitive).

#
# Makefile to build FPGA/CPLD synthesis with altera tools.
#
# Licensed under GPL v3.0 (15.10.2011)
# by Kai Lauterbach (klaute at gmail dot com)
#

TARGET=test

MAPPER=quartus_map
MAP_OPTIONS=--read_settings_files=on --write_settings_files=off $(TARGET) -c $(TARGET)

FITTER=quartus_fit
FIT_OPTIONS=--read_settings_files=off --write_settings_files=off $(TARGET) -c $(TARGET)

ASSEMBLER=quartus_asm
ASM_OPTIONS=--read_settings_files=off --write_settings_files=off $(TARGET) -c $(TARGET)

STA=quartus_sta
STA_OPTIONS=$(TARGET) -c $(TARGET)

PROGRAMMER=quartus_pgm
PGM_OPTIONS=-m jtag -c USB-Blaster -o "p;$(TARGET).sof"

compile: clean map fit asm sta

map:
    $(MAPPER) $(MAP_OPTIONS)

fit:
    $(FITTER) $(FIT_OPTIONS)

asm:
    $(ASSEMBLER) $(ASM_OPTIONS)

sta:
    $(STA) $(STA_OPTIONS)

program:
    $(PROGRAMMER) $(PGM_OPTIONS)

clean:
    rm -rf db/ dse/ incremental_db/ sim.do $(TARGET)ig.archive.rpt $(TARGET).asm.rpt $(TARGET).bsf $(TARGET).cdf $(TARGET).done $(TARGET).dse.rpt $(TARGET).fit.rpt $(TARGET).fit.summary $(TARGET).flow.rpt $(TARGET).inc $(TARGET).map.rpt $(TARGET).map.smsg $(TARGET).map.summary $(TARGET).mif_update.rpt $(TARGET).pin $(TARGET).sof $(TARGET).sta.rpt $(TARGET).sta.summary $(TARGET).tis_db_list.ddb $(TARGET)_assignment_defaults.qdf wave.do $(TARGET).archive.rpt



PowerMgr in der Praxis: PV, Batterie, Kühlung und Hauszustand steuern

PowerMgr in der Praxis: PV, Batterie, Kühlung und Hauszustand steuern PowerMgr geht über eine Sammlung von Gerätetreibern hinaus. Der inte...