PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Planung: ASURO mit Karosserie - Fragen zur Elektronik



M1.R
22.11.2007, 17:09
Hallo,

mein zweiter ASURO ist in Planung.

Da meine Elektronikkenntnisse leider mangelhaft sind, wäre ich euch sehr dankbar, wenn ihr mich bei der Planung ein wenig unterstützen würdet.

Also, der ASURO soll eine Karosserie bekommen und so aufgebaut sein, dass Erweiterungen ohne größere Umbaumaßnahmen möglich sind. Daher möchte ich die LEDs und Sensoren mit Kabeln mit "Steckern" an "Steckdosen" auf der ASURO-Platine anschließen.
Hier nun meine erste Frage:
Mit was für Bauteilen lassen sich "Steckdosen" und "Stecker" realisieren?
Und noch mehr Fragen:
Ist es möglich, statt der linken BackLED zwei weiße "Frontscheinwerfer" und anstelle der rechten zwei "Rücklichter" anzuschliessen? Wenn ja, schaltet man sie dann in Reihe? Wie gross muß dann der jeweilige Vorwiderstand sein?

Gruss
M.

damaltor
22.11.2007, 18:06
da gibts so steckbuchsen und stiftleisten... an sich sollte es auch kein problem sein dei LEDS so zu ändern.

weisse leds brauchen recht viel strom. trotzdem kannst du sie genau wie die roten leds in reihe shalten, ich würde einen vorwiderstand von 50-80 ohm vorschlagen.

radbruch
22.11.2007, 18:37
Hallo

Bei meinem asuro case modding (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=27486) hatte ich lichtleitenden Kunststoff verwendet um das Licht der StatusLED und das IR nach aussen zu führen.

mic

inka
22.11.2007, 20:19
hi,
suche mal nach "selbsttragende karosserie"

ich habe die IR dioden gesockelt und auf den großen kondensatoren aufgeklebt, verbindung mit steckbrücken (suche "IR umbau")...

mit einer karosserie, wie auch immer geartet, wird es schwieriger erweiterungen anzubringen...

M1.R
26.11.2007, 16:41
Hallo,

danke für eure Tipps!


ich würde einen vorwiderstand von 50-80 ohm vorschlagen.warum?

Eigentlich wüßte ich gerne, wie man die Widerstände ausrechnen kann.

folgende Gleichung zur Berechnung des Vorwiderstands habe ich gefunden:

R = (UB - ULED)/ILED

nur leider hat mir diese Gleichung zu viele Unbekannte:

R = Vorwiderstand : ?
UB = Betriebsspannung : ca. 5V
ULED = LED-Betriebsspannung : ? (ULED1 + ULED2 ...)
ILED = Strom : ?

Mit Hilfe des ASURO-Schaltplan habe ich versucht rauszufinden, wie groß die Vorwiderstände der verschiedenen LEDs sind.
Dabei bin ich zu dem für mich überraschenden Ergebnis gekommen, dass die BackLEDs jew. 1 kOhm haben, die FrontLED (gleiche Sorte) nur 220 Ohm.

Wäre super, wenn mir jemand das alles erklären könnte!

@radbruch
tolle Idee!

@inka

IR dioden gesockelt...verbindung mit steckbrückenwas für Sockel? Was sind Steckbrücken?

Gruss
M. (die Elektronik-Ahnungslose)

inka
26.11.2007, 17:07
in diesem bild sieht man die sockel an der stelle wo die IR diode normalerweise sitzt und auch die drähte (steckbrücken) die zu der auf dem kondensator plazierten IR-diode gehen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=11114&postdays=0&postorder=asc&highlight=flashdiode+hinderniserkennung&start=66

M1.R
26.11.2007, 17:44
Hallo inka,

danke!
noch ein paar Fragen dazu im Anhang

Gruss
M.

T.J.
26.11.2007, 18:07
so wie ich das sehe steckt die Leitung da mit einem Stift in dem Loch. aber ich denke das ist dir klar. was meinst du mit der Frage? Das unter dem Schrumpfschlauch ne Leitung ist, sollte klar sein?!

lpw
26.11.2007, 19:30
Unter dem Schrumpfschlauch ist ne Lötstelle, zwischen Draht und Stift.

damaltor
26.11.2007, 22:15
so rechnet man vorwiderstände aus:

eine "normale" leuchtdiode benötigt etwa 20 mA (sollte nicht mehr werden). ausserdem fällt die spannung an einer led um etwa 2 volt ab.

die versorgungsspannung liegt bei rund 5V, es ist also schonmal klar dass nicht mehr als 2 leds in reihe geschaltet werden dürfen, da die spannung zu weit abfällt.

wir beginnen mit einer led: an dem widerstand müssen also 3V abfallen, weil dann genau 2 für die led bleiben.

R = U / I
R = 3V / 0.02A = 150 Ω
der vorwiderstand liegt also bei 150 ohm. bei der schwankeligen spannungsversorgung des asuro lieber etwas höher, also so 150-170 ohm.

jetzt zwei leds in reihe: wir brauchen wieder 20 mA (der strom fliesst ja durch beide leds hintereinander) aber nur 1V spannungsabfall, da an jeder led 2V abfallen.

R = U / I
R = 1V / 0.02A = 50 Ω

wieder etwas mehr: 50-70 ohm

wenn du zwei leds parallel schaltest, empfiehlt es sich jeder einen eigenen vorwiderstand zu geben, auch wenn es möglich ist beide an einem widerstand zu betreiben (3V abfall bei 40 (!) mA)

M1.R
30.11.2007, 16:36
Hallo,

vielen Dank allerseits!

Was mich aber immer noch verwirrt, sind die grossen (1kOhm) Widerstände (R19, R20) bei den BackLEDs.
Kann es sein, dass die noch eine andere Funktion haben?
Jetzt habe ich noch dazu die Widerstände R18 und R20 entdeckt, die ja auch irgendwie da dran hängen?
Sieht für mich so aus, als ob da noch ein bischen Spannung oder Strom? dazu kommt? Deshalb auch die beiden großen R19 und R20?
Dann müsste ich meine neuen Vorwiderstände aber anders berechnen - oder?
Ausserdem verstehe ich nicht, wo die BackLEDs ihre Masse herbekommen.

So einen Schaltplan zu verstehen, fällt mir leider noch ziemlich schwer!

Gruss
M.

damaltor
01.12.2007, 19:45
die backleds bekommen die masse vermutlich ebenfalls vom prozessor, wenn dieser sie einschalten will...

die widerstände sind pulups, die sorgen dafür dass die leds etwas glimmen. wie lautet denn die c-funktion für die backleds?

M1.R
02.12.2007, 11:13
wie lautet denn die c-funktion für die backleds?
void BackLED (
unsigned char left,
unsigned char right)
{
if (left || right)
{
PORTD &= ~(1 << PD7); // Rad-LED's OFF
DDRC |= (1 << PC0) | (1 << PC1); // Port als Output => KEINE Odometrie
PORTC |= (1 << PC0) | (1 << PC1);
}
if (!left)
PORTC &= ~(1 << PC1);
if (!right)
PORTC &= ~(1 << PC0);
}

damaltor
02.12.2007, 12:59
danke.

eigentlich siehts gar nicht so kompliziert aus... mit der zeile
PORTD &= ~(1 << PD7);
wird pd7 auf masse gesetzt sofern wenigstens eine led eingeschaltet werden soll (left || right). somit haben die leds hier eine masse. jetzt werden beide leds eingeschaltet (!) und dann bei bedarf wieder deaktiviert mit den zeilen darunter.

{
if (left || right) //wenn eine led eingeschaltet werden soll...
{
PORTD &= ~(1 << PD7); // Rad-LED's OFF & masse an
DDRC |= (1 << PC0) | (1 << PC1); // Port als Output => KEINE Odometrie
PORTC |= (1 << PC0) | (1 << PC1); //beide leds an
}
if (!left) //wenn nicht links
PORTC &= ~(1 << PC1); //dann wieder aus
if (!right) //wenn nicht rechts
PORTC &= ~(1 << PC0); // dann wieder aus
}

M1.R
02.12.2007, 13:24
danke - wieder ein bischen mehr kapiert!

eigentlich siehts gar nicht so kompliziert aus... na ja das ist relativ!
Fragen über Fragen:
Aber warum glimmen (wegen den pullup-Widerständen) die BackLeds nicht, wenn Sie ausgeschaltet werden? Die Masse wird ja nicht wieder abgeschaltet - oder?
Wozu sind die pullups überhaupt notwendig?
Warum hängen die BackLEDs nicht wie die anderen an der "normalen" Masse? - Könnte es sein, dass dann die Odo-Transistoren die BackLEDs einschalten würden?
Gruss
M.

damaltor
02.12.2007, 15:50
jaaa so ungefähr hast du schon recht. das ist hauptsächlich weil am asuro so extrem prozessorpins gespart wurden dass man die odometrie und die backleds an einem pin hängen. das ist schon für fortgeschrittene =)

M1.R
02.12.2007, 16:04
Hallo damaltor,
bitte, bitte auch noch erklären:

Aber warum glimmen (wegen den pullup-Widerständen) die BackLeds nicht, wenn Sie ausgeschaltet werden? Die Masse wird ja nicht wieder abgeschaltet - oder?
Wozu sind die pullups überhaupt notwendig?
Gruss
M.

damaltor
03.12.2007, 09:56
wenn der pin PD7 high ist, bekommen die leds den strom qquasi von der falschen richtung, und glimmen nicht mehr. gleichzeitig leuchten jedoch die odometrie-leds strahlend hell, aber unsichtbar auf.

die pullups r18 und r20 haben folgende bedeutung:
sie sind im grunde so angeschlossen:
VCC---Pullup---Odo-sensor---GND

wenn nun kein licht auf den odo-sensor fällt, hat dieser einen hohen widerstand, nehmen wir an er wäre unendlich groß, und wir könntn den maximal möglichen wert für die odometrie messen (weil der pullup widerstand den prozessorpin auf high zieht - deshalb "pull up"). wenn der fototransistor jedoch viel licht abbekommt, schaltet er durch und der ganze strom fliesst zur masse - wir messen den kleinstmöglichen wert. wenn der fototransistor nun mittelmäßig viel licht bekommt, messen wir auch einen mittleren wert usw, da immer strom über den widerstand kommt und teilweise über den fototransistor abgeleitet wird.

M1.R
05.12.2007, 21:01
@damaltor
vielen Dank, habs jetzt größtenteils verstanden!
Hab BackLED-Funktionen geschrieben, mit denen man sie auch glimmen lassen kann:

//------------------------------------------------------------------
//backled-spielchen
//------------------------------------------------------------------

#include "asuro.h"

//------------------------------------------------------------------
//backled funktionen um die leds unabhängig voneinander
//hell leuchten oder glimmen zu lassen
//------------------------------------------------------------------

#define aus 0
#define hell 1
#define glimm 2

//------------------------------------------------------------------
// rechte led
void BackLEDrechts(uint8_t status) // aus - hell - glimm
{
PORTD &= ~(1 << PD7); //odoleds aus
if (status == aus)
{ //rechte backled aus
DDRC |= (1 << PC0); //rechts auf out
PORTC &= ~(1 << PC0); //rechte aus
}
if (status == hell)
{
//rechte backled hell
DDRC |= (1 << PC0); //rechts auf out
PORTC |= (1 << PC0); //rechte an
}
if (status == glimm)
{ //rechte backled glimmt
DDRC &= ~(1 << PC0); //rechts auf in
}
}

//------------------------------------------------------------------
// linke led
void BackLEDlinks(uint8_t status) // aus - hell - glimm
{
PORTD &= ~(1 << PD7); //odoleds aus
if (status == aus)
{ //rechte backled aus
DDRC |= (1 << PC1); //links auf out
PORTC &= ~(1 << PC1); //linke aus
}
if (status == hell)
{
//rechte backled hell
DDRC |= (1 << PC1); //links auf out
PORTC |= (1 << PC1); //linke an
}
if (status == glimm)
{ //rechte backled glimmt
DDRC &= ~(1 << PC1); //links auf in
}
}

//------------------------------------------------------------------
//------------------------------------------------------------------

uint8_t i;

//------------------------------------------------------------------
// hauptprogramm
//------------------------------------------------------------------

int main(void)
{
Init();

BackLEDrechts(aus);
BackLEDlinks(aus);
StatusLED(GREEN);
Msleep(1000);

for(i = 1; i <= 5; ++i)
{
BackLEDrechts(glimm);
BackLEDlinks(glimm);
Msleep(500);
BackLEDrechts(hell);
BackLEDlinks(hell);
Msleep(500);
}

BackLEDrechts(aus);
BackLEDlinks(aus);
Msleep(500);

for(i = 1; i <= 5; ++i)
{
BackLEDrechts(hell);
BackLEDlinks(glimm);
Msleep(500);
BackLEDrechts(glimm);
BackLEDlinks(hell);
Msleep(500);
}

BackLEDrechts(aus);
BackLEDlinks(aus);
Msleep(500);

for(i = 1; i <= 5; ++i)
{
BackLEDrechts(aus);
BackLEDlinks(glimm);
Msleep(500);
BackLEDrechts(glimm);
BackLEDlinks(aus);
Msleep(500);
}

BackLEDrechts(aus);
BackLEDlinks(aus);
StatusLED(RED);

while (1);
return 0;
}

Gruss
M.

damaltor
05.12.2007, 21:47
sehr gut :D offensichtlich hast du es echt gut verstanden. könnte schon fast in die lib, so kann man noch mehr als nur ann oder aus anzeigen. =) nicht schlecht!