Open FFBoard
Open source force feedback firmware
MotorPWM.h
Go to the documentation of this file.
1/*
2 * MotorPWM.h
3 *
4 * Created on: Mar 29, 2020
5 * Author: Yannick
6 */
7
8#ifndef MOTORPWM_H_
9#define MOTORPWM_H_
10
11#include <MotorDriver.h>
12#include "cppmain.h"
13#include "CommandHandler.h"
14#include "TimerHandler.h"
15#include "target_constants.h"
16//#include "cpp_target_config.h"
17#include "PersistentStorage.h"
18
19extern TIM_HandleTypeDef TIM_PWM;
20
21void pwmInitTimer(TIM_HandleTypeDef* timer,uint32_t channel,uint32_t period,uint32_t prescaler);
22void setPWM_HAL(uint32_t value,TIM_HandleTypeDef* timer,uint32_t channel,uint32_t period);
23
24enum class ModePWM_DRV : uint8_t {RC_PWM=0,CENTERED_PWM=1,PWM_DIR=2,PWM_DUAL=3};
25enum class SpeedPWM_DRV : uint8_t {LOW=0,MID=1,HIGH=2,VERYHIGH=3};
26
27struct PWMConfig{
28 uint32_t channel_1 = TIM_CHANNEL_1;
29 uint32_t channel_2 = TIM_CHANNEL_2;
30 uint32_t channel_3 = TIM_CHANNEL_3;
31 uint32_t channel_4 = TIM_CHANNEL_4;
32
33 uint8_t pwm_chan = 1;
34 uint8_t dir_chan = 3;
35 uint8_t dir_chan_n = 4;
36
37 uint8_t centerpwm_chan = 1;
38
39 uint8_t rcpwm_chan = 1;
40
41 uint8_t dualpwm1 = 1;
42 uint8_t dualpwm2 = 2;
43
44 TIM_HandleTypeDef* timer = &TIM_PWM;
45 uint32_t timerFreq = 168000000;
46 };
47
55 enum class MotorPWM_commands : uint32_t {
57 };
58public:
59 MotorPWM();
60 virtual ~MotorPWM();
61
64 static bool isCreatable();
65
66 void turn(int16_t power);
67 void stopMotor();
68 void startMotor();
69
70 void setPwmSpeed(SpeedPWM_DRV spd);
72
75
76 void saveFlash(); // Write to flash here
77 void restoreFlash(); // Load from flash
78
79 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies);
80 virtual std::string getHelpstring(){return "PWM output motor driver";}
81
82 void setPWM(uint32_t value,uint8_t ccr);
83
84 static bool pwmDriverInUse;
85
87private:
88 float tFreq = 1; // Frequency scaling. Timer freq in MHz
89 int32_t period = 20000;
90 int32_t prescaler = 95;
91
92 bool invertDir = false;
93
94
97 bool active = false;
98
102 static const PWMConfig timerConfig;
103 static std::pair<uint16_t,uint16_t> freqToPeriodPsc(uint32_t freq);
104};
105
106
107#endif /* MOTORPWM_H_ */
CommandStatus
SpeedPWM_DRV
Definition: MotorPWM.h:25
TIM_HandleTypeDef TIM_PWM
ModePWM_DRV
Definition: MotorPWM.h:24
void setPWM_HAL(uint32_t value, TIM_HandleTypeDef *timer, uint32_t channel, uint32_t period)
Definition: MotorPWM.cpp:321
void pwmInitTimer(TIM_HandleTypeDef *timer, uint32_t channel, uint32_t period, uint32_t prescaler)
Definition: MotorPWM.cpp:297
void saveFlash()
Definition: MotorPWM.cpp:204
SpeedPWM_DRV getPwmSpeed()
Definition: MotorPWM.cpp:197
MotorPWM_commands
Definition: MotorPWM.h:55
virtual std::string getHelpstring()
Definition: MotorPWM.h:80
virtual ~MotorPWM()
Definition: MotorPWM.cpp:48
int32_t prescaler
Definition: MotorPWM.h:90
static bool pwmDriverInUse
Definition: MotorPWM.h:84
static const PWMConfig timerConfig
Definition: MotorPWM.h:102
void setPwmSpeed(SpeedPWM_DRV spd)
Definition: MotorPWM.cpp:123
ModePWM_DRV mode
Definition: MotorPWM.h:96
void turn(int16_t power)
Definition: MotorPWM.cpp:59
static std::pair< uint16_t, uint16_t > freqToPeriodPsc(uint32_t freq)
Definition: MotorPWM.cpp:113
static ClassIdentifier info
Definition: MotorPWM.h:62
MotorPWM()
Definition: MotorPWM.cpp:35
bool invertDir
Definition: MotorPWM.h:92
float tFreq
Definition: MotorPWM.h:88
ModePWM_DRV getMode()
Definition: MotorPWM.cpp:242
static PWMConfig & config
Definition: MotorPWM.h:86
void startMotor()
Definition: MotorPWM.cpp:226
void stopMotor()
Definition: MotorPWM.cpp:231
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
Definition: MotorPWM.cpp:26
void setPWM(uint32_t value, uint8_t ccr)
Definition: MotorPWM.cpp:184
void restoreFlash()
Definition: MotorPWM.cpp:212
void setMode(ModePWM_DRV mode)
Definition: MotorPWM.cpp:237
SpeedPWM_DRV pwmspeed
Definition: MotorPWM.h:95
bool active
Definition: MotorPWM.h:97
static bool isCreatable()
Definition: MotorPWM.cpp:30
int32_t period
Definition: MotorPWM.h:89
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
Definition: MotorPWM.cpp:248
TIM_HandleTypeDef * timer
Definition: MotorPWM.h:44
uint8_t rcpwm_chan
Definition: MotorPWM.h:39
uint32_t timerFreq
Definition: MotorPWM.h:45
uint32_t channel_4
Definition: MotorPWM.h:31
uint8_t dualpwm2
Definition: MotorPWM.h:42
uint8_t centerpwm_chan
Definition: MotorPWM.h:37
uint8_t dualpwm1
Definition: MotorPWM.h:41
uint32_t channel_1
Definition: MotorPWM.h:28
uint8_t dir_chan_n
Definition: MotorPWM.h:35
uint32_t channel_2
Definition: MotorPWM.h:29
uint32_t channel_3
Definition: MotorPWM.h:30
uint8_t dir_chan
Definition: MotorPWM.h:34
uint8_t pwm_chan
Definition: MotorPWM.h:33