Seite 1 von 1

Teensy 3.6 Prozessor-Upgrade

Verfasst: 03 Feb 2019, 02:03
von eax
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:
    • IC3
  • Batterie-Überwachung:
    • D1
    • R26, R27, R28
  • SWD-Debugger Anschluss:
    • J13, J31, J32
  • I2C-Level-Shifter auf 5V:
    • J2
    • U2, U3
    • R1, R2, R3, R4
  • Maus-Sensor Level-Shifter auf 5V:
    • U1
    • R24, R25
  • 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

Re: Teensy 3.6 Prozessor-Upgrade

Verfasst: 11 Apr 2019, 00:00
von eax
Edit: Hinweis zur 5V-Versorgung des Teensy-Boards ergänzt.

Re: Teensy 3.6 Prozessor-Upgrade

Verfasst: 19 Apr 2019, 19:02
von eax
Edit: Errata ergänzt und Eintrag für SPI erstellt.

Re: Teensy 3.6 Prozessor-Upgrade

Verfasst: 30 Jun 2019, 17:40
von eax
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.

Re: Teensy 3.6 Prozessor-Upgrade

Verfasst: 02 Sep 2019, 21:24
von eax
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