PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] Asuro Schalter K1-K6 per Software korrigieren?



ChrisPHL
31.03.2007, 20:03
Moin Leute,

ich habe den Asuro frisch zusammengebaut und er hat auch den ganzen Selbsttest fast korrekt durchlaufen. Was aber nicht ganz richtig funktioniert hat, waren die Schalter K1 und K2 (1. u. 2. v.l. in Fahrtrichtung). Die sollen ja bei diesem Testdurchlauf die StatusLED grün (K1) und rot (K2) ansteuern. Das tun sie auch, zusätzlich dreht aber auch jeweils der linke Motor mit. Wie in der Anleitung beschrieben habe ich die entsprechenden Widerstände noch mal kontrolliert, kann aber keine unangenehmen Auffälligkeiten entdecken. Nur beim Kontrollmessen beim Einbau ist mir aufgefallen, dass der R28 (16k, 1%) lediglich 15,43kOhm "hatte".
Nun meine Frage: wie kann man das Problem softwareseitig beheben? Ich denke, das wäre die eleganteste Lösung. Laut Anleitung soll das wohl machbar sein. Hat das schon mal jemand (erfolgreich) geschafft?

lg
Christian

radbruch
31.03.2007, 20:39
Hallo

Hier der betreffende Ausschnitt aus der Datei test.c, ein Bestandteil des Selbsttests:


/* ---------------------- */
/* ----- Switch Test ---- */
/* K1 -> Status LED Green */
/* K2 -> Status LED RED */
/* K3 -> Line LED */
/* K4 -> Break LED Left */
/* K5 -> Break LED Rigth */
/* K6 -> Motor Left */
/* ---------------------- */
void SwitchTest(void)
{
unsigned char sw,tmp;
MotorDir(FWD,BREAK);

sw = PollSwitch();
StatusLED(OFF);
FrontLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
tmp = 0;

if (sw & 0x01)
MotorSpeed(200,0);
if (sw & 0x02) {
BackLED(OFF,ON);
tmp = ON;
}
if (sw & 0x04)
BackLED(ON,tmp);
if (sw & 0x08)
FrontLED(ON);
if (sw & 0x10)
RED_LED_ON;
if (sw & 0x20)
GREEN_LED_ON;
}


if (sw & 0x01)
MotorSpeed(200,0);
Prüft ob Bit 0 in der Tasterabfrage gesetzt ist und startet den linken Motor. Soweit alles richtig. Wenn nun beim Drücken der anderen Tasten auch der Motor startet, bedeutet das, dass die Tasterbits von PollSwitch() nicht richtig gesetzt werden. Einfach mal "pollswitch AND taster AND asuro" (ohne ") in der Forensuche eingeben.

Gruß

mic

ChrisPHL
01.04.2007, 20:45
hm... so richtig schlau werde ich daraus auch nach viel Leserei und Experimentieren nicht...
Soll ich nun die Funktion PollSwitch() bearbeiten oder "einfach" durch Probieren die korrekten Werte in der test.c ermitteln? (Vielleicht hast du dafür eine bessere Lösung?.) Wenn ich die Hex-werte in der test.c verändere, dann ändert sich auch die "Reaktion" auf Druck auf die verschiedenen Taster... Nur scheint sich die Lage nach mehreren Versuchen eher zu "verschlimmbessern".
Eigentlich sagst du es ja schon, PollSwitch() setzt nicht die richtigen Bits, rein logisch sollte man also auch diese Funktion korrigieren aber da fehlt mir im Moment noch der Durchblick.
Gib mir doch bitte noch mal einen Tipp! ;-) (Es möge sich natürlich auch gern jeder Ander angesprochen fühlen!)

Gruß
Christian

EDIT: Manchmal hilft es doch, wenn man laut denkt... Eine deutliche Verbesserung tritt ein, wenn ich die Funktion PollSwitch() aus "asuro.c" so ändere: (Wenn ich damit alle Taster einzeln(!) ausprobiere, dann funktioniert´s. Etwas verwirrt reagiert mein Asuro aber, wenn ich mehrere Tasten gleichzeitig und wild durcheinander drücke.)
// return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5)); // Originalzeile
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));

Um das ganze zu verstehen, hilft es, sich noch mal das Kapitel zur PollSwitch()- Funktion in der Bediehnungsanleitung anzuschauen.

Ach ja: Hier mein gekürztes Testprogramm: (Spart echt Zeit...)
#include "asuro.h"

/* ---------------------- */
/* ----- Switch Test ---- */
/* K1 -> Status LED Green */
/* K2 -> Status LED RED */
/* K3 -> Line LED */
/* K4 -> Break LED Left */
/* K5 -> Break LED Rigth */
/* K6 -> Motor Left */
/* ---------------------- */
void SwitchTest(void)
{
unsigned char sw,tmp;
MotorDir(FWD,BREAK);

sw = PollSwitch();
StatusLED(OFF);
FrontLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
tmp = 0;

if (sw & 0x01)
MotorSpeed(200,0);
if (sw & 0x02) {
BackLED(OFF,ON);
tmp = ON;
}
if (sw & 0x04)
BackLED(ON,tmp);
if (sw & 0x08)
FrontLED(ON);
if (sw & 0x10)
RED_LED_ON;
if (sw & 0x20)
GREEN_LED_ON;
}/* END Switch Test ------------------------------ */


int main ( void ){
Init();
StatusLED(GREEN);
SerWrite("\n\r-- ASURO Tasterabfrage --\n\r",29);
SerWrite("\n\r Bitte jetzt die einzelnen Taster drücken!\n\r",48);
while(1){
SwitchTest();
SerWrite("\n\r",2);
}
return 0;
}

damaltor
01.04.2007, 21:23
du kannst zuerst mal etwas mechanisches ausprobieren: lass die funktion im originalzustand. dann kneifst du ein beinchen des kondensators, der parallel zu den tastern geschaltet ist, ab. vorsichtig sein! es ist entweder der kondensator c6 oder c7. bitte schau im schaltplan am ende der anleitung nach. falls jemand es weiss, bitte posten =)

das hat bei mir wahre wunder gewirkt. seitdem stimmen die taster werte zu 99,9%. sollte das nicht klappen bzw nichts helfen, dann kannst du das eine beinchen einfach wieder auf den lötpunkt festlöten; deshalb soltest du nur ein bein abkneifen.

ansonsten: suche im forum, die falschen taster werte sind ein "beliebtes" problem was sehr oft besprochen wird. es gibt viele lösungsansätze.

ChrisPHL
01.04.2007, 21:36
Mein Asuro ist aber erst zwei Tage alt! (Da kann ich ihm doch nicht jetzt schon Weh tun! *grins*)

[...]kneifst du ein beinchen des kondensators, der parallel zu den tastern geschaltet ist, ab. Dazu habe ich erst mal eine andere Frage: Welche Funktion hat denn der C7 (Laut Schaltbild ist es dieser.)? Die Herren Entwickler haben sich sicher was dabei gedacht, das Ding an der Stelle unterzubringen. Ich vermute mal ganz spontan, dass der C7 Spannungsschwankungen auf der "K1-K6- Schiene" mindern soll. Dass es ohne C7 trotzdem schlagartig besser wird, ist doch ein interessantes Phänomen...

Gruß
Christian

damaltor
01.04.2007, 21:58
er ist zur allgemeinen "beruhigung" des systems, ist schon richtig. er soll störspannungen usw herausfiltern. wenn er allerdings gerade geladen ist, dann kann es sein, dass er die spannungsmessung (was anderes ist es nicht, ein ADC misst die spannung des ports an dem die taster hängen, diese ändert sich je nachdem wie viele / welche taster auf masse liegen) verfälscht. dadurch stimmen dann die werte nicht.

das ist nicht die einzige ursache, zB können die billigen widerstände die zT deutlich höhere toleranzen haben als aufgedruckt wurde, einfluss haben. zB ist ein 10k widerstand mit 1% toleranz theoretisch zwischen 9 und 11kOhm. bei den vom asuro können es durchaus auch 8 oder 12 werden... billig zeug halt =)

ChrisPHL
02.04.2007, 14:13
wenn er allerdings gerade geladen ist, dann kann es sein, dass er die spannungsmessung (was anderes ist es nicht, ein ADC misst die spannung des ports an dem die taster hängen, diese ändert sich je nachdem wie viele / welche taster auf masse liegen) verfälscht. dadurch stimmen dann die werte nicht.
Jo, das leuchtet ein. Offensichtlich verschlimmbessert er (der C7) die Gesamtsituation...


das ist nicht die einzige ursache, zB können die billigen widerstände die zT deutlich höhere toleranzen haben als aufgedruckt wurde, einfluss haben. zB ist ein 10k widerstand mit 1% toleranz theoretisch zwischen 9 und 11kOhm. bei den vom asuro können es durchaus auch 8 oder 12 werden... billig zeug halt =)
Das habe ich ja oben auch schon beschrieben, 16k +- 1% => 15,84k - 16,16k. Gemessen habe ich an dem Teil aber 15,43k, da kann man glatt noch einen 470er in Reihe dazu schalten... Aber wenigstens konnte ich das Hauptproblem schon so gut wie beheben.

Danke euch!

Gruß
Christian

DGS
02.04.2007, 17:55
Also hilft es nur wenig die Software anzupassen ( PollSwitch zu kalibrieren ).
Am einfachsten geht es und vor genauer, indem man den Kondensator C7 entfernt?

ChrisPHL
02.04.2007, 19:50
Also hilft es nur wenig die Software anzupassen ( PollSwitch zu kalibrieren ).
Am einfachsten geht es und vor genauer, indem man den Kondensator C7 entfernt? Nein, das kann man so nicht sagen, die komplett "schiefen" Werte, die die PollSwitch() zurück gibt, kann man schon ganz gut mit dem "Softwaretuning" wie ich es oben beschrieben habe, korrigieren. Das Problem, dass der Asuro bei wildem "Drauflosdrücken" wirr und scheinbar ohne System reagiert, kann man offensichtlich durch Entfernen des C7 erreichen. (@damaltor: Stimmt doch, oder?)

Gruß
Christian

damaltor
02.04.2007, 22:43
ja genau. bei mir hat es sehr geholfen den kondensator zu entfernen. bei einem freund von mir überhaupt nicht. probiere es aus, entferne ihn nicht ganz, sndern kneif nur ein bein durch, das kann man dann recht leicht wieder anlöten.

DGS
02.04.2007, 23:37
@ ChrisPHL

Also einzelne Taster scheinen zu funktionieren. Beim Stillstand des ASURO hatte ich noch nie falsche Messwerte erhalten. Aber sobald der ASURO die Motoren einschaltet und abdüst kommen die Messfehler.
Hatte Anfangs auch eine Kollisionsabfrage drin, die den ASURO stoppen sollte, sollte er ein Hindernis treffen. Resultat war, dass der oft einfach so, ohne Berührung stehenblieb.

Die Frage ist nur, wie man das Beinchen abkneifen soll.

1. der ist von anderen Teilen umzingelt. Also seitlich komm ich da nicht ran.
2. ist der Kondensator sehr dicht an der Platine. Also wenn ich da was abschneide, wird nichts mehr übrig bleiben, um es anzulöten.

Einzig was mir einfällt ist es ihn auszulöten.

_HP_
03.04.2007, 10:00
Hi DGS,

wenn der Fehler nur auftritt, wenn die Motoren laufen, solltes Du versuchen, die Motorstörungen zu beseitigen. Die betreffen dann nämlich nicht nur die Messung der Schalter sondern auch die der Odometer und der Batterie.
Versuche also die Motoren
a) zu entstören. Dazu jeweils zwei 10nF Kondensatoren von den Motoranschlüssen gegen das Motorgehäuse löten. Dann die Motorgehäuse auf Masse legen.
b) spannungsmäßig von der Logik zu trennen. Suche dazu den Artikel von waste über das Asuro Evaluationboard (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroEvalBoard) . Dort wird ein Spnnungsregler eingesetzt, um genau das zu erreichen.

Viel Erfolg...

Gruß,

_HP_

_HP_
03.04.2007, 10:00
Hi DGS,

wenn der Fehler nur auftritt, wenn die Motoren laufen, solltes Du versuchen, die Motorstörungen zu beseitigen. Die betreffen dann nämlich nicht nur die Messung der Schalter sondern auch die der Odometer und der Batterie.
Versuche also die Motoren
a) zu entstören. Dazu jeweils zwei 10nF Kondensatoren von den Motoranschlüssen gegen das Motorgehäuse löten. Dann die Motorgehäuse auf Masse legen.
b) spannungsmäßig von der Logik zu trennen. Suche dazu den Artikel von waste über das Asuro Evaluationboard (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroEvalBoard) . Dort wird ein Spnnungsregler eingesetzt, um genau das zu erreichen.

Viel Erfolg...

Gruß,

_HP_

DGS
03.04.2007, 12:55
Hi!

Das mit den je zwei Kondensatoren steht schon auf meiner Bestellungsliste bei reichelt. Wollte aber erst noch mehr Teile zusammensuchen bevor ich bestelle.

Das mit der Trennung klingt sehr gut, aber auch etwas schwer. Ich meine, man muss da paar Teile auslöten und Leiterbahnen trennen. Zweiteres geht zwar mit nem Messer, aber ersteres könnte für mich ein Problem werden. Ne Entlötpumpe wäre da gut investiertes Geld?
Vorteile sind dabei die schnellere Geschwindigkeit der Motoren, da man mehr als 5V geben kann, sowie genauere Messungen.

_HP_
03.04.2007, 14:38
Ja, Entlötpumpe und -litze sollte man einfach haben. Die kosten auch nicht die Welt.

Gruß,

_HP_

damaltor
03.04.2007, 17:10
solche teile gehören zur grundausstattung, und sind deshalb wirklich nciht sehr teuer. aber die beste lösung ist wirklich die trennung der stromkreise.

bei dem kondensator musst du etwas aufpassen, wenn du ihn auslötest: wenn er zu heiss wird, zerfällt er.

DGS
03.04.2007, 17:54
Sollte er dabei zerstörrt werden - halb so wild. Ist nicht gerade teuer, solange man genug andere Sachen mitbestellt, damit die Versandkosten nicht überwiegen.