Discussions Générales > Bus CAN

Les cartes CAN en 8MHz

(1/2) > >>

Jean-Luc:
Comme je suis en train de faire ma propre bibliothèque pour le 2515, je regarde en détails son fonctionnement ainsi que les normes et recommandations pour la mise en œuvre d'un bus CAN.

Via la configuration on détermine le débit du bus.

La durée d'un bit est quantifiée en TQ (Time Quantum). Cette durée est divisées en 4 segments successifs dans le temps :
1 - Le segment de synchronisation (SyncSeg) qui est de durée fixe : 1 TQ
2 - Le segment de propagation (PropSeg) qui permet de tenir compte du temps de propagation du signal dans le bus. Il peut être programmé de 1 à 8 TQ
3 - Le segment de phase 1 (PS1), également programmable entre 1 et 8 TQ
4 - Le segment de phase 2 (PS2), programmable entre 2 et 8 TQ (plus loin dans la datasheet, c'est de 1 à 8, enfin passons)

Par ailleurs il y a des contraintes :
a - PropSeg + PS1 ≥ PS2
b - PropSeg + PS1 ≥ 2

l'échantillonnage du bit présent sur le bus est réalisé à la fin de PS1 et doit se situé entre 60 et 70% de la durée du bit d'après Microchip mais pour CANOpen et DeviceNet c'est 87,5 et la norme ARINC dit 75%.

TQ est dérivé de l'oscillateur dédié au 2515 (Fosc = 16MHz habituellement, 8MHz sur les cartes chinoises) via un Baud Rate Prescaler (BRP) sur 6 bits et qui peut donc avoir une valeur comprise entre 0 et 63 :

TQ = 2 x (BRP + 1) / Fosc

Donc avec Fosc = 16MHz et BRP = 0 (division minimum), on a TQ = 125µs et pour faire un bit, il faut 8 x TQ

Par exemple, la bibliothèque mcp_can utilise les valeurs suivantes pour un bus à 1Mbits :

BRP = 0 (TQ = 125µs)
PropSeg =  1 TQ (0)
PS1 = 3 TQ (2)
PS2 = 3 TQ (2)

Avec le SyncSeg qui dure 1 TQ, on a bien 8 TQ. L'échantillonnage est à 5/8 = 62,5%

Avec un carte à 8MHz, on a 4 x TQ de 250µs pour faire la durée du bit. Comme le SyncSeg prend 1 TQ, il en reste 3 (PropSeg = 1, PS1 = 1 et PS2 = 1) et ça coince car à priori PS2 est au mini à 2 TQ. Je ne suis pas persuadé qu'on puisse atteindre 1Mb avec un quartz à 8MHz.

Dominique:
Bonjour Jean-Luc,

Excellente contribution, en vue d'établir une bibliothèque de référence pour Locoduino, peut-être ?

J'ai remarqué que plusieurs versions circulent et des mises à jour de la version citée dans l'article sur le CAN provoquent des questions.

Je vais tâcher de suivre au plus près, merci  ;D

Amicalement
Dominique

Jean-Luc:
Je confirme que PS2 doit être compris entre 2 et 8. En effet, PS2 peut être raccourcis de 1 (ou plus si sa valeur est > 2) pour synchroniser les nœuds. Comme il ne peut pas devenir nul, il doit au minimum être à 2

Par conséquent, on ne peut pas configurer le bus en 1Mb avec des cartes dont le quartz est à 8MHz

Dominique:
Mais à 500kb/s c'est peut-être possible ?

J'ai réglé mon bus à 500kb/s et j'en suis satisfait. Pour le moment je n'utilise que des cartes Locoduino à 16 MHz.

Il faudrait que j'essaye d'y connecter une des petites cartes à 8Mhz et voir si ça marche.
Je n'ai juste pas assez de temps en ce moment.

Jean-Luc:
À 500kb, pas de soucis, c'est comme 1Mb avec un quartz à 16MHz  :)

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique