Приветствую Вас Mr.Kubikus !!!
Спустя долгое время, снова нуждаюсь в Вашем совете.
А именно, пытаюсь немного переделать скетч-код из данной ветки. К стати говоря, о данных изменениях, Вас уже спрашивали и другие, но судя по последним "коментам", до практики это так и не дошло наверное.
Итак, нужда в следуйшем:
1 - Сделать джойстик чуствительным к нажатию. То есть, чем больше жмешь, тем больше скорость мотора. (Вы уже кому то советовали в строчке "stpMotor1.setSpeed(nMotor1MV);" , значение "nMotor1MV" поменять на "nMotor1SP" , однако желаемого результата это не дало. Вернее сказать, результат получился не совсем тот, что нужно.
Во первых, максимальная скорость мотора в целом упала где-то, на 50% и во вторых, даже при центральном положении джойстика, моторы начали медленно шагать, как секундная стрелка часов. Думая, что проблема с зоной нечувствительности, пробовал изменять значение "if (nMotor1SP > 100)" от 5 до 500, однако данные изменения никакой разницы не дало.)
2 - Сохранить функцию переменного резистора, для выставления порога максимальной скорости мотора.
3 - Добавить еще один переменный резистор, для выставления порога плавного старта и торможения мотора, так называемый RAMP. (Читал, что Вы советовали кому-то посмотреть в самой библиотеке, однако уровень моего знания (незнания), да и многих других читателей данной ветки, вынуждает просить Вас помочь и в этом тоже, тем более, что эту функцию еще и нужно привязать к потенциометру.)
Ну и несколько вопросов так, из любопытства:
- В строке "#define MOTOR2_SPR 200" Пробовал менять значение 200, даже "0" ставил, а разницы не заметил. Почему?
- Какое максимальное значение можно ставить в строчке "#define MOTOR1_MAX_SPEED 5000.0"? или как ускорить шаговики?
- "#define MOTOR1_INIT_SPEED 100.0" Что это значение обозначает?
- "stpMotor1.setAcceleration(10.0);" Что это значение обозначает?
Да, к стати, из скетч-кода удалил все, что было связано с концевыми кнопками. Они не нужны.
- Code: [Выделить всё] [Expand/Collapse]
#include <AccelStepper.h>
#define MOTOR1_DIR_PIN 8
#define MOTOR2_DIR_PIN 11
#define MOTOR1_STEP_PIN 9
#define MOTOR2_STEP_PIN 10
#define MOTOR1_SPR 200 // Кол-во шагов на 1 оборот вала двигателя
#define MOTOR2_SPR 200 // Пробовал менять данное значение, даже "0" ставил, а разницы не заметил
#define MOTOR1_MAX_SPEED 5000.0
#define MOTOR2_MAX_SPEED 5000.0
#define MOTOR1_INIT_SPEED 100.0 // что это значение обозначает?
#define MOTOR2_INIT_SPEED 100.0
#define MOTOR1_JOY_IN 0 // Ось Y джойстика
#define MOTOR2_JOY_IN 1 // Ось X джойстика
#define SPEED_KNOB_IN 2 // Задатчик скорости - переменный резистор 1К
AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
AccelStepper stpMotor2(AccelStepper::DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);
int nMotor1SP, nMotor2SP; // Задание направления от джойстика
int nSpeedSP; // Задание скорости от задачика
int nMotor1MV, nMotor2MV; // Задание скорости после ограничителя
void setup() {
phInit();
}
void loop() {
phGetCommand();
phMotorRun();
}
void phInit()
{
pinMode(MOTOR1_DIR_PIN, OUTPUT);
pinMode(MOTOR2_DIR_PIN, OUTPUT);
pinMode(MOTOR1_STEP_PIN, OUTPUT);
pinMode(MOTOR2_STEP_PIN, OUTPUT);
nMotor1MV = 0;
nMotor2MV = 0;
stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
stpMotor2.setMaxSpeed(MOTOR2_MAX_SPEED);
stpMotor1.setAcceleration(10.0); // что это значение обозначает?
stpMotor2.setAcceleration(10.0);
stpMotor1.setSpeed(0);
stpMotor2.setSpeed(0);
return;
}
void phGetCommand()
{
nMotor1SP = analogRead(MOTOR1_JOY_IN) - 512;
nMotor2SP = analogRead(MOTOR2_JOY_IN) - 512;
nSpeedSP = 1023 - analogRead(SPEED_KNOB_IN);
/////////////////////////////////////////////////
// Этот код обеспечивает зону нечувствительности - мотор не реагирует на малые отклонения джойстика от нейтрального положения:
if (nMotor1SP > 100) {
nMotor1MV = nSpeedSP;
} else if (nMotor1SP < -100) {
nMotor1MV = -nSpeedSP;
} else {
nMotor1MV = 0;
}
nMotor1MV = nMotor1MV; // Стояло: nMotor1MV = nMotor1MV / 5; Зачем в конце стоит "/ 5" ?
if (nMotor2SP > 100) {
nMotor2MV = nSpeedSP;
}
else if (nMotor2SP < -100) {
nMotor2MV = -nSpeedSP;
} else {
nMotor2MV = 0;
}
nMotor2MV = nMotor2MV; // Стояло: nMotor2MV = nMotor2MV * -1; Зачем в конце стоит "* -1" ?
}
/////////////////////////////////////////////////
/////////////////////////////////////////////////
void phMotorRun()
{
stpMotor1.setSpeed(nMotor1MV); // для регултровки скорости от джойстика, "nMotor1MV" менял на "nMotor1SP". Результат, максимальная скорость упала на +-50%, а так же моторы начали тикать как секундная стрелка часов.
stpMotor2.setSpeed(nMotor2MV);
stpMotor1.runSpeed();
stpMotor2.runSpeed();
}
- GeSHi © Codebox Plus
Спасибо Вам!!!