From 0971473518c08462f1d10285dd3e4b10b637c58c Mon Sep 17 00:00:00 2001 From: Toberfra Date: Fri, 11 Feb 2022 09:06:23 +0100 Subject: [PATCH] PWM am Enable Pin --- Arduino/motor/src/KlappenAblauf.cpp | 8 +-- Arduino/motor/src/motor.cpp | 100 ++++++++++++++++++++-------- Arduino/motor/src/motor.h | 14 ++-- 3 files changed, 86 insertions(+), 36 deletions(-) diff --git a/Arduino/motor/src/KlappenAblauf.cpp b/Arduino/motor/src/KlappenAblauf.cpp index 8538f8a..5cfb7ed 100644 --- a/Arduino/motor/src/KlappenAblauf.cpp +++ b/Arduino/motor/src/KlappenAblauf.cpp @@ -71,13 +71,13 @@ void KlappenAblauf::fsmStep(){ break; case START_AUF: - setMotorAktion(1); + setSollSpeed(800); timer = 5000; aktuellerState = FAEHRT_AUF; break; case START_ZU: - setMotorAktion(-1); + setSollSpeed(-1023); timer = 5000; aktuellerState = FAEHRT_ZU; break; @@ -85,7 +85,7 @@ void KlappenAblauf::fsmStep(){ case FAEHRT_AUF: timer -= getDeltamsec(); if(timer <= 0){ - setMotorAktion(0); + setSollSpeed(0); aktuellerState = WARTE_OFFEN; } break; @@ -93,7 +93,7 @@ void KlappenAblauf::fsmStep(){ case FAEHRT_ZU: timer -= getDeltamsec(); if(timer <= 0){ - setMotorAktion(0); + setSollSpeed(0); aktuellerState = WARTE_GESCHLOSSEN; } break; diff --git a/Arduino/motor/src/motor.cpp b/Arduino/motor/src/motor.cpp index 114702f..a7054c6 100644 --- a/Arduino/motor/src/motor.cpp +++ b/Arduino/motor/src/motor.cpp @@ -17,12 +17,84 @@ void Motor::setMotorPwmPin(uint8_t pinPwm){ } + void Motor::setup(){ ArduinoAnpassung::setup(); - pinMode(pinPwm , OUTPUT); - digitalWrite(pinPwm , 1); + Timer1.initialize(100); //10kHz + Timer1.pwm(pinPwm , 0); + Timer1.attachInterrupt(Motor::interruptEinsprung); } +void Motor::interruptEinsprung(){ + MyList *zeiger; + zeiger = ArduinoAnpassung::getErstesElement(); + while(zeiger){ + ((Motor*)zeiger)->memberInterruptEinsprung(); + zeiger = zeiger->getNachfolgerElement(); + } +} + + void Motor::memberInterruptEinsprung(){ + interruptBerechnungen(); +} + +void Motor::interruptBerechnungen(){ + /*if(sollSpeed > istSpeed){ + istSpeed++; + setIstSpeed(istSpeed); + } + if(sollSpeed < istSpeed){ + istSpeed --; + setIstSpeed(istSpeed); + }*/ + + setIstSpeed(sollSpeed); + + +} + + + + +void Motor::setSollSpeed(int16_t speed){ + + + /* if(speed >1023) + speed = 1023; + if(speed < -1023) + speed = -1023; */ + + sollSpeed = speed; + +} +void Motor::setIstSpeed(int16_t speed){ + uint16_t pwm; + + if(speed > 0) + { + pwm = speed ; + digitalWrite(pinA , 1); + digitalWrite(pinB , 0); + + }else if (speed < 0){ + pwm = -speed ; + digitalWrite(pinA , 0); + digitalWrite(pinB , 1); + + }else{ + pwm = 1023; + digitalWrite(pinA , 0); + digitalWrite(pinB , 0); + + } + Timer1.pwm(Motor::pinPwm, pwm); + + +} + + + + void Motor::memberSetup(){ @@ -34,30 +106,6 @@ void Motor::memberSetup(){ } -void Motor::setMotorAktion(int8_t richtung){ - if(richtung > 0){ - digitalWrite( pinA , 1); - digitalWrite( pinB , 0); - digitalWrite(LED_BUILTIN , 1); - }else if(richtung < 0){ - digitalWrite( pinA , 0); - digitalWrite( pinB , 1); - digitalWrite(LED_BUILTIN , 1); - }else{ - digitalWrite( pinA , 0); - digitalWrite( pinB , 0); - digitalWrite(LED_BUILTIN , 0); - } -} - - -void Motor::setMotorAktion(int8_t richtung , int id ){ - Motor *zeiger; - zeiger = (Motor*) searchIdElement(id); - if(zeiger) - zeiger->setMotorAktion(richtung); -} - diff --git a/Arduino/motor/src/motor.h b/Arduino/motor/src/motor.h index 7efb65c..84b143c 100644 --- a/Arduino/motor/src/motor.h +++ b/Arduino/motor/src/motor.h @@ -16,22 +16,23 @@ public: void setMotorPins(uint8_t pinA , uint8_t pinB); static void setMotorPwmPin(uint8_t pinPwm); - void setMotorAktion(int8_t richtung); - static void setMotorAktion(int8_t richtung , int id); + void setSollSpeed(int16_t speed); + protected: - + + void setIstSpeed(int16_t speed); static uint8_t pinPwm; virtual void memberSetup(); - //static void interruptEinsprung(); - //void memberInterruptEinsprung(); + static void interruptEinsprung(); + void memberInterruptEinsprung(); //void InterruptEinsprung(); void interruptBerechnungen(); @@ -40,7 +41,8 @@ protected: uint16_t timer; int16_t sollSpeed; - int16_t summeSpeed; + int16_t istSpeed; + //int16_t summeSpeed; bool richtung; int16_t test;