Панорамная головка на Arduino
Re: Панорамная головка на Arduino
мы можем в личке по общаться? Можете вашу почту
-
- Сообщения: 30
- Зарегистрирован: 07 дек 2014, 22:57
Re: Панорамная головка на Arduino
Приветствую Вас 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);" Что это значение обозначает?
Да, к стати, из скетч-кода удалил все, что было связано с концевыми кнопками. Они не нужны.
Спасибо Вам!!!
Спустя долгое время, снова нуждаюсь в Вашем совете.
А именно, пытаюсь немного переделать скетч-код из данной ветки. К стати говоря, о данных изменениях, Вас уже спрашивали и другие, но судя по последним "коментам", до практики это так и не дошло наверное.
Итак, нужда в следуйшем:
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);" Что это значение обозначает?
Да, к стати, из скетч-кода удалил все, что было связано с концевыми кнопками. Они не нужны.
Код: Выделить всё
#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();
}
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Панорамная головка на Arduino
Привет!
Макроопределения MOTOR1_SPR и MOTOR2_SPR в строках 10 и 11 нигде в коде не используются. Их можно смело выкинуть. Видимо остались от предыдущего проекта.
С MOTOR1_INIT_SPEED и MOTOR2_INIT_SPEED аналогично - не используются.
Макроопределения MOTOR1_SPR и MOTOR2_SPR в строках 10 и 11 нигде в коде не используются. Их можно смело выкинуть. Видимо остались от предыдущего проекта.
С MOTOR1_INIT_SPEED и MOTOR2_INIT_SPEED аналогично - не используются.
-
- Сообщения: 30
- Зарегистрирован: 07 дек 2014, 22:57
Re: Панорамная головка на Arduino
И сново здравствуйте!
На англо-язычных просторах Интернета нашел готовый пример скетч-кода с так называемым RAMP-ом или по ихнему S-Curve.
Попробовал, это то что надо!!!! Мотор плавно стартует, некоторое время вращается на заданной скорости и потом медленно тормозит!
Одним словом, МЕЧТА всех пользователей кино-оператоскими головками, кранами, слайдерами и т.д. и т.п.
Вот только теперь вопрос, как внедрить этот "S-Curve" скетч-код в Ваш скетч "Панорамная головка на Arduino"?
Mr.Kubikus, помогите ПЛИЗЗЗЗ!!! Нужно привязать данный скетч на джойстик.
Знаю, что уже писал это ранее, все же хочу повторится.
- При нажатии на джойстик, мотор плавно стартует.
- Чем больше отклонение джойстика, тем выше скорость мотора.
- Порог максимальной скорости, хочется задавать отдельным потенциометром.
- При отпускании джойстика в исходное положение, мотор плавно тормозит.
- Время плавного СТАРТа и СТОПа хочется задавать отдельным потенциометром.
За ранее СПАСИБО!!!
На англо-язычных просторах Интернета нашел готовый пример скетч-кода с так называемым RAMP-ом или по ихнему S-Curve.
Попробовал, это то что надо!!!! Мотор плавно стартует, некоторое время вращается на заданной скорости и потом медленно тормозит!
Одним словом, МЕЧТА всех пользователей кино-оператоскими головками, кранами, слайдерами и т.д. и т.п.
Вот только теперь вопрос, как внедрить этот "S-Curve" скетч-код в Ваш скетч "Панорамная головка на Arduino"?
Mr.Kubikus, помогите ПЛИЗЗЗЗ!!! Нужно привязать данный скетч на джойстик.
Знаю, что уже писал это ранее, все же хочу повторится.
- При нажатии на джойстик, мотор плавно стартует.
- Чем больше отклонение джойстика, тем выше скорость мотора.
- Порог максимальной скорости, хочется задавать отдельным потенциометром.
- При отпускании джойстика в исходное положение, мотор плавно тормозит.
- Время плавного СТАРТа и СТОПа хочется задавать отдельным потенциометром.
За ранее СПАСИБО!!!
Код: Выделить всё
/*
=============================================================
= Project: S curve
= Language: Arduiino r12
= Date: January 2008
= Author: C. Eckert
=============================================================
*/
// Givens
long ta = 3e6; // acceleration time (microsec)
long td = 3e6; // decelleration time (microsec)
long Vm = 3200; // steady state velocity (pulse/sec)
long Pt = 12800; // total number of pulses for move (1600 steps per rev)
// Other variables
long dly; // stepper pulse delay (microsec)
long t = td/9; // current time (microsec) - You need to seed the initial time with something > 0
// so you don't calculate to long of a delay
long t12; // time during constant velocity (microsec)
int count = 0; // count the number of pulses
int Perr = 0; // error in position
// Arduino pins
#define dirPin 3
#define stepPin 12
void setup() {
Serial.begin(9600);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
// Calculate the time at constant velocity
t12 = (Pt/(Vm/1e6))-0.5*(ta+td);
Serial.println(); Serial.println();
Serial.println("Setup Done");
}
void loop()
{
digitalWrite(dirPin, LOW); // Set the stepper direction
// Decide which part of the velocity curve your at
if (t<ta) { // Acceleration
//Serial.println ("Acceleration Curve");
dly = (ta)/(2*(Vm/1e6)*t);
}
else if (t>=ta && t<(ta+t12)){ // Constant velocity
//Serial.println ("Constant Velocity");
dly = 1/(2*(Vm/1e6));
}
else if (t>=(ta+t12) && t<(ta+t12+td)){ // Deceleration
//Serial.println ("Deceleration Curve");
dly = 1/(2*((Vm/1e6)-(Vm/(1e6*td))*(t-ta-t12)));
}
t = t+2*dly; // update the current time
//Serial.print("dly: "); Serial.print (dly); Serial.println(" microsec");
//Serial.print ("Current time: "); Serial.print(t); Serial.println(" microsec");
// Move stepper one pulse using delay just calculated
digitalWrite(stepPin, HIGH);
delayMicroseconds(dly);
digitalWrite(stepPin, LOW);
delayMicroseconds(dly);
count ++;
// The move is finished
if (t>(ta+t12+td)){
Serial.println ("Move Complete");
Serial.print ("Total steps indexed: "); Serial.println (count);
// Correct for any position error due to rounding
Perr = Pt-count;
if (Perr < 0) {
digitalWrite(dirPin, 1^digitalRead(dirPin)); // reverse the stepper direction
delay(50);
Perr = -1*Perr;
}
for (;Perr>0;){
digitalWrite(stepPin, HIGH);
delayMicroseconds(dly);
digitalWrite(stepPin, LOW);
delayMicroseconds(dly);
Perr--;
}
count=0;
t=td/9;
delay (1000);
}
}
-
- Сообщения: 30
- Зарегистрирован: 07 дек 2014, 22:57
Re: Панорамная головка на Arduino
Неужели ни кто не в состоянии помочь?
Люди, вы же добрые внутри!
Люди, вы же добрые внутри!
Re: Панорамная головка на Arduino
ребята , а кто то доработал этот скетч ??? если да поделитесь плиз