Skip to content

Commit

Permalink
Mise à jour de la documentation CAN.
Browse files Browse the repository at this point in the history
  • Loading branch information
BloodFutur committed Dec 31, 2023
1 parent 6cf3121 commit 67b8b0c
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 51 deletions.
Binary file added src/images/info/CAN_BUS_STMs.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
134 changes: 83 additions & 51 deletions src/informatique/communication.md
Original file line number Diff line number Diff line change
@@ -1,103 +1,135 @@
# Communication avec le hardware

Ça marche pas :(
La communication avec le hardware est essentielle pour assurer le bon fonctionnement du robot. Cette section se concentre sur le bus CAN, un choix stratégique en raison de sa robustesse et de sa rapidité.

## Bus CAN
## Qu'est ce que le Bus CAN ?

Le bus CAN est un bus de communication série qui permet de communiquer avec les différents modules du robot. On a choisi ce bus car il est très utilisé dans l'industrie et est donc très robuste. Il est aussi très rapide et permet de communiquer avec plusieurs modules en même temps.
Le bus CAN (Controller Area Network) est un bus de communication série largement utilisé dans l'industrie. Il offre une communication rapide et fiable avec plusieurs modules simultanément. Pour en savoir plus sur son fonctionnement, consultez ces documents:
- [Description générale du fonctionnement](https://www.ti.com/lit/an/sloa101b/sloa101b.pdf?ts=1633140726383&ref_url=https%3A%2F%2Fwww.google.com%2F)
- [tutoriel explicatif](https://www.csselectronics.com/pages/can-bus-simple-intro-tutoria).

## Ressources de Notion à trier

# CAN Bus
## Matériel utilisé pour le bus CAN

Ressources pour apprendre plus:
CAN Transceiver : Composant intermédiaire pour produire les signaux CANL et CANH et les transporter dans le réseau.

- Description générale du fonctionnement: [https://www.ti.com/lit/an/sloa101b/sloa101b.pdf?ts=1633140726383&ref_url=https%3A%2F%2Fwww.google.com%2F](https://www.ti.com/lit/an/sloa101b/sloa101b.pdf?ts=1633140726383&ref_url=https%253A%252F%252Fwww.google.com%252F)

si ça marche pas, vérifier qu’il y a bien deux dispositifs sur le bus
On utilise 2 modèles. On utilise le **MCP2515** et le **MCP2551**.

[CAN Bus Explained - A Simple Intro [2022 | The #1 Tutorial]](https://www.csselectronics.com/pages/can-bus-simple-intro-tutorial)

[GitHub - TVAROBOT/STM32: CAN bus on STM32F103C8T6 "Blue pill" uVision and CubeMX](https://github.com/TVAROBOT/STM32)
Datasheets:
- [Datasheet MCP2551](https://ww1.microchip.com/downloads/en/DeviceDoc/20001667G.pdf)
- [Datasheet MCP2515](https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf)

More information:
### Différence entre MCP2515 et MCP2551

[CAN Bus](../ToDo%20d9dc46c3b25c4135a14d9b95735317f5/Decide%20communication%20protocol%20d89cb22bfdd24c7198646a51b15ae670/CAN%20Bus%20b5e77c9cfda440c08deaae066f118232.md)
Le **MCP2515** est un contrôleur CAN qui permet de communiquer avec le bus CAN via SPI. Il est utilisé pour envoyer et recevoir des messages CAN. Il est connecté à la Raspberry Pi via SPI.

Ne pas oublier de mettre un bouchon d'impédance (50 OU 120 Ohm) en fin du cable CAN
Le **MCP2551** est un transceiver CAN plus simple qui permet de convertir les signaux TX et RX en signaux CANH et CANL. Il est compris dans le MCP2515 mais on l'utilise aussi pour communiquer avec la STM32.

**PARTIE ÉLÉCTRONIQUE**
## Utilisation du bus CAN

CAN transreceiver: Composant intermédiaire pour produire les signaux CANL et CANH et les transporter dans le réseau. Notre modèle est le **MCP2551**
### Paramètres d'alimentation du bus

[](https://ww1.microchip.com/downloads/en/DeviceDoc/20001667G.pdf)
- Alimentation : **5V**
- Courant : 100mA (en mémoire dans M3)
- Ne pas oublier de mettre un bouchon d'impédance (50 OU 120 Ohm) en fin du cable CAN

Pour changer le slope-rate on change la valeur de R connecter sur RS
### Connexion du MCP2551 (Pour STM32)

![Connexion MCP2551](../images/info/CAN_BUS_MCP2551_Connexion.png)

SI el mensaje no es recibido por una STM32 el envio se bloquea y continua. Establecer un contador/limite maximo de reenvio de mensajes
**Réglage du slope-rate** :

A hacer:
Pour changer le slope-rate on change la valeur de R connecter sur RS.

- [ ] Reconocer IDs
- [ ] Interrupción
- [ ] Prioridad mensajes diferente
- [ ] Contador máximo para liberar CAN

paramètres alim bus : 5V, 100mA (en mémoire dans M3)
### Connexion du MCP2515 (SPI+CAN -> Raspberry Pi)

# CAN transreceiver
Connecter les pins du transceiver SI, SO, SCK, INT et CS comme ci dessous.

ALIM EN 5 V
:warning: Le VCC doit être sur du **5V** contrairement à ce schéma, ne pas oublier le ground.

datasheet : [https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf](https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf)
![Connexion entre Raspberry et transreceiver](../images/info/CAN_Raspberry_Transreceiver_Connexion.png)

![CAN Transreceiver pinout](../images/info/CAN_Transreceiver_Pinout.png)

ports SPI : SCK = clock
### Exemple de connexion entre deux STM32

SI =MOSI
⚠️
Regarder plus en détail la page dédiée à la communication entre STM32 pour plus d'informations.

SO = MISO
![Connexion entre deux STM32](../images/info/CAN_BUS_STMs.jpg)

CS = SS / CS

# SPI can et transreceiver
## Tutoriel pour la mise en place du bus CAN sur la Raspberry Pi

# Utilisation :
**Liste des étapes à suivre**:

NE PAS OUBLIER DE CONNECTER LE GROUND DE LA RASPBERRY AU GROUND DU CIRCUIT
- [ ] Faire le circuit de la figure ci-dessus entre deux STM32
- [ ] S'assurer que le bus CAN marche entre les deux STM32
- [ ] Connecter le MCP2515 à la Raspberry Pi comme sur la figure ci-dessus
- [ ] Installer les paquets nécessaires sur la Raspberry Pi
- [ ] Vérifier que l'interface can0 est bien présente au démarrage de la raspi avec `ifconfig`
- [ ] Vérifier que la Raspberry Pi reçoit bien les messages envoyés par les STM32 et vice-versa

CAN TRANSRECEIVER EN 5V!!
### Liste des potentiels problèmes

Brancher les pin du transreceiver SI, SO, SCK, INT et CS comme ci dessous
- [ ] Vérifier que le bus CAN est bien alimenté (bouton on/off et branchements…)
- [ ] Vérifier que les fils sont bien branchés
- [ ] Vérifier que les résistances de terminaison sont bien présentes
- [ ] Vérifier que les ground sont bien connectés entre eux
- [ ] Vérifier que le montage est correct
- [ ] Vérifier que les STM32 sont bien alimentés
- [ ] Vérifier que les STM32 sont bien programmés pour envoyer et recevoir des messages CAN
- [ ] Vérifier que les signaux TX et RX sont bien connectés aux pins RX et TX des STM32
- [ ] Vérifier que les signaux sont bien présents sur le BUS CAN (oscilloscope ou serial analyzer)
- [ ] Vérifier que les bonnes données sont envoyées et reçues par les STM32
- [ ] Vérifier que les signaux envoyés par les STM32 sont bien reçus par la Raspberry Pi
- [ ] Vérifier que les modules SPI et CAN sont bien activés sur la Raspberry Pi
- [ ] Vérifier que les paquets nécessaires sont bien installés sur la Raspberry Pi
- [ ] Vérifier que l'interface can0 est bien présente au démarrage de la raspi avec `ifconfig`
- [ ] Vérifier que la Raspberry Pi reçoit bien les messages envoyés par les STM32 et vice-versa

Le VCC doit être sur du 5V contrairement à ce schéma, ne pas oublier le ground
## Vérification du bon fonctionnement du bus CAN sur la Raspberry Pi

![Connexion entre Raspberry et transreceiver](../images/info/CAN_Raspberry_Transreceiver_Connexion.png)
### Vérification de l'interface can0:

Vérifier que l’interface can0 est bien présente au démarrage de la raspi avec ifconfig
- Vérifier que l’interface can0 est bien présente au démarrage de la raspi avec `ifconfig`
- On peut aussi vérifier dans les messages de démarrage du kernel que tout s’est bien passé avec `dmesg | grep can` et `dmesg | grep mcp`
- Sinon, redémarrer la raspi `sudo reboot`

On peut aussi vérifier dans les messages de démarrage du kernel que tout s’est bien passé avec `dmesg | grep can` et `dmesg | grep mcp`
### Format des messages

Sinon, redémarrer la raspi
- `candump any` pour recevoir (en boucle)
- `cansend can0 000#00.00.00.00.00.00.00.00` pour envoyer (attention, données en hexa).

SInon, vérifier que le can est bien alimenté (bouton on/off et branchements…)
## Documentation diverse

format des messages :
Explorez ces ressources pour une compréhension plus approfondie du bus CAN et de son utilisation.

candump any pour recevoir (en boucle)
- [Guide rapide](https://forums.raspberrypi.com/viewtopic.php?t=141052)

cansend can0 000#00.00.00.00.00.00.00.00 (attention, données en hexa) pour envoyer
- [Adding CAN to the Raspberry PI](https://www.beyondlogic.org/adding-can-controller-area-network-to-the-raspberry-pi/)
- [How to connect Raspberry Pi to CAN bus](https://projects-raspberry.com/how-to-connect-raspberry-pi-to-can-bus/)
- [ Not able to setup can0. - Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?t=311606)

# Doc diverse et variée :
- [MCP251x failes setup CAN-bus communication with error=110 · Issue #4183 · raspberrypi/linux](https://github.com/raspberrypi/linux/issues/4183)

[[quick-guide] CAN bus on raspberry pi with MCP2515 - Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?t=141052)

j’ai essayé de suivre ça, mais ce fut un échec (can-utils)
## Notes
- Description générale du fonctionnement: [https://www.ti.com/lit/an/sloa101b/sloa101b.pdf?ts=1633140726383&ref_url=https%3A%2F%2Fwww.google.com%2F](https://www.ti.com/lit/an/sloa101b/sloa101b.pdf?ts=1633140726383&ref_url=https%253A%252F%252Fwww.google.com%252F)

si ça marche pas, vérifier qu’il y a bien deux dispositifs sur le bus

[CAN Bus Explained - A Simple Intro [2022 | The #1 Tutorial]](https://www.csselectronics.com/pages/can-bus-simple-intro-tutorial)

[GitHub - TVAROBOT/STM32: CAN bus on STM32F103C8T6 "Blue pill" uVision and CubeMX](https://github.com/TVAROBOT/STM32)

[CAN Bus](../ToDo%20d9dc46c3b25c4135a14d9b95735317f5/Decide%20communication%20protocol%20d89cb22bfdd24c7198646a51b15ae670/CAN%20Bus%20b5e77c9cfda440c08deaae066f118232.md)

datasheet : [https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf](https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf)

[[quick-guide] CAN bus on raspberry pi with MCP2515 - Raspberry Pi Forums](https://forums.raspberrypi.com/viewtopic.php?t=141052)

fonctionne!! interface can0 dans le fichier de configuration : se met en place au démarrage

[Adding CAN to the Raspberry PI](https://www.beyondlogic.org/adding-can-controller-area-network-to-the-raspberry-pi/)

Expand Down

0 comments on commit 67b8b0c

Please sign in to comment.