Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

Jag håller på att kommunicera med en motor(ECU) som drivs med CAN-bus protokollet SAE J1939.
Jag har tidigare lyckats kommunicera med motorn via MPC2515 + TJA1050 utan problem. Här användes ett 120 Ohms motstånd som termineringsmotstånd
MPC2515 och TJA1050 transmitter drevs med 5.0V.
MCP2515-CAN-Bus-Module-Schematic.jpg
Nu använder jag TCAN334 och den drivs med 3.3V.
Skärmklipp.PNG
Med detta elschema ovan så kan jag läsa CAN-bus signaler. Inga problem. Men jag kan inte skriva CAN-bus signaler. Jag har korrekt baudrate på 250 kB/s.
Skärmklipp.PNG
Då är min fråga:
Hur vanligt är det att man kan läsa CAN-bus meddelanden, men inte skriva så att andra ECU:er förstår?

För att skriva ett meddelande så använder jag denna kod

Kod: Markera allt

        /* Skapa ID och DATA */
        uint8_t TxData[8];
        uint32_t ID = .....
        
        /* Skriv meddelande */
	CAN_TxHeaderTypeDef TxHeader;
	TxHeader.DLC = 8;											/* Here we are only sending 8 bytes */
	TxHeader.RTR = CAN_RTR_DATA;								/* Data frame */
	TxHeader.IDE = CAN_ID_EXT;									/* We want to send an extended ID */
	TxHeader.TransmitGlobalTime = DISABLE;
	TxHeader.ExtId = ID;
	TxHeader.StdId = 0x00; 										/* Not used */
         uint32_t TxMailbox;
	HAL_CAN_AddTxMessage(can_handler, TxHeader, TxData, &TxMailbox);
Jag har själv kollat med intern feedback på CAN- bus och det är inget fel på mina meddelanden.
Så vad tror ni det kan vara?
Jag kan ju förstås skicka CAN-bus meddelanden. Det är bara att andra enheten inte uppfattar meddelanden.
Tror ni det kan vara för låg spänning?


Så jag tog och mätte upp CAN+ and CAN- hos ECU:n
CAN+
20210722_164108(1).jpg
CAN-
20210722_164308.jpg

Och jag mätte upp CAN+ och CAN- hos min TCAN334:
CAN+
20210722_165347.jpg
CAN-
20210722_165406.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hummel
Inlägg: 2375
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av hummel »

Byt hastighet till 250 kb/s istället.
Användarvisningsbild
Klas-Kenny
Inlägg: 11541
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av Klas-Kenny »

10 nF på signalledningarna belastar dessa tämligen hårt. Vad är syftet med så stora kondingar där?

Jag hade provat att ta bort dem först.
Du får ju ingen Ack på dina paket, så förmodligen är någonting elektriskt fel.

Kan vara bra med en liten konding på CANH och CANL för EMC, men de bör vara sådär 1000ggr mindre.
De på Tx och Rx ser jag inget positivt alls med, skapar bara stora strömspikar vid varje omslag mellan hög och låg vilket snarare skapar EMC-problem.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

hummel skrev: 22 juli 2021, 23:35:40 Byt hastighet till 250 kb/s istället.
Har jag inte 250 kB/s i baudrate redan?
Klas-Kenny skrev: 23 juli 2021, 09:20:17 10 nF på signalledningarna belastar dessa tämligen hårt. Vad är syftet med så stora kondingar där?

Jag hade provat att ta bort dem först.
Du får ju ingen Ack på dina paket, så förmodligen är någonting elektriskt fel.

Kan vara bra med en liten konding på CANH och CANL för EMC, men de bör vara sådär 1000ggr mindre.
De på Tx och Rx ser jag inget positivt alls med, skapar bara stora strömspikar vid varje omslag mellan hög och låg vilket snarare skapar EMC-problem.
Hur kan du se om jag får ACK eller inte?

Jag vet inte hur stora kondensatorerna ska vara. Det stod inte i databladet. Det stod bara "Ha några kondensatorer här"

Okej. Jag ska testa ta bort 10nF kondensatorerna på RX och TX ledningarna.

Jag har ju split terminal och jag har alltid kört med standard terminal för min ECU.
Jag fick höra att split terminal är något bättre. Men jag har ju möjligheten att ändra på detta igenom att ta bort lite kondensatorer + några resistorer.

Eventuellt har jag ett STM32 kort med CAN uppställning som inte har några skydd, kondensatorer osv. Bara 120 ohms standard terminal.
Användarvisningsbild
Klas-Kenny
Inlägg: 11541
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av Klas-Kenny »

Här kan man se ackarna på de första två bilderna:
Skärmbild 2021-07-23 164947.png
Dessa pulser finns inte i de två senare bilderna. Där är det bara "blankt" (flytande nivå)

I termineringen är 10nF helt ok. Där kan man ha mer också om man så vill.
Men kondingarna som sitter rakt mellan CANH/CANL och jord, bör snarare vara i storleksordningen 10-50 pF.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46292
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av TomasL »

Jag vet inte hur stora kondensatorerna ska vara. Det stod inte i databladet. Det stod bara "Ha några kondensatorer här"
Det får man räkna på, eftersom de skall fungera som transientskydd.

I ditt första schema använder du ett komplett CAN-Interface (MCP2515).
I ditt andra schema tolkar jag det som att du använder din processor direkt, frågan är då om du har implementerat CAN-interfacet på rätt sätt i din uC.

Vad har du gjort med pinne 5 och 8, de finns inte med i din symbol.
I symbolen skall du ha med alla pinnar, även sådana som inte används.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

Klas-Kenny skrev: 23 juli 2021, 16:52:22 Här kan man se ackarna på de första två bilderna:
Skärmbild 2021-07-23 164947.png

Dessa pulser finns inte i de två senare bilderna. Där är det bara "blankt" (flytande nivå)

I termineringen är 10nF helt ok. Där kan man ha mer också om man så vill.
Men kondingarna som sitter rakt mellan CANH/CANL och jord, bör snarare vara i storleksordningen 10-50 pF.
Okej. Jadu, jag vet inte hur man får till ett ACK via CAN-bus. Är inte detta något som mjukvaran styr?
Jag trodde att ett ACK är bara till för att få en bekräftelse på något. I SAE J1939 så används ACK om man t.ex. skickar en förfrågan på ett PGN som inte finns. Då kan man få ett ACK t.ex. "Finns inte" eller "Upptagen".

Jag ska testa använda mitt STM32 kort som inte har något skydd alls.
TomasL skrev: 23 juli 2021, 17:22:49
Jag vet inte hur stora kondensatorerna ska vara. Det stod inte i databladet. Det stod bara "Ha några kondensatorer här"
Det får man räkna på, eftersom de skall fungera som transientskydd.

I ditt första schema använder du ett komplett CAN-Interface (MCP2515).
I ditt andra schema tolkar jag det som att du använder din processor direkt, frågan är då om du har implementerat CAN-interfacet på rätt sätt i din uC.

Vad har du gjort med pinne 5 och 8, de finns inte med i din symbol.
I symbolen skall du ha med alla pinnar, även sådana som inte används.
MCP2515 är bara en SPI till CAN_TX och CAN_RX och TJA1050 är bara en CAN-transmitter.

Ja. Jag har CAN inbyggt i STM32F3-serie.

Pinne 5 och pinne 8 är NC på min. Jag har en TCAN332. Har jag sagt något annat så är det fel.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

Tackar! Det ska jag göra. Återkommer!
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46292
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av TomasL »

Nu använder jag TCAN334 och den drivs med 3.3V.
Men pinnarna bör nog vara med i alla fall.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

Dom är med på riktigt i alla fall :)

Det finns en funktion i KiCAD där man kan gömma alla NC pinnar.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46292
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av TomasL »

Väldigt dumt att gömma pinnar, för helt plötsligt missar man något vitalt.
Ta fram dem, och anslut dem till jordplanet.
DanielM
Inlägg: 2312
Blev medlem: 5 september 2019, 14:19:58

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av DanielM »

Men står det verkligen att NC ska anslutas till gjordplanet? Jag tror snarare att NC är internt ansluten till Vss.

Angående CAN-bus CAN-ramen som man skickar.

I STM32 så skickar man sin data och för att berätta för STM32's interna CAN-bus modul vad det är för typ av data och vilket ID det är t.ex. om det är utökat ID eller standard ID. STM32 har CAN 2.0B som standard. Det finns säkert CAN FD också på övriga STM32:er.

Kod: Markera allt

/**
  * @brief  CAN Tx message header structure definition
  */
typedef struct
{
  uint32_t StdId;    /*!< Specifies the standard identifier.
                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */

  uint32_t ExtId;    /*!< Specifies the extended identifier.
                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */

  uint32_t IDE;      /*!< Specifies the type of identifier for the message that will be transmitted.
                          This parameter can be a value of @ref CAN_identifier_type */

  uint32_t RTR;      /*!< Specifies the type of frame for the message that will be transmitted.
                          This parameter can be a value of @ref CAN_remote_transmission_request */

  uint32_t DLC;      /*!< Specifies the length of the frame that will be transmitted.
                          This parameter must be a number between Min_Data = 0 and Max_Data = 8. */

  FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start
                          of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7].
                          @note: Time Triggered Communication Mode must be enabled.
                          @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent.
                          This parameter can be set to ENABLE or DISABLE. */

} CAN_TxHeaderTypeDef;
Man skickar ett meddelande så här.
&hcan är CAN-modulens address.
TxHeader kan se ut ungefär så här.

Kod: Markera allt

	CAN_TxHeaderTypeDef TxHeader;
	TxHeader.DLC = 3;											/* Here we are only sending 3 bytes */
	TxHeader.RTR = CAN_RTR_DATA;								/* Data frame */
	TxHeader.IDE = CAN_ID_EXT;									/* We want to send an extended ID */
	TxHeader.TransmitGlobalTime = DISABLE;
	TxHeader.ExtId = ID;
	TxHeader.StdId = 0x00; 										/* Not used */
TxData är alltså en uint8_t array på DLC antal element.
&TxMailbox är alltså en pekare till en uint8_t variabel som är till a vart adressen till meddelandet sparas någonstans.

Kod: Markera allt

HAL_CAN_AddTxMessage(&hcan, TxHeader, TxData, &TxMailbox);
Så jag ser inget att man kan ställa in ACK här. Så jag antar att ST's egna CAN-modul ska skicka ett ACK?
hummel
Inlägg: 2375
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av hummel »

[/quote]

Har jag inte 250 kB/s i baudrate redan?

[/quote]
Nej, det är skillnad på bit och byte!
Användarvisningsbild
Klas-Kenny
Inlägg: 11541
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Jag kan läsa CAN-bus från ECU, men inte skriva CAN-bus meddelanden till ECU?

Inlägg av Klas-Kenny »

Det normala är att CAN-kontrollerns hårdvara skickat ack, på varje paket den ser på bussen. Detta brukar ske helt automatiskt efter att ha initierat CAN-kontrollern.

Att du inte får någon Ack på det du skickar tyder på att ingen annan enhet på bussen uppfattar paketen.
Skriv svar