Pulse Encoder Devices

A pulse encoder is a sensor that senses position using optical, magnetic or mechanical contacts and converts the position information into an electronic signal for output. The electronic signal it outputs is generally used as a feedback signal when controlling the position.

Pulse encoders can be divided into two categories according to their working principles: incremental and absolute. Incremental encoders convert displacement into periodic electrical signals, and then convert the electrical signals into counting pulses, using the number of pulses to represent the magnitude of displacement. Each position of an absolute encoder corresponds to a certain digital code, so its indication is only related to the starting and ending positions of the measurement, and has nothing to do with the intermediate process of the measurement. Most contemporary microcontrollers provide encoder peripherals for receiving and storing pulse encoder signals.

The application accesses the pulse encoder device through the I/O device management interface provided by RT-Thread. The relevant interface is as follows:

function

describe

rt_device_find()

Find Pulse Encoder Devices

rt_device_open()

Open the pulse encoder device (read-only mode only)

rt_device_control()

Control the pulse encoder device, you can clear the count value, get the type, and enable the device.

rt_device_read()

Get the current value of the pulse encoder

rt_device_close()

Turn off the pulse encoder device

The application obtains the device handle according to the device name of the pulse encoder, and then can operate the pulse encoder device. The device search function is as follows:

rt_device_t rt_device_find(const char* name);copymistakeCopy Success

parameter

describe

name

Device name of pulse encoder

return

——

Pulse encoder device handle

If the corresponding device is found, the corresponding device handle will be returned.

RT_NULL

No device found

Generally, the device names of the pulse encoders registered to the system are pulse1, pulse2, etc. The usage examples are as follows:

Through the device handle, the application can open the device. When opening the device, it will detect whether the device has been initialized. If it has not been initialized, the initialization interface will be called by default to initialize the device. Open the device through the following function:

parameter

describe

dev

Pulse encoder device handle

oflags

Device opening mode, usually opened in read-only mode, that is, the value is: RT_DEVICE_OFLAG_RDONLY

return

——

RT_EOK

Device opened successfully

Other error codes

Device open failed

The usage examples are as follows:

Through the command control word, the application can set the pulse encoder device through the following function:

parameter

describe

dev

Device handle

cmd

Command control word

arg

Controlled Parameters

return

——

RT_EOK

Function execution successful

-RT_ENOSYS

Execution failed, dev is empty

Other error codes

Execution failed

The command control words supported by the pulse encoder device are as follows:

Control Word

describe

PULSE_ENCODER_CMD_GET_TYPE

Get the pulse encoder type

PULSE_ENCODER_CMD_ENABLE

Enable pulse encoder

PULSE_ENCODER_CMD_DISABLE

Disable pulse encoder

PULSE_ENCODER_CMD_CLEAR_COUNT

Clear encoder count value

The pulse encoder count value can be read through the following function:

parameter

describe

dev

Device handle

pos

Fixed value is 0

buffer

The address of a variable of type rt_int32_t, used to store the value of the pulse encoder.

size

Fixed value is 1

return

——

Fixed return value

Return 1

The usage examples are as follows:

The pulse encoder device can be turned off by the following function:

parameter

describe

dev

Pulse encoder device handle

return

——

RT_EOK

Shut down the device successfully

-RT_ERROR

The device has been completely shut down. You cannot shut down the device again.

Other error codes

Failed to shut down the device

Closing the device interface and opening the device interface must be used in pairs. Each time you open the device, you must close it once. Only in this way can the device be completely closed. Otherwise, the device will still be in an open state.

The usage examples are as follows:

The specific usage of the pulse encoder device can refer to the following sample code. The main steps of the sample code are as follows:

  1. First, find the device and obtain the device handle based on the device name of the pulse encoder "pulse1".

  2. Open device 'pulse1' as read-only.

  3. Read the count value of the pulse encoder device.

  4. Clear the count value of the pulse encoder. (Optional step)

Last updated

Was this helpful?