Read motor encoder data

1. Experimental purpose

Using the encoded motor interface of the microROS control board, learn how the ESP32 uses PCNT components to capture the number of motor encoder pulses.

 

2. Hardware connection

As shown in the figure below, the microROS control board integrates four encoder motor control interfaces. An additional encoder motor needs to be connected. The motor control interface supports 310 motors. A type-C data cable also needs to be connected to the computer and the microROS control board to burn firmware. Function.

image-20240111152814048

The corresponding names of the four motor interfaces are: left front wheel->Motor1, left rear wheel->Motor2, right front wheel->Motor3, right rear wheel->Motor4.

image-20240111155522592

Motor interface line sequence, there is a detailed line sequence silk screen on the back of the microROS control board. Here we take Motor1 as an example. M1+ and M1- are the interfaces for controlling the rotation of the motor. GND and VCC are the power supply circuits of the encoder. H1A and H1B are the encoder pulses. Detection pin.

image-20240111160116671

Note: If you are using the 310 motor and motor cable provided by Yabo Intelligence, connect the white wire shell end to the interface on the microROS control board, and the black wire shell end to the 310 motor interface.

 

3. Core code analysis

The virtual machine path corresponding to the program source code is as follows

Since the initialization process of four-way motors is similar, here we take the encoder initialization of motor 1 as an example.

First, initialize the GPIO H1A and H1B of Motor 1 as PCNT capture interfaces with a frequency of 25KHz. Select timer group 0 as the PWM output timer group of Motor 1.

Read the accumulated number of encoder pulses of motor 1.

For the convenience of reading, the number of accumulated encoder pulses of the motor is obtained according to the ID number of the encoder.

Call the Encoder_Init function in app_main to initialize the motor encoder, and print the accumulated pulse number of the four motor encoders every 200 milliseconds in the loop.

 

4. Compile, download and flash firmware

Use a Type-C data cable to connect the virtual machine/computer and the microROS control board. If the system pops up, choose to connect to the virtual machine.

Activate the ESP-IDF development environment. Note that every time you open a new terminal, you need to activate the ESP-IDF development environment before compiling the firmware.

Enter the project directory

Compile, flash, and open the serial port simulator

If you need to exit the serial port simulator, press Ctrl+].

 

5. Experimental results

The serial port simulator prints the "hello yahboom" greeting. At this time, the pulse data of the four-channel motor encoder will be printed every 200 milliseconds. As shown in the figure below, the motor Motor3 is rotated, so the third data will change.

image-20240111183010379

 

According to the parameters of the motor, the motor reduction ratio is 1:20, the encoder is a 13-line AB phase Hall encoder, and the software uses high and low level triggering at the same time, so the theoretical number of pulses for one revolution of the motor should be 1040.

 

Taking rotating motor 3 as an example, when the wheel turns forward, the encoder data accumulates. When the wheel turns forward for one turn, the encoder data increases by approximately 1040. Since there is a certain error in manual rotation, there may be differences in the values, as long as the difference is not large.

image-20240111193123933

image-20240111185926592

Press the reset button on the microROS control board to reset the value to 0.

image-20240111191603637

When the wheel turns backward, the encoder data decreases cumulatively. If it turns backward for one turn, it will decrease by approximately 1040.

image-20240111191511979