/* spindle_control.c - spindle control methods Part of Grbl Copyright (c) 2012-2015 Sungeun K. Jeon Copyright (c) 2009-2011 Simen Svale Skogsrud Grbl is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Grbl is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Grbl. If not, see . */ #include "grbl.h" void spindle_init() { #ifdef VARIABLE_SPINDLE // Configure variable spindle PWM and enable pin, if requried. On the Uno, PWM and enable are // combined unless configured otherwise. SPINDLE_PWM_DDR |= (1< settings.rpm_max) { rpm = settings.rpm_max; } if (rpm < settings.rpm_min) { rpm = settings.rpm_min; } #ifdef SPINDLE_MINIMUM_PWM float pwm_gradient = (PWM_MAX_VALUE-SPINDLE_MINIMUM_PWM)/(settings.rpm_max-settings.rpm_min); current_pwm = floor( (rpm-settings.rpm_min)*pwm_gradient + (SPINDLE_MINIMUM_PWM+0.5)); #else float pwm_gradient = (PWM_MAX_VALUE)/(settings.rpm_max-settings.rpm_min); current_pwm = floor( (rpm-settings.rpm_min)*pwm_gradient + 0.5); #endif } OCR_REGISTER = current_pwm; // Set PWM output level. TCCRA_REGISTER |= (1<