|
2 | 2 | spindle_control.c - spindle control methods
|
3 | 3 | Part of Grbl
|
4 | 4 |
|
5 |
| - Copyright (c) 2012-2017 Sungeun K. Jeon for Gnea Research LLC |
| 5 | + Copyright (c) 2012-2016 Sungeun K. Jeon for Gnea Research LLC |
6 | 6 | Copyright (c) 2009-2011 Simen Svale Skogsrud
|
7 | 7 |
|
8 | 8 | Grbl is free software: you can redistribute it and/or modify
|
@@ -137,79 +137,32 @@ void spindle_stop()
|
137 | 137 | }
|
138 | 138 |
|
139 | 139 |
|
140 |
| - #ifdef ENABLE_PIECEWISE_LINEAR_SPINDLE |
141 |
| - |
142 |
| - // Called by spindle_set_state() and step segment generator. Keep routine small and efficient. |
143 |
| - uint8_t spindle_compute_pwm_value(float rpm) // 328p PWM register is 8-bit. |
144 |
| - { |
145 |
| - uint8_t pwm_value; |
146 |
| - rpm *= (0.010*sys.spindle_speed_ovr); // Scale by spindle speed override value. |
147 |
| - // Calculate PWM register value based on rpm max/min settings and programmed rpm. |
148 |
| - if ((settings.rpm_min >= settings.rpm_max) || (rpm >= RPM_MAX)) { |
149 |
| - rpm = RPM_MAX; |
150 |
| - pwm_value = SPINDLE_PWM_MAX_VALUE; |
151 |
| - } else if (rpm <= RPM_MIN) { |
152 |
| - if (rpm == 0.0) { // S0 disables spindle |
153 |
| - pwm_value = SPINDLE_PWM_OFF_VALUE; |
154 |
| - } else { |
155 |
| - rpm = RPM_MIN; |
156 |
| - pwm_value = SPINDLE_PWM_MIN_VALUE; |
157 |
| - } |
158 |
| - } else { |
159 |
| - // Compute intermediate PWM value with linear spindle speed model via piecewise linear fit model. |
160 |
| - #if (N_PIECES > 3) |
161 |
| - if (rpm > RPM_POINT34) { |
162 |
| - pwm_value = floor(RPM_LINE_A4*rpm - RPM_LINE_B4); |
163 |
| - } else |
164 |
| - #endif |
165 |
| - #if (N_PIECES > 2) |
166 |
| - if (rpm > RPM_POINT23) { |
167 |
| - pwm_value = floor(RPM_LINE_A3*rpm - RPM_LINE_B3); |
168 |
| - } else |
169 |
| - #endif |
170 |
| - #if (N_PIECES > 1) |
171 |
| - if (rpm > RPM_POINT12) { |
172 |
| - pwm_value = floor(RPM_LINE_A2*rpm - RPM_LINE_B2); |
173 |
| - } else |
174 |
| - #endif |
175 |
| - { |
176 |
| - pwm_value = floor(RPM_LINE_A1*rpm - RPM_LINE_B1); |
177 |
| - } |
| 140 | + // Called by spindle_set_state() and step segment generator. Keep routine small and efficient. |
| 141 | + uint8_t spindle_compute_pwm_value(float rpm) // 328p PWM register is 8-bit. |
| 142 | + { |
| 143 | + uint8_t pwm_value; |
| 144 | + rpm *= (0.010*sys.spindle_speed_ovr); // Scale by spindle speed override value. |
| 145 | + // Calculate PWM register value based on rpm max/min settings and programmed rpm. |
| 146 | + if ((settings.rpm_min >= settings.rpm_max) || (rpm >= settings.rpm_max)) { |
| 147 | + // No PWM range possible. Set simple on/off spindle control pin state. |
| 148 | + sys.spindle_speed = settings.rpm_max; |
| 149 | + pwm_value = SPINDLE_PWM_MAX_VALUE; |
| 150 | + } else if (rpm <= settings.rpm_min) { |
| 151 | + if (rpm == 0.0) { // S0 disables spindle |
| 152 | + sys.spindle_speed = 0.0; |
| 153 | + pwm_value = SPINDLE_PWM_OFF_VALUE; |
| 154 | + } else { // Set minimum PWM output |
| 155 | + sys.spindle_speed = settings.rpm_min; |
| 156 | + pwm_value = SPINDLE_PWM_MIN_VALUE; |
178 | 157 | }
|
| 158 | + } else { |
| 159 | + // Compute intermediate PWM value with linear spindle speed model. |
| 160 | + // NOTE: A nonlinear model could be installed here, if required, but keep it VERY light-weight. |
179 | 161 | sys.spindle_speed = rpm;
|
180 |
| - return(pwm_value); |
| 162 | + pwm_value = floor((rpm-settings.rpm_min)*pwm_gradient) + SPINDLE_PWM_MIN_VALUE; |
181 | 163 | }
|
182 |
| - |
183 |
| - #else |
184 |
| - |
185 |
| - // Called by spindle_set_state() and step segment generator. Keep routine small and efficient. |
186 |
| - uint8_t spindle_compute_pwm_value(float rpm) // 328p PWM register is 8-bit. |
187 |
| - { |
188 |
| - uint8_t pwm_value; |
189 |
| - rpm *= (0.010*sys.spindle_speed_ovr); // Scale by spindle speed override value. |
190 |
| - // Calculate PWM register value based on rpm max/min settings and programmed rpm. |
191 |
| - if ((settings.rpm_min >= settings.rpm_max) || (rpm >= settings.rpm_max)) { |
192 |
| - // No PWM range possible. Set simple on/off spindle control pin state. |
193 |
| - sys.spindle_speed = settings.rpm_max; |
194 |
| - pwm_value = SPINDLE_PWM_MAX_VALUE; |
195 |
| - } else if (rpm <= settings.rpm_min) { |
196 |
| - if (rpm == 0.0) { // S0 disables spindle |
197 |
| - sys.spindle_speed = 0.0; |
198 |
| - pwm_value = SPINDLE_PWM_OFF_VALUE; |
199 |
| - } else { // Set minimum PWM output |
200 |
| - sys.spindle_speed = settings.rpm_min; |
201 |
| - pwm_value = SPINDLE_PWM_MIN_VALUE; |
202 |
| - } |
203 |
| - } else { |
204 |
| - // Compute intermediate PWM value with linear spindle speed model. |
205 |
| - // NOTE: A nonlinear model could be installed here, if required, but keep it VERY light-weight. |
206 |
| - sys.spindle_speed = rpm; |
207 |
| - pwm_value = floor((rpm-settings.rpm_min)*pwm_gradient) + SPINDLE_PWM_MIN_VALUE; |
208 |
| - } |
209 |
| - return(pwm_value); |
210 |
| - } |
211 |
| - |
212 |
| - #endif |
| 164 | + return(pwm_value); |
| 165 | + } |
213 | 166 | #endif
|
214 | 167 |
|
215 | 168 |
|
|
0 commit comments