Hallo Radbruch,
die Idee finde ich nicht schlecht, bin mal gespannt wenn du fertig bist.
Grüße Robotniks
Hallo
Der ProBot (zum selbst Zusammenlöten) wird ohne Kontroller geliefert. Da liegt es doch nahe selbst einen Kontroller draufzubasteln. Wegen der Ähnlichkeit beider Roboter würde sich dazu der ATMega8 des asuros geradezu aufdrängen. Ein vergleichender Blick in die Schaltpläne der beiden zeigt ähnliche bis teilweise identische Bestückungen:
Netzteil: Nahezu identisch. ProBot mit Ladefunktion und stromfressender Status-LED. Aref und Spannungsteiler für Batteriemessung identisch:)
IR: Empfänger hat beim ProBot günstigeren Wert (R11), Senden mit drei LEDs in Reihe (D6-8) scheint mir mit 150 Ohm in Reihe etwas schwach. Beides sollte aber mit dem Mega8 auch funktionieren.
Odo: ProBot hat kleineren Vorwiderstand vor den LEDs (R5), Empfänger identisch.
Line: Identisch bis auf R1/3 (20k-22k;)
Motor: ProBot benötigt drei Pins, asuro sechs. Das sollte funktionieren.
Taster: Der Reset-Taster geht wohl direkt auf den Reset-Pin, Boot-Taster an Tastenpin des asuro. Passt.
LEDs: Zwei LEDs ersetzen die StatusLED.
I2C: Der Mega8 kann auch das EEPROM des ProBot verwenden.
Sound: Irgendwann gehen dem Mega8 die Pins aus. Durch die gesparten Motorpins könnte man noch den Lautsprecher bedienen und das Mic könnte am ADC4 des Mega8 angeschlossen werden (Boot-Taster dann auf gespartem Motorpin).
ACS: Wenn das oben alles funktioniert ist noch ein Pin fürs ACS übrig :)
Für die Verdrahtung des Adapters sehe ich eigentlich zwei Ansätze:
Nach ProBot-Belegung: Soweit möglich werden die Pinbelegungen des Mega128 übernommen. Basis für die Software wird die ProBot-Library sein. Diese wird nach GCC übersetzt und an den Mega8 angepasst.
Nach ProBot-Belegung (mit angepasster asuro-Lib): Die Funktionen werden, soweit möglich, wie beim ProBot angeschlossen. Die asuo-Library wird an die geändete Pinbelegung angepasst.
Nach asuro-Belegung: Die ProBot-Hardware imitiert den orginalen asuro-Aufbau, Änderungen in der asuro-Lib für Motor, Tasten und alles was der orginale asuro-Aufbau nicht kann. Die Variante werde ich in Angriff nehmen.
Die Kosten für das Projekt halten sich in Grenzen. Neben dem ProBot (Bausatz) benötigt man einen Adapter der nur ein paar zusätzliche Bauteile benötigt: Den 8MHz-Quarzschwinger, ein paar Kondensatoren, der Reset-Pullup, Sockel für Mega8, Stiftleisten zum Aufstecken auf den Probot und ein (geätztes?) Platinenstück. Zusätzlich benötigt man noch den asuro-Mega8 und einen IR-USB-Transceiver. asuro-Besitzer (wie ich) benötigen dagegen nur den Probot-Bausatz:)
Wenn alles so funktioniert erhält man einen gut erweiterbaren asuro oder einen ProBot ohne Conrad-Software. Der nächste Schritt wäre dann noch der Einsatz eines ATMegas (8 oder 32) ohne Bootlader. Mal gespannt was draus wird.
Gruß
mic
[Edit]
Titel geändert
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo Radbruch,
die Idee finde ich nicht schlecht, bin mal gespannt wenn du fertig bist.
Grüße Robotniks
Ja mic, das hört sich wirklich gut an.
Wenn Du schon von Erweiterungen sprichst - und von Kompatibilitäten - dann wäre es zu überlegen, ob man statt des mega8 einen mega328p nimmt. Die Pinbelegung ist "gleich", beim 328 mit erweiterten Funktionen - allerdings anderen Steuerregistern.
Mir war der m8 von Anfang an etwas sparsam mit Speicherplatz ausgerüstet, daher hatte ich frühzeitig den 168 (experimentell auch am asuro) genommen. Jetzt bin ich auf den 328p umgestiegen: viermal soviel Speicher wie der m8. Das ist für so gnaden- bzw. ahnungslose C-Programmiere wie mich genug Reserve. Der Funktionsbereich ist breiter als beim 8L - nämlich bis 1,8V statt der 2,7V beim 8L. Andere Unterschiede sind gering. Die etwa 0,3V höhere Ansprechschwelle ("... VIH, I/O Pin read as ‘1’ ...") könnte eher von Vorteil sein. Zeitweise war ja eine 168er Bibliothek für den asuro im Gespräch - die würde 1:1 auch beim 328er passen.
Insgesamt glaube ich, dass bei der angesprochenen Anwendung die Vorteile die Nachteile z.B. durch die anderen Steuerregister aufwiegen können.
Ciao sagt der JoeamBerg
Hallo
Gerade eben bestellt. Blöderweise konnte ich meinen 20€-Gutschein ('Burtstag) nicht einlösen weil die Online-Kasse meine Nummer nicht fressen wollte. Während ich auf's Päckchen warte könnte ich schon mal (ohne langes googlen) ein paar Infos einholen:
Sind die 16-poligen Stecker X1 bis X4 wirklich so asymetrisch aufgebaut wie es im Schaltplan (Doku S. 36) dargestellt ist?
Conrad bietet keinen dreibeinigen Quarz-Oszillator an. Funktioniert mein Ersatztyp? Wie müßte ich den anschließen?
Wie erkennt der Motortreiber (IC2, CD4093) die Drehrichtung?
Könnte man die orginale ProBot-Programmierschnittstelle irgendwie nutzen? Verwendet die auch einen Bootlader?
Im Moment orientiere ich mich am orginalen asuro-Mega8. Es könnte im Sockel natürlich auch ein anderer Mega thronen. Speichergrenzen hatte ich bisher noch nicht erreicht. Vielleicht liegt die Begrenzung aber auch eher bei mir. Nettes Sommerlochthema :)
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo Radbruch,
ja die sind asymmetrisch aufgebaut.
Den Oszillator versorgst du mit Vcc und GND, am
Singalout-Pin kommt das Signal raus das du am
Controller am XTAL1 anschließt. Du könntest aber auch
den internen Oszillator benutzen?!
Der Motortreiber ist so aufgebaut das bei einen Puls- Pausenverhältnis
von 50% oder eben 1:1 der Motor steht (Bremsen). Bei einer 8Bit
PWM-Auflösung wäre Stopp der Wert 128, vorwärts größer 128 und ein Wert kleiner 128 rückwärts.
http://www.datasheetcatalog.org/data...ments/l293.pdf
Siehe Seite 8.
Die Original Schnittstelle geht an den TxD und RxD des ATmega128. Die Programmierung des Asuro-Controllers könnte funktionieren.
Grüße Robotniks
Hallo
Danke für die schnelle Antwort.
Leider nicht weil der asuro-M8 auf externen Oszillator eingestellt ist.Du könntest aber auch den internen Oszillator benutzen?
Das scheint mir etwas ungenau. Wenn genau so oft vorwärts wie rückwärts gefahren wird steht zwar der Antrieb, der Strom ist aber sehr hoch. War das PWM-Timing nicht auch hier das Problem?das bei...Puls- Pausenverhältnis
von 50% oder eben 1:1 der Motor steht (Bremsen)
https://www.roboternetz.de/phpBB2/ze...ag.php?t=49197
[Edit]Aha. Und was macht man bei 49%? Beim asuro werden den Motoren immer nur die Leistung zugeführt die sie benötigen. Beim ProBot ist es halbe Leistung linksdrehend minus halbe Leistung rechtsdrehend. Noch weiß ich nicht wie das funktionieren soll.Bedenke auch das bei einen PWM Tastverhältnis von 1:1 also 50% der Stromverbrauch am größten ist! Also in der Software bis auf 50% fahren (Bremsen) und bei Stillstand des Roboters die Enable Leitung des L239D auf Low (Treiber "Aus").
[/Edit]
Möglicherweise könnte man mit Kabel programmieren. Ich teste aber erst die IR-Schnittstelle ala asuro.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo
Inzwischen habe ich mir die Datenblätter der Motordriver-ICs und den Schaltplan genauer angeschaut. Schauderhaft! Im Plan fehlen wichtige Verbindungen (IC2:3-IC1:2) und das Konzept scheint mir falsch. Um niedrige Drehzahlen zu erhalten werden beide Richtungen gleichzeitig angesteuert. So stelle ich mir die Funktion einer PWM-Steuerung mit H-Brücken nicht vor. Deshalb "verbrät" der asuro auch sechs Pins nur um die Motoren anzusteuern. Vielleicht kann man aus dem IC2 noch eine Drehrichtung/PWM-Ansteuerung für beide Motoren rauskitzeln. Nötigenfalls mit zusätzlichen Leitungen zur Ansteuerung.
Kann das PWM-Signal beim L293D auch über Enable eingespeist werden? Dann könnte man die PWM-Leitungen direkt auf IC1:1/9 legen. Dazu müßte man nur die Enableleitungen vom IC1 trennen und mit den PWM-Ausgängen des Kontrollers verbinden. Die PWM-Eingänge am NAND wären dann Drehrichtungsauswahl. Damit könnte man den Motor dann zwar nicht kurzschliesen, aber PWM 0% wäre dann auch null Strom. Das würde auch gut zu MotorSpeed() und MotorDir() der asuro-Lib passen.
Gruß
mic
[Edit]
Der Schaltplan wurde inzwischen wohl richtiggestellt:
https://www.roboternetz.de/phpBB2/ze...=486143#486143
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hmm, ich verbrate auch sechs Pin für zwei Motoren. Mein Datenblatt von SGS THOMSON vom Juni 1996 nennt auch (Beispiel für eine Seite): 1 enable, 2 input1 und 9 input2. Enable ist der PWM-Eingang, input1 bzw. ~2 schaltet vorwärts oder rückwärts - wobei die jeweils gegensinnig bedient werden ==> ausgenommen man will bremsen, dann werden beide Eingänge high versorgt oder man stoppt, dann sind beide auf low. Das läuft bei mir und läuft und läuft . . .Zitat von radbruch
Ciao sagt der JoeamBerg
Hallo
Danke für die Infos.
Wunderbar. Dann verwende ich die orginalen PWM-Leitungen zum NAND zur Drehrichtungsauswahl an PB4/5 des Mega8, unterbreche die orginalen Enableleitungen am IC1 und verbinde diese (irgendwie) direkt mit OC1A/B des Mega8. Dadurch werden PD4 und PD5 frei.Enable ist der PWM-Eingang
Eben, bei sechs Leitungen kann man jede Halbbrücke einzeln ansteuern und die Motoren bei Bedarf kurzschliessen. Mit vier Leitungen und dem NAND kann ich dann immerhin unbestromt stehenbleiben. Die Schutzdioden dürften zusätzlich bremsend wirken, wenn die Ausgänge auf Z geschaltet sind.ausgenommen man will bremsen
Die Tasterlösung gefällt mir noch nicht wirklich. Ich bin noch unentschieden ob ich den Tasten-ADC des asuros wirklich für das Mikrofon opfern soll oder ob ich hier besser die sechs Tasten des asuro nachbilde. Möglicherweise kann man das Signal aus dem Verstärker-IC3(LM386) auch mit einem digitalen Eingang auswerten. (1-Bit-Sampling oder einstellbarer Schwellwert mit Poti als Ersatz für Ausgangsteiler R19/20).
Die StatusLed des ProBot (D5) ist LowCurrent, damit ist meine Anmerkung oben hinfällig. Die Vorwiderstände für die IR-LEDs (R12,D6-8 bzw. R13, D9-11) erscheinen mir ungünstig. Die verwendeten LEDs (TSUS520) haben eine typische Vorwärtsspannung von 1,3V (max. 1,7). Das ergibt (5V-3*1,3V)/150Ohm=0,007A pro Strang bei möglichen 150mA (Peek 300). Da scheint noch mehr Potentional vorhanden zu sein. Wellenlänge ist übrigends 950 nm.
In der Doku werden folgende Motorfunktionen beschrieben:
Wird das MotorDir() reingerechnet? Gibt es öffentlichen Quellcode der ProBot-Lib?Code:DRIVE_INIT() Initialisiert den Antrieb. Bevor der Antrieb benutzt wird, muss diese Routine aufgerufen werden. DRIVE_ON() Setzt den Enable-Eingang des L293D auf High. Der Antrieb ist eingeschalten. DRIVE_OFF() Setzt den Enable-Eingang des L293 auf Low. Der Antrieb ist ausgeschalten. DRIVE(left as byte, right as byte) Timer1 PWM für den Antrieb: Werte zwischen 1 bis 128 = rückwärts Werte zwischen 128 bis 255 = forwärts Wert 128 = Antrieb stopp Motor_POWER(left as byte, right as byte) Geschwindigkeit, Werte zwischen 1 und 255 Es muss zuvor mit MOTOR_DIR die Richtung vorgegeben werden. MOTOR_DIR(left as byte, right as byte) Gibt die Drehrichtung der Motoren für die Funktion MOTOR_POWER vor. 1 = vorwärts 0 = rückwärts MOTOR_STOP() Motor wird gestoppt, PWM wird auf 128 gesetzt.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Bei den IR LEDs ist die Durchlassspannung oft deutlich unter 1,3 V, wenn man den Strom nicht bis 100 mA hat. Bei etwa 10 mA kann das auch mal nur 1 V sein. Damit kommt man dann auch auf einen Strom von rund 15 mA. Das scheint hier ja auszureichen und Strom sparen ist sicher nicht Verkehrt bei Batteriebetrieb.
Die originalschaltung zur Motorsteuerung sieht wirklich nicht gut aus. Änderungen sind da wirklich sinnvoll. Eine Steuerung mit 4 Leitungen sollte auch reichen.
Für den Takt braucht man nicht unbedingt einen Oszillatorbaustein. Ein Quarz reicht aus und ist in der Regel kleiner, günstiger, leichter zu bekommen und sparsamer.
Das Mikrofon nur digital auszuwerten, wird glaube ich schwer. Da kann man besser auf die direkte Messung der Versorgungsspannung verzichten. Das kann mämlich auch ohne einen extra Pin haben: Man stellt AVCC als Ref. ein, und die 1,3 V Bandgap als zu messende Spannung. Das Ergebnis ist dann halt 1023 * 1,3 V / AVcc.
Lesezeichen