encoder.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef __ENCODER_H__
  2. #define __ENCODER_H__
  3. #include <rtthread.h>
  4. #include <rtdevice.h>
  5. enum encoder_direction
  6. {
  7. ENCODER_DIR_FORWARD,
  8. ENCODER_DIR_BACKWARD,
  9. };
  10. typedef struct encoder *encoder_t;
  11. struct encoder
  12. {
  13. rt_int32_t pulse_count; /* absolute pulse number in total */
  14. rt_uint16_t pulse_revol; /* pulse number per revolution */
  15. rt_uint16_t sample_time; /* sample time in microseconds for speed measurement */
  16. rt_tick_t last_time;
  17. rt_int32_t last_count;
  18. rt_int16_t cps;
  19. enum encoder_direction dir;
  20. rt_err_t (*enable)(void *enc);
  21. rt_err_t (*disable)(void *enc);
  22. rt_err_t (*destroy)(void *enc);
  23. };
  24. encoder_t encoder_create(rt_size_t size);
  25. rt_err_t encoder_destroy(encoder_t enc);
  26. rt_err_t encoder_enable(encoder_t enc); /* start measurement */
  27. rt_err_t encoder_disable(encoder_t enc); /* stop measurement */
  28. rt_err_t encoder_reset(encoder_t enc); /* set pulse_count to 0 */
  29. rt_err_t encoder_set_sample_time(encoder_t enc, rt_uint16_t sample_time); /* set sample time */
  30. /** rpm = pulse_count / sample_time(ms) / pulse_revol * 1000 * 60 **/
  31. rt_int16_t encoder_read(encoder_t enc); /* return pulse_count */
  32. rt_int16_t encoder_measure_cps(encoder_t enc); /* pulse_count per second */
  33. rt_int16_t encoder_measure_rpm(encoder_t enc); /* revolutions per minute */
  34. #endif