Forum: Mikrocontroller und Digitale Elektronik CAN-Aktivität per Pin-change interrupt erkennen?


von Lutz (Gast)


Lesenswert?

Hallo,

die "normalen" 5V CAN-Transceiver verbraten ja laut Datenblatt auch 
recht ein paar mA, wenn auf dem Bus nix los ist. Wäre bei mir in 99,x % 
der Zeit so (sollen 24/7 laufen). Bei ca. 20 Nodes kommen da im Jahr 
(wenige) kWh zusammen. Geht aber ums Prinzip.
Nun habe ich mir theoretisch folgendes ausgesponnen: Bis auf einen Node 
(zum Halten des Buspegels) wird einfach der Transceiver per Portpin und 
Transistor abgeschaltet, wenn eine gewisse Zeit kein Verkehr war. Ein 
anderer Portpin wird dann per Pin-change-interrupt zum Überwachen des 
Busses abgestellt und der µC pennt auch. Wenn dann was auf dem Bus 
passiert, wird es erkannt, µC wacht auf und in der ISR der Transceiver 
wieder aktiviert. Das dieser Frame verloren ist, ist klar, aber kein 
Problem.

Ist das mal wieder viel zu blauäugig gedacht oder könnte das so 
funktionieren?

von Frank K. (fchk)


Lesenswert?

Wenn der Sender niemand hat, der seine Frames bestätigt, wird er in 
einen Bus Error laufen.
Außerdem ist Deine Idee deshalb Pfusch, weil die Receiver ja die 
SpannungsDIFFERENZ auswerten und nicht die absoluten Pegel der beiden 
Einzelsignale.

Der Stromverbrauch eines Tranceivers ist im Wesentlichen durch die 
Erzeugung der dominanten Zustände bestimmt. Sendest Du nix (außer den 
erforderlichen Acks), brauchst Du weniger Strom.

Also streiche Deine Idee.

fchk

von Bernhard _. (Firma: dl1bg) (bernhard_)


Lesenswert?

Manche Transceiver versprechen, ein aktives Signal auch im Standby zu 
melden, allerdings nicht mit der benötigten Geschwindigkeit. Ich habe 
mir eine kleine Transistorschaltung gebaut, die den Transceiver dann für 
10 ms aktiv schaltet. Ergebnis: einige errorframes, aber sonst alles 
perfekt.
Mehr kann ich dazu nicht veröffentlichen.

von Falk B. (falk)


Lesenswert?

@  Lutz (Gast)

>die "normalen" 5V CAN-Transceiver verbraten ja laut Datenblatt auch
>recht ein paar mA, wenn auf dem Bus nix los ist.

Wirklich? Glaub ich nicht. Z.B. der TJA1040 hat explizit eine Wake Up 
Funktion bei max. 15µA stand by current.

"Wake-up
In the standby mode the bus lines are monitored via a
low-power differential comparator. Once the low-power
differential comparator has detected a dominant bus level
for more than tBUS, pin RXD will become LOW."

von Andreas K. (hammerhead)


Lesenswert?

Frank K. schrieb:
> Wenn der Sender niemand hat, der seine Frames bestätigt, wird er in
> einen Bus Error laufen.

Tschuldigung, aber Ochsenkot. Ein unbestätigtes Frame wird ganz einfach 
(mehrmals) neu gesendet.

von Lutz (Gast)


Lesenswert?

Frank K. schrieb:
> Wenn der Sender niemand hat, der seine Frames bestätigt, wird er in
> einen Bus Error laufen.
Natürlich bekommt er antworten; aber erst, wenn die anderen 
Busteilnehmer aufwachen. Und das dauert nicht so lange.

> Außerdem ist Deine Idee deshalb Pfusch, weil die Receiver ja die
> SpannungsDIFFERENZ auswerten und nicht die absoluten Pegel der beiden
> Einzelsignale.
Also ändern sich die absoluten Spannungen an CANH und CANL nicht in 
Abhängigkeit des zu übertragenden Bits zwischen 1,5 V/ 3,5 V ???

=> Ich will ja nur erkennen, ob der Bus idle ist oder nicht und keine 
Nachrichten damit auswerten. Das soll dann natürlich der reaktivierte 
Transceiver leisten. Scheinst du, wie auch der erste Punkt erkennen 
läßt, mißverstanden zu haben.

> Der Stromverbrauch eines Tranceivers ist im Wesentlichen durch die
> Erzeugung der dominanten Zustände bestimmt. Sendest Du nix (außer den
> erforderlichen Acks), brauchst Du weniger Strom.
Schon klar, aber laut Datenblatt sind es auch zwischen 2,5 und 10 mA 
(Typ. 5 mA).

Falk Brunner schrieb:
> Wirklich? Glaub ich nicht. Z.B. der TJA1040 hat explizit eine Wake Up
> Funktion bei max. 15µA stand by current.
Leider handelt es sich (laut NXP mit "großer Wahrscheinlichkeit") um den 
TJA1050, welcher in den LPC11C24 werkelt. Am schönsten wäre natürlich, 
NXP würde dort einen mit Standby reindrücken; und das natürlich auch mit 
3.3 V :-)

von Frank K. (fchk)


Lesenswert?

Lutz schrieb:
> Frank K. schrieb:
>> Wenn der Sender niemand hat, der seine Frames bestätigt, wird er in
>> einen Bus Error laufen.
> Natürlich bekommt er antworten; aber erst, wenn die anderen
> Busteilnehmer aufwachen. Und das dauert nicht so lange.

Wenn das Aufwachen schneller geht als der Errorcounter abläuft... nun 
gut.

>> Außerdem ist Deine Idee deshalb Pfusch, weil die Receiver ja die
>> SpannungsDIFFERENZ auswerten und nicht die absoluten Pegel der beiden
>> Einzelsignale.
> Also ändern sich die absoluten Spannungen an CANH und CANL nicht in
> Abhängigkeit des zu übertragenden Bits zwischen 1,5 V/ 3,5 V ???

Der Sender sendet genau das. Was dann aber 50m weiter ankommt, ist eine 
andere Frage. Genau deswegen macht man ja eine differentielle 
Übertragung und wertet beim Empfänger niemals die absoluten Pegel, 
sondern immer nur die Pegeldifferenzen aus. Eine Leitung ist in der 
Realität eben kein idealer Kurzschluss.

> => Ich will ja nur erkennen, ob der Bus idle ist oder nicht und keine
> Nachrichten damit auswerten. Das soll dann natürlich der reaktivierte
> Transceiver leisten.

Ja, unter idealen Bedingungen kann das funktionieren. Das ist wie das 
Loriot'sche 3 Minuten Ei, das eben nur zufällig weich ist.

>> Wirklich? Glaub ich nicht. Z.B. der TJA1040 hat explizit eine Wake Up
>> Funktion bei max. 15µA stand by current.
> Leider handelt es sich (laut NXP mit "großer Wahrscheinlichkeit") um den
> TJA1050, welcher in den LPC11C24 werkelt. Am schönsten wäre natürlich,
> NXP würde dort einen mit Standby reindrücken; und das natürlich auch mit
> 3.3 V :-)

Dann nimmst Du eben halt einen LPC11C14 ohne integrierten Transceiver 
und wählst Deinen Transceiver passend aus. Das würde ich aus ESD-Gründen 
ohnehin immer machen. Im Falle von Ungemach auf dem Bus geht dann nur 
ein SO-08 hopps, was leichter ausgetauscht werden kann als ein TQFP48.

fchk

von Lutz (Gast)


Lesenswert?

Frank K. schrieb:
> Wenn das Aufwachen schneller geht als der Errorcounter abläuft... nun
> gut.
Also m.W. geht er bei fehlendem ACK nur in den Error-Passive Mode und 
nicht in den Bus-Off Mode. Bin aber ehrlichgesagt auch kein CAN-Spezi. 
Aber selbst wenn: Das ließe sich damit verhindern, daß ich halt 2 Nodes 
am Leben lasse.

Frank K. schrieb:
> Dann nimmst Du eben halt einen LPC11C14 ohne integrierten Transceiver
> und wählst Deinen Transceiver passend aus.
Dann wird es aber halt schon wieder fast doppelt so teuer. Ein 
"vernüftiger" Transceiver kostet praktisch genauso viel wie ein 
LPC11C24. Außerdem sehr platzsparend (wobei das hierbei allerdings nicht 
so wichtig ist).

Frank K. schrieb:
> Im Falle von Ungemach auf dem Bus geht dann nur
> ein SO-08 hopps, was leichter ausgetauscht werden kann als ein TQFP48.
Das ist natürlich richtig. Aber die sind da garantiert auf 50-70 m unter 
sich und haben dabei nichts auszustehen.

Frank K. schrieb:
> Der Sender sendet genau das. Was dann aber 50m weiter ankommt, ist eine
> andere Frage. Genau deswegen macht man ja eine differentielle
> Übertragung und wertet beim Empfänger niemals die absoluten Pegel,
> sondern immer nur die Pegeldifferenzen aus. Eine Leitung ist in der
> Realität eben kein idealer Kurzschluss.
Absolut richtig. Ich will ja aber nur erkennen, wenn etwas auf dem Bus 
los ist. Wenn der Bus idle ist, müßten CANH und CANL beide stabil 2.5 V 
haben. Ist ja keine Dynamik vorhanden. Da sind die von dir beschriebenen 
realen Leitungseigenschaften dann ohne Einfluß.
Und sobald sich das ändert, werden ja die Tranceiver wieder 
zugeschaltet.

von Falk B. (falk)


Lesenswert?

@  Lutz (Gast)
>Das ist natürlich richtig. Aber die sind da garantiert auf 50-70 m unter
>sich und haben dabei nichts auszustehen.

Das muss nix heißen, wenn genügend kräftige Störer in der Nähe sind.

>> sondern immer nur die Pegeldifferenzen aus. Eine Leitung ist in der
>> Realität eben kein idealer Kurzschluss.
>Absolut richtig. Ich will ja aber nur erkennen, wenn etwas auf dem Bus
>los ist. Wenn der Bus idle ist, müßten CANH und CANL beide stabil 2.5 V
>haben.

NEIN! Das ist sowohl statisch als auch dynamisch NICHT SO! Denkst du, 
der Rest der Welt ist doof und mach die voll differentielle Auswertung 
aus Spaß?

von holger (Gast)


Lesenswert?

>Wäre bei mir in 99,x %
>der Zeit so (sollen 24/7 laufen). Bei ca. 20 Nodes kommen da im Jahr
>(wenige) kWh zusammen. Geht aber ums Prinzip.

Pro Tag 1 Minute weniger fernsehen spart mehr ein.
Dann kannst du dir deine 20 Nodes leisten;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.