Коэффициент шестерня
- Войдите на сайт для отправки комментариев
Пнд, 31/05/2021 - 08:14
знатокам и читателям здрасте!
код управление шаговым двигателем при помощи роторного энкодера
прошу подсказать как реализовать в коде Коэффициент шестерни. пробовал в коде менять скорость двигателя шагового строкой STEPS_PR_ENCODER_PULSE 1. но там не могу задать 1.2
пробовал также менять тип переменных и округлять результат
на выходе либо 1 коэффициент либо 2
заранее извиняюсь за возможно непонятное объяснение
#define ENCODER_PULSE_PIN 2 #define ENCODER_DIR_PIN 3 #define DRIVER_STEP_PIN 4 #define DRIVER_DIR_PIN 7 #define DRIVER_EN_PIN 8 #define STEPS_PR_ENCODER_PULSE 1 #define DRIVER_PULSE_PERIOD_US 1 enum Driver_pulse_state_enum {PULSE_IDLE, PULSE_HIGH, PULSE_LOW}; uint8_t dir = LOW; uint16_t pulse_buffer = 0; unsigned long time_now = 0; uint16_t driver_pulse_hold_time_us = DRIVER_PULSE_PERIOD_US/2; uint8_t driver_pulse_state = PULSE_IDLE; void setup() { pinMode(ENCODER_PULSE_PIN, INPUT); pinMode(ENCODER_DIR_PIN, INPUT); pinMode(DRIVER_STEP_PIN, OUTPUT); pinMode(DRIVER_DIR_PIN, OUTPUT); pinMode(DRIVER_EN_PIN, OUTPUT); attachInterrupt(digitalPinToInterrupt(ENCODER_PULSE_PIN), encoderISR, RISING); digitalWrite(DRIVER_EN_PIN, HIGH); void loop() { if((pulse_buffer) && (driver_pulse_state == PULSE_IDLE)){ driver_pulse_state = PULSE_HIGH; digitalWrite(DRIVER_DIR_PIN, digitalRead(ENCODER_DIR_PIN)); digitalWrite(DRIVER_STEP_PIN, HIGH); time_now = micros(); } if((micros() - time_now > driver_pulse_hold_time_us) && (driver_pulse_state == PULSE_LOW)){ driver_pulse_state = PULSE_HIGH; digitalWrite(DRIVER_STEP_PIN, HIGH); time_now = micros(); } if((micros() - time_now > driver_pulse_hold_time_us) && (driver_pulse_state == PULSE_HIGH)){ digitalWrite(DRIVER_STEP_PIN, LOW); time_now = micros(); pulse_buffer -= 1; if(pulse_buffer < 0){ pulse_buffer = 0; } if(pulse_buffer){ driver_pulse_state = PULSE_LOW; } else{ driver_pulse_state = PULSE_IDLE; } } } void encoderISR(){ pulse_buffer += STEPS_PR_ENCODER_PULSE; }
А типы каких переменных пытались менять? И на какие типы?
А типы каких переменных пытались менять? И на какие типы?
float steps_per_pulse = 1.2;
78 строка pulse_buffer += round(STEPS_PR_ENCODER_PULSE*steps_per_pulse);
да и так думаю это не логично пытать установить количество импульсов 1.2
значит необходимо в другую сторону искать
Arduinchlk - странный подход - вы хотите коэффициент преобразования 1.2. но в коде и намека на это нет. Как вы думаете контроллер догадается о вашем желании? :)
Мне даже интересно , каким образом энкодер покажет 1.2шага