Robot_Principal_2024-2025/motion controller code/Readme.md

80 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Motion controler code for the RPI Pico (RP2040)
===============================================
This project is a motion controller firmware for the RPI Pico (RP2040), designed for plug-and-play use with modular code and a clear architecture.
I2C description
-----------------------------------------------
The robots I2C communication works as follows:
* Send the device address + R/W bit (to select read or write mode).
* Send the target register address (to read from or write to).
* Read or write the register data. Multiple registers can be read/written sequentially, with the address auto-incrementing after each operation.
This firmware is coded to be a slave when adressed. Its address is **0x09** which you can change if there is any conflict whit other hardware.
|Adress |R/W|Description |Encoding |
|-------|:-:|-------------------------------|:-----------------:|
| 0x00 | W | Speed motor 1 |**-128** - **127** |
| 0x01 | W | Speed motor 2 |**-128** - **127** |
| 0x02 | W | Speed motor 3 |**-128** - **127** |
| 0x03 | W | Speed motor 4 |**-128** - **127** |
| 0x04 | W | Servo 1 position selection | **0** - **1** |
| 0x05 | W | Servo 2 position selection | **0** - **1** |
| 0x06 | W | Servo 3 position selection | **0** - **1** |
| 0x07 | W | Servo 4 position selection | **0** - **1** |
Motors communication description
-----------------------------------------------
Motors are «connected» to their respective I2C buffer address.
To control a motor you need to write data to its adress of the form :
>```C
>int8_t speed;
>```
Value goes from **-128** to **127**.
Servo motors communication description
-----------------------------------------------
Servo motors are «connected» to their respective I2C buffer address.
To control a servo motor you need to write data to its adress of the form :
>```C
>uint8_t close;
>```
Value is 0 or 1 for the open pos or the close pos.
Pinout description
-----------------------------------------------
|Pin |Description |GPIO Type |
|----|----------------------------------|-----------|
| 0 | Motor1 Speed | PWM |
| 1 | Motor2 Speed | PWM |
| 2 | Motor3 Speed | PWM |
| 3 | Motor4 Speed | PWM |
| 4 | Motor1 Dir1 | OUTPUT |
| 5 | Motor1 Dir2 | OUTPUT |
| 6 | Motor2 Dir1 | OUTPUT |
| 7 | Motor2 Dir2 | OUTPUT |
| 8 | Motor3 Dir1 | OUTPUT |
| 9 | Motor3 Dir2 | OUTPUT |
| 10 | Motor4 Dir1 | OUTPUT |
| 11 | Motor5 Dir2 | OUTPUT |
| 12 | Servo1 Angle | PWM |
| 13 | Servo2 Angle | PWM |
| 14 | Servo3 Angle | PWM |
| 15 | Servo4 Angle | PWM |
| 21 | I2C Bus SDA | I2C |
| 20 | I2C Bus SCL | I2C |