Erweiterungen & Modifikationen am c't-Bot inkl. Schaltplanänderungen
-
eax
- Friends of Robby

- Beiträge: 755
- Registriert: 18 Jan 2006, 16:16
- Wohnort: Karlsruhe
Beitrag
von eax » 03 Feb 2019, 02:03
Nachdem das Thema
hier schon kurz aufkam, möchte ich euch einen kleinen Überblick geben, wie man einen originalen ct-Bot mit einem
Teensy 3.6 Prozessor (anstatt des ATmega) aufrüsten kann. Dazu ist ein kleines Adapter-Board entstanden, dessen Schaltplan
hier zu finden ist.
Hinweise
- Das Adapterboard ist zum Testen und Basteln für eine mögliche Version 2 des ct-Bots entstanden (siehe auch hier), daher enthält es einige rein optionale Features.
- Zusätzlich zum Prozessor-Upgrade ersetzt es auch den Motortreiber L293D (IC2) des originalen ct-Bots durch einen DRV8835 Motortreiber, der eine deutlich bessere Motorregelung und somit ein deutlich feingranulareres Fahrverhalten ermöglicht.
- Auf der Hauptplatine des ct-Bots werden IC1 (ATmega) und IC2 (L293D) aus den Sockeln entfernt.
- Die im Schaltplan des Adapterboards vermerkten IC2 und IC5 stellen nur das Pinout von ATmega und L293D dar, hier werden auf der Unterseite des Adapterboards nur Buchsenleisten eingelötet, die dann auf Stiftverbinder kommen, die in die IC-Sockeln auf der Hauptplatine gesteckt werden (siehe Fotos).
- Mögliche Bezugsquellen in Deutschland: Teensy 3.6, DRV8835
- Auf der Hauptplatine des Bots darf es keine Pullup-Widerstände gegen 5V geben für Signale, die an das Teensy 3.6 gehen. Beim Erweiterungsmodul ist das für das Servo-PWM-Signal der Fall, auf der Hauptplatine eigentlich nicht, außer man hat selbst etwas ergänzt.
- Wenn man das Adapter-Board mit 5V vom Bot versorgt (so ist es gedacht), wird das Teensy-Board über VIN mit versorgt. Verwendet man den USB-Anschluss des Teensy-Boards, solange es auf dem Adapter-Board eingesteckt ist (alles andere wäre umständlich), muss die Verbindung von VUSB und VIN auf dem Teensy-Board unterbrochen werden. Dafür ist auf der Rückseite extra eine Leiterbahn vorgesehen, die zwischen den beiden Pads aufgetrennt werden kann.
- Es kann auch ein Teensy 3.5 verwendet werden.
- Alle Design-Dateien zum Adapterboard sind hier zu finden.
Hardware
Optionale Komponenten des Adapterboards:
- Audio-Verstärker auf Basis eines TPA3106D1:
- U4
- J14, J15, J16, J17
- R29, R30
- C3, C4, C5, C6, C7, C8, C9, C10, C11
- Teensy-Reset-Schaltung:
- Batterie-Überwachung:
- SWD-Debugger Anschluss:
- I2C-Level-Shifter auf 5V:
- Maus-Sensor Level-Shifter auf 5V:
- Erweiterungs-Pins:
- J7 (UART 5 - 3.3V)
- J8 (SPI 0 - 3.3V)
- J3 (SPI 1 - 3.3V, Reset, Batteriespannung)
- J2 (I2C 0 - 5V)
- J5 (I2C 3 - 3.3V)
- J6, J12 (PWM)
- J4 (Analog I/O)
- J9 (BPS Sensoranschluss)
Aus Test- und Experimentiergründen sind einige Verbindungen nicht direkt ausgeführt, sondern über Jumper zu konfigurieren:
- J1: per Jumper Pin 1 und Pin 2 verbinden, falls originale Beschaltung des Radencoder links (RADL liegt auf Pin 5 / PB4 des ATmega). Ansonsten Pin 2 und Pin 3 verbinden (RADL liegt auf Pin 27 / PC5 des ATmega).
- J10: per Jumper Pin 1 und Pin 2 verbinden
- J11: per Jumper Pin 1 und Pin 2 verbinden
Software
Im Repository
ctbot-teensy auf GitHub gibt es eine (derzeit noch sehr rudimentäre) Software, um den ct-Bot mit einem Teensy-Board steuern zu können. Details hierzu folgen noch, für einen ersten Start hilft (hoffentlich) die
Readme-Datei.
Errata
SPI:
- Die Signalnamen und Beschriftungen für SPI beziehen sich alle auf eine Verwendung der SPI-Schnittstelle als Master. Möchte man eine der SPI-Schittstellen als Slave betreiben (z.B. zur Kommunikation mit einem Raspberry Pi), ist zu beachten, dass MOSI und MISO vertauscht sind.
- Als CS-Signal können nicht die mit "CS" bezeichneten Pins genutzt werden, sondern nur die, die im K66 Sub-Family Reference Manual als SPIn_PCS0 angegeben sind. Getestet habe ich bisher nur Pin 2 als CS/SS.
- Die Bezeichnungen sind (für SPI als Slave) leider auch auf https://www.pjrc.com/teensy/pinout.html falsch (daher hatte ich sie...) bzw. sie sind nur für SPI im Master-Mode korrekt. NXP nennt die Signal SPIn_SOUT (für serial out) und SPIn_SIN (serial in).
Bilder
-
Dateianhänge
-

- aufgebautes Adapterboard mit Teensy 3.6
-

- Rückseite des Adapterboards mit Verbindungsstiftleisten
-

- Adapterboard auf ct-Bot
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben
-
eax
- Friends of Robby

- Beiträge: 755
- Registriert: 18 Jan 2006, 16:16
- Wohnort: Karlsruhe
Beitrag
von eax » 11 Apr 2019, 00:00
Edit: Hinweis zur 5V-Versorgung des Teensy-Boards ergänzt.
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben
-
eax
- Friends of Robby

- Beiträge: 755
- Registriert: 18 Jan 2006, 16:16
- Wohnort: Karlsruhe
Beitrag
von eax » 19 Apr 2019, 19:02
Edit: Errata ergänzt und Eintrag für SPI erstellt.
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben
-
eax
- Friends of Robby

- Beiträge: 755
- Registriert: 18 Jan 2006, 16:16
- Wohnort: Karlsruhe
Beitrag
von eax » 30 Jun 2019, 17:40
Ein kleines Update zur Software für das Teensy-Upgrade: Im
master-Branch befindet sich inzwischen eine Version, die auf einem RTOS (FreeRTOS) aufsetzt. Der Hauptgrund hierfür ist, dass dies die Integration von weitergehenden Features wie z.B. Audioausgabe und Sprachsynthese deutlich vereinfacht hat. Ebenso die Integration der Bot-Verhalten, die allerdings noch sehr am Anfang steht (Branch behavior_test). Außerdem ermöglicht es eine simulative Ausführung auf einem PC in Verbindung mit ct-Sim.
Der alte, einfachere Code, der ohne OS auskommt (und dem daher die genannten Features fehlen), ist weiterhin verfügbar im Branch
bare_metal.
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben
-
eax
- Friends of Robby

- Beiträge: 755
- Registriert: 18 Jan 2006, 16:16
- Wohnort: Karlsruhe
Beitrag
von eax » 02 Sep 2019, 21:24
Kurzer Hinweis auf zwei neue Features im Teensy-Code, die vielleicht interessant sind insbesondere zum Testen neuer I2C-Devices:
- Über die Kommandozeile kann man jetzt direkt mit I2C-Geräten "sprechen", also Register lesen und schreiben, ohne dass man dafür extra Teiber programmieren muss. Das ist sehr nützlich zum schnellen in Betrieb nehmen und testen von (einfachen) Komponenten, die per I2C angeschlossen sind.
Die Befehle hierzu sind wie folgt (Auszug aus der Help-Message):
Code: Alles auswählen
command subcommand [param] explanation
----------------------------------------------------------------------------------
i2c (i)
select [0;3] FREQ select I2C bus to use (0, 1, 2 or 3) and set frequency to FREQ kHz
addr ADDRESS set I2C-address of device to use
read8 REG read 1 byte from register at address REG
read16 REG read 2 bytes from register at address REG
read32 REG read 4 bytes from register at address REG
write8 REG DATA write 1 byte (DATA) in register at address REG
write16 REG DATA write 2 bytes (DATA) in register at address REG
write32 REG DATA write 4 bytes (DATA) in register at address REG
- Man kann sämtliche Konsolen-Befehle auch als Script auf der SD-Karte abgelegen und dieses dann per Konsole starten. Das ist vor allem für die Initialisierung von I2C-Devices hilfreich (s.o.), wo man sonst einige Befehle immer wieder eingeben müsste.
Die Befehle hierzu sind wie folgt (Auszug aus der Help-Message):
Code: Alles auswählen
command subcommand [param] explanation
----------------------------------------------------------------------------------
prog (p)
run FILENAME run script FILENAME from SD card
view FILENAME print script FILENAME to terminal
create NUM FILENAME create script FILENAME from last NUM commands in history
Kleines Beispiel, um einen PCA9634 anzusteuern:
Code: Alles auswählen
# init
i2c select 0 1000
i2c addr 0x15
i2c write8 0 0
i2c write8 1 5
i2c write8 0xc 0xaa
i2c write8 0xd 0xaa
i2c write8 5 0
# set LED 3 on
i2c write8 5 0x7f
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben