Can Bus High drop to around 0v and Low become around 4V when sending command

Thread Starter

maskjp

Joined Aug 24, 2022
3
Hi, I am trying to log can-bus data between a joystick and its command receiver. But I keep getting error frames from my logger. I checked the signal using an oscilloscope and found the signal was weird. When the bus is silent, the voltage is around 2.5V, which is correct. But when the command was sent, the can_H and can_L signals became between 3.8v to 0v. I think that's why my can-bus logger can't decode the signal. But the joystick receiver can receive the command correctly. There are only two nodes on this bus one is the joystick, and one is the joystick command receiver. I check the resistance, and it is 60 ohm. Does anyone know what can cause this problem? I attached one picture here. Screenshot 2022-08-24 133249.png
 

Ian0

Joined Aug 7, 2020
6,321
CANH should go from 2.5V to about 4.5V, and CANL should go from 2.5V to about 0.5V. They should be mirror images of each other.
There are some varieties of CAN (fault tolerant) where the recessive voltage isn't 2.5V.
Have you lost one connection?
 

Thread Starter

maskjp

Joined Aug 24, 2022
3
Hi, Ian0,

Thank you for the reply. No, I don't think I lost the connection. I use a splitter to split the signal. The document said the protocol is CANOpen, and the bitrate of the bus: is 250Kb/s. unnamed2.jpg
 

Papabravo

Joined Feb 24, 2006
19,329
If both the CAN lines do not return to the recessive level (≈Vcc/2) after the end of a message it means the bus is being held in the dominant state which means ERROR frame -- 7 consecutive dominant bits. All receivers that see an ERROR frame respond with their own ERROR frame. This will end quickly on a small network of 2 nodes, but maybe a bit longer on a network with 32 nodes.
 

Thread Starter

maskjp

Joined Aug 24, 2022
3
If both the CAN lines do not return to the recessive level (≈Vcc/2) after the end of a message it means the bus is being held in the dominant state which means ERROR frame -- 7 consecutive dominant bits. All receivers that see an ERROR frame respond with their own ERROR frame. This will end quickly on a small network of 2 nodes, but maybe a bit longer on a network with 32 nodes.
Hi, Papabravo,

Thanks for your reply! I am new to can-bus. When there's no message, both lines return to 2.5 v. But when there's a message, the standard can high is between 4 and 2.5 v. But the signal I got is between 4 to 0 v. Same thing happened with can high. I attached a more clear figure for your check. Thanks!Slide1.PNGSlide2.PNG
 

Papabravo

Joined Feb 24, 2006
19,329
The recessive level on the CAN bus with respect to the common ground for both signals is approximately Vcc/2, where Vcc is measured with respect to the ground on the transceiver chip. I can't read the legend on the screen shots, so they are not too much help to me. In a dominant bit CAN_H goes toward Vcc and CAN_L goes toward GND. In actual fact a CAN transceiver will set CAN_H a few tens of millivolts lower than CAN_L for a recessive bit, so there no mistaking the difference, CAN_H - CAN_L ≤ 0 Volts (differential). In the dominant state, CAN_H - CAN_L > 2 V (differential) at the receiver. If you see CAN_H going to GROUND or CAN_L going much above VCC/2, then you have a serious error that must be corrected before you can continue.

So here is a CAN debugging tip. Establish your device under development a lonely node on a properly terminated network. You can do this with a lone 60.4Ω resistor. Load up a frame to transmit and hit the send bit. The frame will go out on the wire and there will be no acknowledgement in the ACK slot and no ERROR frames, and the transmitter will retry FOREVER. Expand you scope display so you can see the individual bits of the message. Make sure dominant bits (0-bits in the data stream) look like they are supposed to as I described above. Make sure recessive bits (1-bits in the data stream) look like they are supposed to as I described above.

I have more but this will get you started.
 
Top