rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
stepper.h
Go to the documentation of this file.
1/**
2 * @file stepper.h
3 *
4 * @date Dec 24, 2014
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8#pragma once
9
10#include "global.h"
11#include "efi_gpio.h"
12#include "backup_ram.h"
13#include "thread_controller.h"
14
15class StepperHw {
16public:
17 virtual bool step(bool positive) = 0;
18 // pause between steps
19 void pause(int divisor = 1) const;
20 // pause and enter the idle mode (less current consumption)
21 virtual void sleep();
22
23protected:
24 void setReactionTime(float ms);
25
26private:
27 float m_reactionTime = 5.0f;
28};
29
30class StepDirectionStepper final : public StepperHw {
31public:
33
34 bool step(bool positive) override;
35
36private:
37 bool pulse();
38 void setDirection(bool isIncrementing);
39
40 bool m_currentDirection = false;
41
44};
45
46class DcMotor;
47
48class DualHBridgeStepper final : public StepperHw {
49public:
50 void initialize(DcMotor* motorPhaseA, DcMotor* motorPhaseB, float reactionTime);
51
52 bool step(bool positive) override;
53
54 void sleep() override;
55
56protected:
57 bool update(float dutyMult);
58
59private:
62
63 uint8_t m_phase = 0;
64};
65
67public:
68 virtual void initialize(StepperHw* hardware, int totalSteps);
69 void doIteration();
70
71 void setTargetPosition(float targetPositionSteps);
72 float getTargetPosition() const;
73
74 bool isBusy() const;
75
77 int m_totalSteps = 0;
78
79protected:
80 void setInitialPosition(void);
81
82 void saveStepperPos(int pos);
83 int loadStepperPos();
84
85 void changeCurrentPosition(bool positive);
86 void postCurrentPosition(void);
87
88 StepperHw* m_hw = nullptr;
89
91 bool initialPositionSet = false;
92 bool m_isBusy = false;
93};
94
95#if !EFI_UNIT_TEST
96
97class StepperMotor final : public StepperMotorBase, private ThreadController<UTILITY_THREAD_STACK_SIZE> {
98public:
99 StepperMotor() : ThreadController("stepper", PRIO_STEPPER) {}
100
101 void initialize(StepperHw* hardware, int totalSteps);
102
103 void ThreadTask() override {
104 // Require hardware to be set
105 if (!m_hw) {
106 return;
107 }
108
109 while (true) {
110 doIteration();
111 }
112 }
113};
114#endif
Non-volatile backup-RAM registers support.
Brushed or brushless DC motor interface.
Definition dc_motor.h:20
bool step(bool positive) override
void initialize(DcMotor *motorPhaseA, DcMotor *motorPhaseB, float reactionTime)
DcMotor * m_motorPhaseA
Definition stepper.h:60
bool update(float dutyMult)
DcMotor * m_motorPhaseB
Definition stepper.h:61
uint8_t m_phase
Definition stepper.h:63
Single output pin reference and state.
Definition efi_output.h:49
pin_output_mode_e enablePinMode
Definition stepper.h:43
OutputPin enablePin
Definition stepper.h:42
pin_output_mode_e stepPinMode
Definition stepper.h:43
OutputPin stepPin
Definition stepper.h:42
void initialize(brain_pin_e stepPin, brain_pin_e directionPin, pin_output_mode_e directionPinMode, float reactionTime, brain_pin_e enablePin, pin_output_mode_e enablePinMode)
Definition stepper.cpp:217
bool step(bool positive) override
Definition stepper.cpp:206
void setDirection(bool isIncrementing)
Definition stepper.cpp:165
OutputPin directionPin
Definition stepper.h:42
pin_output_mode_e directionPinMode
Definition stepper.h:43
virtual void sleep()
Definition stepper.cpp:193
virtual bool step(bool positive)=0
void setReactionTime(float ms)
Definition stepper.cpp:202
void pause(int divisor=1) const
Definition stepper.cpp:197
float m_reactionTime
Definition stepper.h:27
float getTargetPosition() const
Definition stepper.cpp:14
float m_targetPosition
Definition stepper.h:90
StepperHw * m_hw
Definition stepper.h:88
void setTargetPosition(float targetPositionSteps)
Definition stepper.cpp:18
bool initialPositionSet
Definition stepper.h:91
void postCurrentPosition(void)
Definition stepper.cpp:60
int m_currentPosition
Definition stepper.h:76
int loadStepperPos()
Definition stepper.cpp:43
virtual void initialize(StepperHw *hardware, int totalSteps)
Definition stepper.cpp:26
void saveStepperPos(int pos)
Definition stepper.cpp:35
void setInitialPosition(void)
Definition stepper.cpp:68
bool isBusy() const
Definition stepper.cpp:161
void changeCurrentPosition(bool positive)
Definition stepper.cpp:51
void initialize(StepperHw *hardware, int totalSteps)
Definition stepper.cpp:211
void ThreadTask() override
Definition stepper.h:103
A base class for a controller that requires its own thread.
EFI-related GPIO code.
pin_output_mode_e