Hi Leute,
ich bin gerade dabei mein CAN-Transceiver zu testen (TJA1054).
Ich hab mir zuerst überlegt, auf den TXD-Eingang mit einem
Labornetzgerät verschiedene Pegel (5V bzw. 0V) zu geben.
Langsam bekomme ich aber das Gefühl, dass es so einfach nicht geht. An
CANH und CANL ergibt sich nämlich kein Unterschied, egal was an TXD
anliegt.
Mache ich was falsch oder funktioniert das grundsätzlich nicht?
Mit freundlichen Grüßen
B0bbyR4y
Klaro. Müsste prinzipiell so gehen.
Folgende Details beachten:
- Terminierung vorhanden?
- Hat der Transceiver eine DTO Funktion? Dann ändert sich der
Pegel ggf. nur kurz
- Was Du am TXD Eingang anlegst, kannst "spiegelt" der Transceiver an
einem RXD Ausgang zurück.
Hoffe, das hilft Dir schonmal.
Viele Grüße,
Michael
Bruno Kempf schrieb:> Ich hab mir zuerst überlegt, auf den TXD-Eingang mit einem> Labornetzgerät verschiedene Pegel (5V bzw. 0V) zu geben.
Das funktioniert nicht, der Transceiver schaltet bei zu langen Lowpegeln
ab. Gib mit dem Frequenzgenerator 100 kHz drauf.
Und vergiss die Terminierung nicht, sonst ist der rezessive Pegel
("high" am Bus) daneben.
Hi Michael,
die Terminierung habe ich drin, das Problem ist, dass ich sehen will was
auf den Busleitung (CANH und CANL) rauskommt. Der RXD ist mir (erstmal)
egal.
@ Soul Eye
Okay... das hab ich mir schon gedacht :-/ leider habe ich gerade keinen
Funktionsgenerator. Gibt es da keine andere Möglichkeit?
Bruno Kempf schrieb:> Das Problem ist, dass ich gerade keinen Funktionsgenerator
Kein µC greifbar, der in einer Endlosschleife einen Pin an- und
abschaltet?
Hi Klaus,
nein leider nicht. So weit bin ich noch nicht, dass ich paar µC
rumliegen habe. Kommt noch ;-)
Danke für die Antworten. Sobald der µC für mein Board da ist, werde ich
diesen verwenden, um zu testen.
Poste doch einfach mal die Schaltung um Deinen Low-Speed Transceiver
herum.
Der TJA1054 an sich funktioniert ja, nur richtig benutzen muss man den
auch.
Hi Rudolph,
im Anhang ist der Schaltplan zu meinem Testaufbau. An VCC hängen noch
10µF nach Masse, die ich im Schaltplan vergessen habe.
/ERR und /WAKE sind offen.
Der INH-Pin funktioniert einwandfrei. Falls EN=1 und /STB=0 (Go-to-Sleep
Mode) geht INH auf 0V und der Schaltregler schaltet sich aus.
Nachdem ich die verschiedenen Stromsparmodi getestet hatte, wollte ich
sehen was auf CANH/CANL rauskommt, wenn ich auf RXD einen High-Pegel
(5V) oder Low-Pegel (0V) gebe. Und da liegt das Problem. Egal ob an TXD
5V oder 0V liegen, am Pegel von CANH und CANL ändert sich nichts!
Also WAKE würde ich eher nicht offen lassen, fest auf VBAT wenn die
Funktion nicht genutzt wird.
Die Widerstände an RTL und RTH müssen mindestens 500 Ohm haben, nimm mal
4k7 oder so.
Für STB und EN machen sich Pulldown Widerstände eigentlich gut, im Reset
gehen die Pins vom Controller ja normalerweise auf Tristate.
Wenn IHN benutzt wird sowieso.
Und wie schon oben beschrieben, das Signal muss zappeln.
Im Datenblatt steht die tdet - failure detection time, je nach Fehler
sind das minimal 0,1ms bis maximal 8ms.
Aber das würde ich so eh nicht testen, man kann schon erwarten, dass der
Chip an sich das macht was im Datenblatt steht. :-)
Oft tun die das auch. :-)
Nur, wo wird überhaupt noch LowSpeed CAN eingesetzt?
Rudolph schrieb:> Also WAKE würde ich eher nicht offen lassen, fest auf VBAT wenn die> Funktion nicht genutzt wird.
Ohne ins Datenblatt geschaut zu haben: ist WAKE nicht ein Ausgang?
Max
Max G. schrieb:> Ohne ins Datenblatt geschaut zu haben: ist WAKE nicht ein Ausgang?
Nein, WAKE ist der Eingang mit dem man den Transceiver durch lokale
Ereignisse wach machen kann.
INH ist der dazugehörige Ausgang.
Bei IHN ist noch zu beachten, dass das keine Push-Pull Stufe ist, da
braucht man noch ein Pulldown wenn dieser nicht im Spannungsregler
enthalten ist.
Hi Rudolph,
danke für die Antwort!
Ja ich bezweifle es auch nicht das die funktionieren :-)
Wollte mir CANH und CANL nur mal "kurz" auf dem Oszi angucken. Aber das
mit kurz war wohl nichts.
Ich will über I/O-Pins vom Mikrocontroller die Botschaft, die vom
CAN-Controller gesendet wird, manipulieren. Mal das Verhalten der CANH
und CANL zu betrachten, wenn ein HIGH oder ein LOW Pegel an RXD anliegt,
wäre interessant gewesen.
Aber des wird so auch klappen.
Danke nochmal für die Hilfe!
Für den INH-Pin hab ich schon ein Beschaltung vorgesehen, da (wie du dir
gedacht hast) kein Pull-Down im Schaltregler integriert ist.
Funktioniert soweit alles. Wenn ich in den Sleep-Modus bzw. Go-to-Sleep
Modus wechsle schaltet sich der Schaltregler aus und sobald ich an WAKE
12V anlege wacht er wieder auf und der Schaltregler wird auch wieder
aktiviert.
Bruno Kempf schrieb:> Mal das Verhalten der CANH> und CANL zu betrachten, wenn ein HIGH oder ein LOW Pegel an RXD anliegt,> wäre interessant gewesen.
Gibt es doch genug Bilder vom. :-)
Zum Beispiel das hier:
rtsys.informatik.uni-kiel.de/svn/teaching/sem/06ws-rt/lwi/shared/picture
s/can-lowspeed.jpg
Ja das Bild kommt mir bekannt vor :-)
Also kann ich davon ausgehen, dass ein HIGH Pegel an RXD in ein
rezessives Bit (entspricht ja einer 1) und ein LOW Pegel in ein
dominantes Bit umgesetzt wird? Ohne irgendwelche zusätzliche Aktionen,
die im Controller oder Transceiver ablaufen?
Davon gehe ich zumindest aus. Bin aber ein bisschen verunsichert worden,
weshalb ich mir das ganze nochmal ansehen wollte.
Die Frage hätte ich gleich stellen sollen -.-
Bruno Kempf schrieb:> Also kann ich davon ausgehen, dass ein HIGH Pegel an RXD in ein> rezessives Bit...
Wenn das Bild stimmt. :-)
Da man weder einen Einfluss darauf hat was der Transceiver macht, noch
wie der Controller die CAN-Botschaft Bit-für-Bit zusammen baut, hat mich
die physikalische Seite nur ganz am Anfang mal am Rande interessiert.
:-)
LowSpeed ist ja auch quasi tot, damit gibt es ja erstmal nur noch eine
physikalische CAN-Schnittstelle.
Bruno Kempf schrieb:> Also kann ich davon ausgehen, dass ein HIGH Pegel an RXD in ein> rezessives Bit (entspricht ja einer 1) und ein LOW Pegel in ein> dominantes Bit umgesetzt wird? Ohne irgendwelche zusätzliche Aktionen,> die im Controller oder Transceiver ablaufen?
Low ist dominant, das ist richtig. "TxD" bezieht sich auf den
Controller, d.h. das ist der Eingang zum Senden, der mit dem
gleichnamigen Ausgang des Controllers verbunden wird. Da beim Layout
trotzdem gerne Unfälle passieren, sehen Profis zwei Null- bis 100
Ohm-Widerstände vor, die dann kurz vor Serie entfallen können.
Der Transceiver setzt nur die Spannung um und tut nichts am Timing. Es
gibt allerdings ein paar Schutzfunktionen, die dazu führen, dass er bei
arg unplausiblen Signalen abschaltet. Bitstuffing, Message Filter,
Acknowledge etc macht alles der CAN-Controller im Microcontroller, und
zwar für Dich transparent. D.h. wenn der richtig eingestellt ist,
brauchst Du Dich um nichts zu kümmern. Die SW schreibt ihre Bytes in die
Mailbox und die Message geht raus, bzw wenn eine zum Filter passende
reinkommt, wird die in der Mailbox abgelegt und ein Interrupt ausgelöst.
Lowspeed-Can ist in der Tat selten geworden. Er hat aber den Vorteil,
dass er auch mit einer durchgescheuerten Leitung noch funktioniert und
man mit der Terminierung nochmehr Blödsinn anstellen kann, bevor die
Bitfehlerrate signifikant ansteigt.