您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

91 行
2.2 KiB

  1. #ifndef PLSR_PLANNER_H
  2. #define PLSR_PLANNER_H
  3. #include "plsr_platform.h"
  4. #include <stdint.h>
  5. typedef enum
  6. {
  7. PLSR_BOUNDARY_STOP = 0,
  8. PLSR_BOUNDARY_NEXT_FRESH,
  9. PLSR_BOUNDARY_NEXT_CARRY,
  10. PLSR_BOUNDARY_WAIT_TIME,
  11. PLSR_BOUNDARY_WAIT_SIGNAL,
  12. PLSR_BOUNDARY_WAIT_EXT,
  13. PLSR_BOUNDARY_JUMP,
  14. PLSR_BOUNDARY_EXT_CUT
  15. } PLSR_BOUNDARY_ACTION;
  16. /* A block is self-contained: the planner must not read live Modbus state. */
  17. typedef struct
  18. {
  19. uint32_t entryHz;
  20. uint32_t cruiseHz;
  21. uint32_t exitHz;
  22. uint32_t pulseBudget;
  23. uint32_t referenceSpeedHz;
  24. uint16_t accelerationTimeMs;
  25. uint16_t decelerationTimeMs;
  26. uint16_t curveMode;
  27. uint8_t pulseOutput;
  28. PLSR_BOUNDARY_ACTION boundary;
  29. } PLSR_MOTION_BLOCK;
  30. typedef struct
  31. {
  32. PLSR_PLATFORM_TIMER_SETTING setting;
  33. uint32_t requestedFrequencyHz;
  34. uint32_t repeatCount;
  35. } PLSR_STREAM_ITEM;
  36. typedef enum
  37. {
  38. PLSR_PLANNER_OK = 0,
  39. PLSR_PLANNER_CLIPPED,
  40. PLSR_PLANNER_DONE,
  41. PLSR_PLANNER_INVALID
  42. } PLSR_PLANNER_STATUS;
  43. typedef struct
  44. {
  45. PLSR_MOTION_BLOCK block;
  46. uint64_t phasePulses;
  47. uint32_t startHz;
  48. uint32_t peakHz;
  49. uint32_t endHz;
  50. uint32_t entryPulses;
  51. uint32_t steadyPulses;
  52. uint32_t exitPulses;
  53. uint32_t generatedPulses;
  54. uint32_t rampRelativePulse;
  55. uint32_t rampPulseCount;
  56. uint32_t rampFromHz;
  57. uint32_t rampToHz;
  58. uint32_t rampDurationMs;
  59. uint32_t lastRampHz;
  60. uint64_t rampTotalAreaQ32;
  61. uint64_t rampAreaStepQ32;
  62. uint64_t rampTargetAreaQ32;
  63. uint64_t rampBoundaryQ32;
  64. uint64_t rampActualTimeQ32;
  65. uint64_t rampLastPhaseStepQ32;
  66. uint64_t rampFirstBoundaryQ32;
  67. uint64_t rampSecondBoundaryQ32;
  68. uint32_t rampAreaRemainder;
  69. uint32_t rampRemainderAccumulator;
  70. uint8_t rampKind;
  71. uint8_t clipped;
  72. uint8_t active;
  73. } PLSR_PLANNER_CONTEXT;
  74. PLSR_PLANNER_STATUS PlsrPlannerBegin(PLSR_PLANNER_CONTEXT *context,
  75. const PLSR_MOTION_BLOCK *block,
  76. uint32_t appliedHz,
  77. uint64_t phasePulses);
  78. uint16_t PlsrPlannerGenerate(PLSR_PLANNER_CONTEXT *context,
  79. PLSR_STREAM_ITEM *output,
  80. uint16_t capacity);
  81. #endif /* PLSR_PLANNER_H */