Forum: Mikrocontroller und Digitale Elektronik nucleo64 - CAN-Bus will nicht.


von Thomas T. (runout)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde,

ich bin etwas angefressen...
Ich habe ein NUCLEO-L476RG-Board (STM32L476RG) und möchte über CAN 
kommunizieren, aber ER will nicht.

Setup:
Nucleo64-Board mit CAN-Transceiver (kleines Chinaboard mit sn65hvd230), 
PCAN-USB (mit PCanView) und PCAN-Diag.
Die Konfig wurde mit CubeMx "zusammengeklickt".
Terminierung 58Ohm.

Wenn alle o.g. Teinehmer am CAN sind kann ich von PCanView senden
und PCAN-Diag empfängt die Message.

Wenn PCAN-Diag abgestöpselt geht der CAN beim ersten Senden sofort auf 
BusHeavy. (sieht also keinen zweiten Teilnehmer mehr)

Die Verdrahtung sollte OK sein.
PA12=CAN1_Tx=Morphhaeder CN10:Pin12
PA11=CAN1_Rx=Morphhaeder CN10:Pin14

Jetzt bin ich am Ende mit meinem Latein...
Der STM32L476RG hat 80MHz HCLK, prescaler ist 10, für 125ns Zeitquantum.
CAN-Speed soll 500kBit/s sein.
Der Resultcode für "HAL_CAN_Transmit" und "HAL_CAN_Receive" ist immer 
HAL_TIMEOUT


Wäre für jeden Tipp dankbar.


Grüße Runout

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Terminierung vergessen?

von Karl (Gast)


Lesenswert?

Wieviele Teilnehmer sind am Bus? Wenn außer µC und PCAN nichts ist, kann 
auch keiner ACKen und der µC MUSS aufhören.

von Thomas T. (runout)


Angehängte Dateien:

Lesenswert?

@Uwe: Terminierung 58Ohm
@Karl: der PCAN-USB ist ein vollwertiger Teilnehmer,
er steht NICHT auf "listen only".

Meine Frage war: ist das Software-Setting OK (Timing etc.)

Überlege schon, ob ich einen MCP2551 probehalber dranhänge.
(wenn der 3V3-tolerant ist)
Von den China-Boards (sn65hvd230) habe ich drei Stück,
die können nicht alle kaputt sein...

Wenn Interesse besteht kann ich das ganze Miniprojekt
mal hier reinstellen.

Kann man mit dem Oszi die TTL-Pegel von PA11/PA12 messen?

bitte um weiteres Brainstorming

runout

: Bearbeitet durch User
von Karl (Gast)


Lesenswert?

Sorry. Dachte PCAN-Diag wäre nur eine SW für den PCAN Adapter.

Takt: Keine Ahnung, bin zu faul das nachzurechnen. Bei mir sieht es so 
aus STM32F4 mit 168 MHz):
1
/* CAN1 init function */
2
void MX_CAN1_Init(void) {
3
   hcan1.Instance = CAN1;
4
   hcan1.Init.Prescaler = 6;
5
   hcan1.Init.Mode = CAN_MODE_NORMAL;
6
   hcan1.Init.SJW = CAN_SJW_1TQ;
7
   hcan1.Init.BS1 = CAN_BS1_10TQ;
8
   hcan1.Init.BS2 = CAN_BS2_3TQ;
9
   hcan1.Init.TTCM = DISABLE;
10
   hcan1.Init.ABOM = ENABLE;
11
   hcan1.Init.AWUM = DISABLE;
12
   hcan1.Init.NART = DISABLE;
13
   hcan1.Init.RFLM = DISABLE;
14
   hcan1.Init.TXFP = ENABLE;
15
   HAL_CAN_Init(&hcan1);
16
}
Der Instanzname ist Richtig? "CAN" statt "CAN1"?
Warum ist dein ABOM aus? Sonst musst Du das alles von Hand machen.
TXFP ist nur für spezielle Sachen relevant.

Was ich sonst noch habe ist der PullUp am RX-Pin aktiv. Sonst verrent 
sich der CAN-Controller beim Aufstart schon, wenn am Bus nichts los ist.

Oszi schon an CAN H und L gehabt? Fehlerursache No. 1 Verpolung, No. 2 
fehlernder Abschluss.

Transceiver hat Enable/VIO/Sleep etc. und wird richtig bedient?

Welchen Zustand hat der CAN Controller im STM32? Ist die Configuration 
abgeschlossen? Filter richtig eingestellt (Da ist die Software doof 
geschrieben, Standard-IDs muss man noch zurechtrücken)?

von Thomas T. (runout)


Lesenswert?

Hallo Karl,

aus stm32l476xx.h:
#define CAN                 ((CAN_TypeDef *) CAN1_BASE)
#define CAN1                ((CAN_TypeDef *) CAN1_BASE)

ist also egal...

hcan1.Init.ABOM - werde ich ausprobieren

in HAL_CAN_MspInit() steht:

    /**CAN1 GPIO Configuration
    PA11     ------> CAN1_RX
    PA12     ------> CAN1_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

sieht so aus, als hätte PA11 keinen Pullup.
R-Output = High = rezessiv

PCAN-Diag ist (u.a.) ein Oszi, aber da sieht man nix.
(wenn ich von PCAN-USB aus sende kommt alles richtig an, der µC hingegen 
ist stumm und taub...)

Danke für die Tipps

von Thomas T. (runout)


Angehängte Dateien:

Lesenswert?

So, Problem gelöst...

Die sn65hvd230-Baugruppe war's.
Schaltplan siehe oben.

Jetzt werkelt der gute alte MCP2551 mit 5V.
Der "Rx" ist über einen 1k-Angstwiderling auf den PA11 vom Nucleo 
geschaltet.
ob wohl die Eingänge 5V-tolerant sind.

Warum das China-Geraffel nicht geht ist unklar.
Die Pegel sollten lt. Datenblatt passen.
5€ das Stück, was solls...

Grüße Runout

von Nik (Gast)


Lesenswert?

CAN ist mit 120R terminiert, oder Irre ich mich?

von Thomas T. (runout)


Lesenswert?

ja, mit 120Ohm an jedem Ende

von me- (Gast)


Lesenswert?

Masse verbunden?

von Thomas T. (runout)


Lesenswert?

Hallo Fangemeinde (Nik, me-),

DAS PROBLEM IST GELÖHÖST...
siehe oben.

Danke für die Hilfe.

Runout

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.