Hi,
I'm trying to use CAN with some less-common baud rates but I'm not
sure if my calculations are right. Crystal is 12MHz, using a 5x multiplier for a
frequency of 60MHz. VPB divider is 1, so peripherals run at 60MHz.
I've tested 500kbps and 250kbps, but would like to add 33kbps, 95kbps and
125kbps. I tried setting these rates but it keeps throwing errors onto the
network.
Good:
250 kbps: C2BTR = 0x3E000C;
500 kbps: C2BTR = 0x3E0005;
Giving errors:
33.3 kbps: C2BTR = 0x3E005A;
95 kbps: C2BTR = 0x3E0020;
125 kbps: C2BTR = 0x3E0018;
Is there a glaring error here? I know I'm not going to be able to nail the
frequency 100%, but hope to come close enough.
Thanks!
LPC2129 - Setting CAN Baud rate & Getting Errors
Started by ●May 21, 2014
Reply by ●May 21, 20142014-05-21
> Hi,
>
> I'm trying to use CAN with some less-common baud rates but I'm not sure if
> my calculations are right. Crystal is 12MHz, using a 5x multiplier for a
> frequency of 60MHz. VPB divider is 1, so peripherals run at 60MHz.
>
> I've tested 500kbps and 250kbps, but would like to add 33kbps, 95kbps and
> 125kbps. I tried setting these rates but it keeps throwing errors onto the
> network.
>
> Good:
> 250 kbps: C2BTR = 0x3E000C;
> 500 kbps: C2BTR = 0x3E0005;
>
> Giving errors:
> 33.3 kbps: C2BTR = 0x3E005A;
> 95 kbps: C2BTR = 0x3E0020;
> 125 kbps: C2BTR = 0x3E0018;
>
We are using both CAN modules in the LPC1778 so I guess that the same CAN
IP module is used in the LPC2129.
The right settings depend on the bit quanta and the sample point you are
using . Normally the bit quanta vary in between 8 and 20 (some
are using up to 24). The sample point should be somewhere between 75 %
and 90 % of the bitquanta for good results. A spreadsheet will help you
to find out the right settings for the CAN bit timing register.
The input parameters are the pclk, the requested CAN bitrate and the
bitquanta.
Just a hint : I would not choose a very high pclk for the CAN bitrate
timing. You might not achieve a pretty low CAN bitrate result like 10 Kbt/s
or even 5 Kbit/s if you would like to apply them in the future.
Hope this will give you an idea.
Br,
Armand
Posted by: a...@mini-amd.org
>
> I'm trying to use CAN with some less-common baud rates but I'm not sure if
> my calculations are right. Crystal is 12MHz, using a 5x multiplier for a
> frequency of 60MHz. VPB divider is 1, so peripherals run at 60MHz.
>
> I've tested 500kbps and 250kbps, but would like to add 33kbps, 95kbps and
> 125kbps. I tried setting these rates but it keeps throwing errors onto the
> network.
>
> Good:
> 250 kbps: C2BTR = 0x3E000C;
> 500 kbps: C2BTR = 0x3E0005;
>
> Giving errors:
> 33.3 kbps: C2BTR = 0x3E005A;
> 95 kbps: C2BTR = 0x3E0020;
> 125 kbps: C2BTR = 0x3E0018;
>
We are using both CAN modules in the LPC1778 so I guess that the same CAN
IP module is used in the LPC2129.
The right settings depend on the bit quanta and the sample point you are
using . Normally the bit quanta vary in between 8 and 20 (some
are using up to 24). The sample point should be somewhere between 75 %
and 90 % of the bitquanta for good results. A spreadsheet will help you
to find out the right settings for the CAN bit timing register.
The input parameters are the pclk, the requested CAN bitrate and the
bitquanta.
Just a hint : I would not choose a very high pclk for the CAN bitrate
timing. You might not achieve a pretty low CAN bitrate result like 10 Kbt/s
or even 5 Kbit/s if you would like to apply them in the future.
Hope this will give you an idea.
Br,
Armand
Posted by: a...@mini-amd.org
Reply by ●May 21, 20142014-05-21
Thanks Armand, I'll look into that. Unfortunately I'm locked into
these baud rates because I want to work with existing systems.
Seems like I should back out the settings from the known-good bauds and then check the baud rate and use the same quanta. I had tried to do that awhile back, but need to make sure my calculations are right!
Seems like I should back out the settings from the known-good bauds and then check the baud rate and use the same quanta. I had tried to do that awhile back, but need to make sure my calculations are right!
Reply by ●May 21, 20142014-05-21
On 21.05.2014 19:44, s...@gmail.com [lpc2000] wrote:
> Good:
> 250 kbps: C2BTR = 0x3E000C;
> 500 kbps: C2BTR = 0x3E0005;
I get an impression, that you forgot that the clock is divided with BRP
+ 1. So BRP in 250kbps should be (60MHz / 250kHz / 20) - 1 (where 20 is
the number of clocks in a bit from the C2BTR). That gives 0x3E000B. I
don't know why 250kbps is good but 500kbps seems to be accurate whereas
the other rates seems to contain the error.
--
Timo
Posted by: Timo
> Good:
> 250 kbps: C2BTR = 0x3E000C;
> 500 kbps: C2BTR = 0x3E0005;
I get an impression, that you forgot that the clock is divided with BRP
+ 1. So BRP in 250kbps should be (60MHz / 250kHz / 20) - 1 (where 20 is
the number of clocks in a bit from the C2BTR). That gives 0x3E000B. I
don't know why 250kbps is good but 500kbps seems to be accurate whereas
the other rates seems to contain the error.
--
Timo
Posted by: Timo
Reply by ●May 21, 20142014-05-21
Hello,
in addition to Armands post I would like to mention that you should
check first if
the time for one time quanta can be divided by the PCLK period,
without(!) fraction.
In your case you're using a number of 20 time quantas at a sample point
of 80%. Many
standards (CANopen or J1939) use sample points close to 87.5%. In our
systems we are
using the following setup:
0x002F0017, // 125 KBit/sec, 20 Tq, BRP = 24
0x002F000B, // 250 KBit/sec, 20 Tq, BRP = 12
0x002F0005, // 500 KBit/sec, 20 Tq, BRP = 6
Bitrates below 50 kBit/s are not possible with a CAN clock of 60 MHz,
because the
prescaler value is limited (BTW: please make sure that your CAN
transceiver can handle
bitrates below 50 kBit/s due to the "dominant bit timeout feature").
The bitrate 95 kBit/s is not possible with your settings, I calculated a
prescaler
value of 31.5789 (i.e. no fun at all for CAN to re-synchronize).
Best regards,
Uwe
---------------------------------
MicroControl GmbH & Co. KG
Lindlausstr. 2c, 53842 Troisdorf, Germany
Homepage: www.microcontrol.net
Facebook: www.facebook.com/MicroControl.net
Twitter : twitter.com/_microcontrol_
---------------------------------
in addition to Armands post I would like to mention that you should
check first if
the time for one time quanta can be divided by the PCLK period,
without(!) fraction.
In your case you're using a number of 20 time quantas at a sample point
of 80%. Many
standards (CANopen or J1939) use sample points close to 87.5%. In our
systems we are
using the following setup:
0x002F0017, // 125 KBit/sec, 20 Tq, BRP = 24
0x002F000B, // 250 KBit/sec, 20 Tq, BRP = 12
0x002F0005, // 500 KBit/sec, 20 Tq, BRP = 6
Bitrates below 50 kBit/s are not possible with a CAN clock of 60 MHz,
because the
prescaler value is limited (BTW: please make sure that your CAN
transceiver can handle
bitrates below 50 kBit/s due to the "dominant bit timeout feature").
The bitrate 95 kBit/s is not possible with your settings, I calculated a
prescaler
value of 31.5789 (i.e. no fun at all for CAN to re-synchronize).
Best regards,
Uwe
---------------------------------
MicroControl GmbH & Co. KG
Lindlausstr. 2c, 53842 Troisdorf, Germany
Homepage: www.microcontrol.net
Facebook: www.facebook.com/MicroControl.net
Twitter : twitter.com/_microcontrol_
---------------------------------