Pārlūkot izejas kodu

Enabling servo usage on boards with PWM current control

Enabling servo usage on boards with PWM current control
timer5 is used by some boards like the Mini Rambo for controlling motor current via PWM, see stepper.cpp.
```cpp
  #ifdef MOTOR_CURRENT_PWM_XY_PIN
    pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
    pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);
    pinMode(MOTOR_CURRENT_PWM_E_PIN, OUTPUT);
    digipot_current(0, motor_current_setting[0]);
    digipot_current(1, motor_current_setting[1]);
    digipot_current(2, motor_current_setting[2]);
    //Set timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise)
    TCCR5B = (TCCR5B & ~(_BV(CS50) | _BV(CS51) | _BV(CS52))) | _BV(CS50);
  #endif
}
```
Using the same timer for controlling servos results in loss of motor control. So use timer4/3 for those boards instead.
[See discussion here.](http://shop.prusa3d.com/forum/software-f13/enabling-auto-leveling-in-firmware-t416-s40.html)
PheiPheiPhei 9 gadus atpakaļ
vecāks
revīzija
adb5375a09
1 mainītis faili ar 8 papildinājumiem un 3 dzēšanām
  1. 8
    3
      Marlin/servo.h

+ 8
- 3
Marlin/servo.h Parādīt failu

60
 
60
 
61
 // Say which 16 bit timers can be used and in what order
61
 // Say which 16 bit timers can be used and in what order
62
 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
62
 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
63
-  #define _useTimer5
64
   //#define _useTimer1
63
   //#define _useTimer1
65
   #define _useTimer3
64
   #define _useTimer3
66
   #define _useTimer4
65
   #define _useTimer4
67
-  //typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
68
-  typedef enum { _timer5, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
66
+  #ifndef MOTOR_CURRENT_PWM_XY_PIN
67
+    //Timer 5 is used for motor current PWM and can't be used for servos.
68
+    #define _useTimer5
69
+    //typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
70
+    typedef enum { _timer5, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
71
+  #else
72
+    typedef enum {_timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
73
+  #endif
69
 
74
 
70
 #elif defined(__AVR_ATmega32U4__)
75
 #elif defined(__AVR_ATmega32U4__)
71
   //#define _useTimer1
76
   //#define _useTimer1

Notiek ielāde…
Atcelt
Saglabāt