Cleanup encoder code

This commit is contained in:
Hakan Bastedt
2024-01-11 10:42:29 +01:00
parent cd8388ea58
commit a4488da9fa
6 changed files with 389 additions and 479 deletions

View File

@@ -8,7 +8,9 @@
"string": "cpp", "string": "cpp",
"unordered_map": "cpp", "unordered_map": "cpp",
"vector": "cpp", "vector": "cpp",
"system_error": "cpp" "system_error": "cpp",
"numeric": "cpp",
"ostream": "cpp"
}, },
"C_Cpp.errorSquiggles": "disabled" "C_Cpp.errorSquiggles": "disabled"
} }

View File

@@ -3,12 +3,22 @@
#include "Stm32F4_Encoder.h" #include "Stm32F4_Encoder.h"
#include <CircularBuffer.h> #include <CircularBuffer.h>
#define RINGBUFFERLEN 101 #define RINGBUFFERLEN 101
// EncoderInit.SetCount(Tim3, 0);
// EncoderInit.SetCount(Tim4, 0);
// EncoderInit.SetCount(Tim8, 0);
class MyEncoder class MyEncoder
{ {
public: public:
MyEncoder(uint8_t _indexPin, void irq(void));
int32_t unwrapEncoder(uint16_t in);
void indexPulse(void);
void init(TIM_TypeDef *_tim_base);
uint8_t indexHappened();
double currentPos(volatile uint32_t cnt);
double frequency(uint64_t time);
uint8_t getIndexState();
void setScale(double scale);
void setLatch(uint8_t latchEnable);
private:
int32_t previousEncoderCounterValue = 0; int32_t previousEncoderCounterValue = 0;
double PosScaleRes = 1.0; double PosScaleRes = 1.0;
uint32_t CurPosScale = 1; uint32_t CurPosScale = 1;
@@ -23,18 +33,6 @@ public:
double curPos; double curPos;
TIM_TypeDef *tim_base; TIM_TypeDef *tim_base;
public:
MyEncoder(uint8_t _indexPin, void irq(void));
int32_t unwrapEncoder(uint16_t in);
void indexPulse(void);
void init(enum EncTimer timer, TIM_TypeDef *_tim_base);
uint8_t indexHappened();
double currentPos(volatile uint32_t cnt);
double frequency(uint64_t time);
uint8_t getIndexState();
void setScale(double scale);
void setLatch(uint8_t latchEnable);
}; };
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@@ -36,11 +36,11 @@ void MyEncoder::indexPulse(void)
pleaseZeroTheCounter = 0; pleaseZeroTheCounter = 0;
} }
} }
void MyEncoder::init(enum EncTimer timer, TIM_TypeDef *_tim_base) void MyEncoder::init(TIM_TypeDef *_tim_base)
{ {
tim_base = _tim_base; EncoderInit.tim_base = _tim_base;
// Set starting count value // Set starting count value
EncoderInit.SetCount(timer, 0); EncoderInit.SetCount(0);
// EncoderInit.SetCount(Tim3, 0); // EncoderInit.SetCount(Tim3, 0);
// EncoderInit.SetCount(Tim4, 0); // EncoderInit.SetCount(Tim4, 0);
// EncoderInit.SetCount(Tim8, 0); // EncoderInit.SetCount(Tim8, 0);

View File

@@ -5,45 +5,21 @@
Created on: Nov 20, 2020 Created on: Nov 20, 2020
Author: GoktugH. Author: GoktugH.
*/ */
// TIM2, TIM3, TIM4, TIM8
Encoder::Encoder() Encoder::Encoder()
{ {
int unit; int unit;
} }
void Encoder::eattach(int enco) // void Encoder::SetCount(enum EncTimer enc, int64_t Counter)
void Encoder::SetCount(int64_t Counter)
{ {
tim_base->CNT = Counter;
} }
// uint16_t Encoder::GetCount(enum EncTimer enc)
void Encoder::attachh(int encoNumber) uint16_t Encoder::GetCount()
{ {
eattach(encoNumber); return tim_base->CNT;
}
void Encoder::SetCount(enum EncTimer enc, int64_t Counter)
{
if (enc == Tim2)
TIM2->CNT = Counter;
else if (enc == Tim3)
TIM3->CNT = Counter;
else if (enc == Tim4)
TIM4->CNT = Counter;
else if (enc == Tim8)
TIM8->CNT = Counter;
}
uint16_t Encoder::GetCount(enum EncTimer enc)
{
if (enc == Tim2)
c = (TIM2->CNT);
else if (enc == Tim3)
c = (TIM3->CNT);
else if (enc == Tim4)
c = (TIM4->CNT);
else if (enc == Tim8)
c = (TIM8->CNT);
return c;
} }
void GpioConfigPortA(GPIO_TypeDef *GPIOx) void GpioConfigPortA(GPIO_TypeDef *GPIOx)

View File

@@ -83,7 +83,7 @@ void setup(void)
rcc_config(); rcc_config();
Step1.setScale(500); Step1.setScale(500);
Encoder1.init(Tim2, TIM2); Encoder1.init(TIM2);
ecat_slv_init(&config); ecat_slv_init(&config);
} }