roboforum.ru

Технический форум по робототехнике.

DC Servo Controller(makerbot)

Резисторы, транзисторы, конденсаторы, микросборки, чип компоненты ...
Вопросы согласования управляющих модулей с периферией.

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 11 июл 2011, 17:09

можешь заснять что значит "доползает"?

Добавлено спустя 1 минуту 7 секунд:
убери два слеша вначале //dir = digitalRead(DIR_PIN); перезалей и попробуй с reprap ?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 11 июл 2011, 19:30

слепил наконец
в репрапе сейчас попробую


Добавлено спустя 8 минут 30 секунд:
надо закомментить?
Код: Выделить всёРазвернуть
    while(!Serial.available()){
      Serial.println("A");
      __builtin_avr_delay_cycles(10000000);
    }


Добавлено спустя 11 минут 46 секунд:
..закомментил
хоть кривенько и только в одну сторону, но шагает

Добавлено спустя 32 минуты 19 секунд:
ты говорил, что на вики встречал инфу о конденцаторах у коллекторных двигателях.
что-то найти нигде не могу
как примерно может вопрос звучать для поиска?
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 11 июл 2011, 19:57

мде что то я тоже не могу найти, вот что нашёл forum11/topic6902.html
http://forum.rcdesign.ru/f20/thread88016.html

конденсатор керамический!
..закомментил
хоть кривенько и только в одну сторону, но шагает


на видео вроде в обе стороны?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 11 июл 2011, 20:01

на видео через ком порт
в репрапе не реверсит
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 11 июл 2011, 20:17

а выложи твой код, что у тебя сейчас получилось?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 11 июл 2011, 20:26

это для репы
Код: Выделить всёРазвернуть
#define QUAD_A_PIN            2
#define QUAD_B_PIN            3
#define DEBUG_PIN             4
#define MOTOR_SPEED_PIN       5
#define MOTOR_DIR_PIN         6
#define MOTOR_SLEEP_PIN       7
#define MOTOR_MODE_PIN        8
#define STEP_PIN              11
#define DIR_PIN               12
#define ENABLE_PIN            13

#define MOTOR_START_PWM         107
#define STEP_SIZE         10

volatile int position;
int target;

char incoming; // incoming serial data
char cmd_arr[80]={0};
int _i=0;

bool manual_mode = false;

bool newStep = false;
bool newEnable = false;
bool oldStep = false;
bool oldEnable = true;
bool dir = false;
bool olddir = false;
byte motor_speed = 0;

unsigned char eq=0; // stable position counter

void setup()
{
    Serial.begin(38400);
   
//   while(!Serial.available()){
//    Serial.println("A");
//     __builtin_avr_delay_cycles(10000000);
//   }
    Serial.flush();
   
    Serial.println("MakerBot DC Servo Controller v1.0");

    pinMode(QUAD_A_PIN, INPUT);
    pinMode(QUAD_B_PIN, INPUT);

    pinMode(DEBUG_PIN, OUTPUT);

    pinMode(MOTOR_SLEEP_PIN, OUTPUT);
    digitalWrite(MOTOR_SLEEP_PIN, LOW);

    pinMode(MOTOR_MODE_PIN, OUTPUT);
    digitalWrite(MOTOR_MODE_PIN, LOW);

    pinMode(MOTOR_SPEED_PIN, OUTPUT);
    digitalWrite(MOTOR_SPEED_PIN, LOW);

    pinMode(MOTOR_DIR_PIN, OUTPUT);
    digitalWrite(MOTOR_DIR_PIN, LOW);

    pinMode(STEP_PIN, INPUT);
    pinMode(DIR_PIN, INPUT);
    pinMode(ENABLE_PIN, INPUT);

    attachInterrupt(0, read_quadrature_a, CHANGE);
    attachInterrupt(1, read_quadrature_b, CHANGE);
   
    //motor turn on
    digitalWrite(MOTOR_SLEEP_PIN, HIGH);
    delay(1); //give it a millisecond to turn on.

}

void loop()
{
    newEnable = digitalRead(ENABLE_PIN);
    newStep = digitalRead(STEP_PIN);
   
    dir = digitalRead(DIR_PIN);



   if (Serial.available()) {
      incoming = Serial.read(); 
      if (incoming == 's'){  //step
         newStep ^= 1;
         Serial.flush();
         Serial.print("newStep=");
         Serial.print(newStep,DEC);
         Serial.print("  target=");
         Serial.print(target,DEC);
         Serial.print(" position=");
         Serial.println(position,DEC);
      }else if (incoming == 'e'){  //enable
         newEnable ^= 1;
         Serial.flush();
         Serial.print("newEnable=");
         Serial.println(newEnable,DEC);
      }else if (incoming == 'm'){  //enable
         manual_mode ^= 1;
         Serial.flush();
         Serial.print("manual_mode=");
         Serial.println(manual_mode,DEC);
      }else if (incoming == 'd') { //direction
         dir ^= 1;
         Serial.flush();
         Serial.print("Dir=");
         Serial.println(dir,DEC);
      }else if (incoming == '\n' || incoming == '\r'){ //enter
         cmd_arr[_i]=0;
         motor_speed=atoi(cmd_arr);
         analogWrite(MOTOR_SPEED_PIN, motor_speed);
         Serial.flush();
                        Serial.println();
         Serial.print("motor_speed=");
         Serial.println(motor_speed,DEC);
         _i=0;
         cmd_arr[_i]=0;
      }else if ((incoming > 48) or (incoming < 57)){ //numbers only
         cmd_arr[_i]=incoming; //copy the serial byte to the array
         _i++; // increase the array index
         Serial.flush();
         //Serial.print(_i);
         Serial.print(incoming);
      }
   }
    

/*
    //low to high transition
    if (!oldEnable && newEnable)
    {
        //enable is active low, so disable.
        digitalWrite(MOTOR_SLEEP_PIN, LOW);
        digitalWrite(MOTOR_SPEED_PIN, LOW);
    }
    // high to low transition
    else if (oldEnable && !newEnable)
    {
        //enable is active low, so enable.
        digitalWrite(MOTOR_SLEEP_PIN, HIGH);
        delay(1); //give it a millisecond to turn on.
    }
*/
    //enable is active low, so only do this if we're enabled.
    if (!newEnable)
    {
   

        // step signal is on the low to high transition.
        if (!oldStep && newStep)
        {
            eq=0; // reset stable position counter
            if (dir)
                target+=STEP_SIZE;
            else
                target-=STEP_SIZE;
        }

   int position_tmp=position;
   
   if(position_tmp == target){
      if(eq>3){ //reset position and target counter
          position^=position;
          position_tmp^=position_tmp;
          target^=target;
      }
      else eq++;
      
   }else eq=0; // reset stable position counter
   
         if(!manual_mode){
                motor_speed = 0;
                int distance = abs(position_tmp-target);

                if (distance > 255)
                  motor_speed = 255;
                else
                  motor_speed = MOTOR_START_PWM + distance;
         }

        //super primitive control of the motor.
      /*
      //revers of motor
             if (position_tmp > target)
         {
            digitalWrite(MOTOR_DIR_PIN, HIGH);
            analogWrite(MOTOR_SPEED_PIN, motor_speed);
         }
         else if (position < target)
         {
            digitalWrite(MOTOR_DIR_PIN, LOW);
            analogWrite(MOTOR_SPEED_PIN, motor_speed);
         }
         else
         {
            digitalWrite(MOTOR_SPEED_PIN, LOW);
         }
      */
        if (position_tmp > target)
        {
            digitalWrite(MOTOR_DIR_PIN, LOW);
            analogWrite(MOTOR_SPEED_PIN, motor_speed);
        }
        else if (position_tmp < target)
        {
            digitalWrite(MOTOR_DIR_PIN, HIGH);
            analogWrite(MOTOR_SPEED_PIN, motor_speed);
        }
        else
        {
            digitalWrite(MOTOR_DIR_PIN, HIGH);
            digitalWrite(MOTOR_SPEED_PIN, LOW);
        }

        oldStep = newStep;
    }

    oldEnable = newEnable;

        /*
          delay(1000);
          Serial.print("Pos:");
          Serial.println(position, DEC);
        */
}

void read_quadrature_a()
{
    // found a low-to-high on channel A
    if (digitalRead(QUAD_A_PIN) == HIGH)
    {
        // check channel B to see which way
        if (digitalRead(QUAD_B_PIN) == LOW)
            position--;
        else
            position++;
    } // found a high-to-low on channel A
    else
    { // check channel B to see which way
         if (digitalRead(QUAD_B_PIN) == LOW)
             position++;
         else
            position--;
    }
}

void read_quadrature_b()
{
    // found a low-to-high on channel A
    if (digitalRead(QUAD_B_PIN) == HIGH)
    {
        // check channel B to see which way
        if (digitalRead(QUAD_A_PIN) == LOW)
            position++;
        else
            position--;
    } // found a high-to-low on channel A
    else
    { // check channel B to see which way
         if (digitalRead(QUAD_A_PIN) == LOW)
             position--;
         else
            position++;
    }
}


Добавлено спустя 3 минуты 22 секунды:
думаю с кондёром поиграться. он у меня не возле щёток, а в клеммах на плате
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 11 июл 2011, 20:31

должно работать, тут ломать нечего, код верный. контакт нормальный у ножки dir?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 11 июл 2011, 20:50

а это хз. надо проверить

Добавлено спустя 14 минут 31 секунду:
..контакт есть
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 11 июл 2011, 21:14

ну не знаю,
попробуй такой код
Код: Выделить всёРазвернуть
      if (incoming == 's'){  //step
         newStep ^= 1;
         Serial.flush();
         Serial.print("newStep=");
         Serial.print(newStep,DEC);
         Serial.print(" dir=");
         Serial.print(dir,DEC);
         Serial.print("  target=");
         Serial.print(target,DEC);
         Serial.print(" position=");
         Serial.println(position,DEC);

посылай с репрппа разные направления и смотри меняется ли переменная dir, посылай с терминала s
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 11 июл 2011, 22:49

это, так понимаю, для версии с ком портом?
коньдёр "104"й поставил возле движка. всёравно не дотягивает

Добавлено спустя 32 минуты 20 секунд:
вроде там где нули - там шагает, где много всего - недотягивает
Код: Выделить всёРазвернуть
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=-20 position=-14
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=-1
newStep=1 dir=0  target=0 position=-1
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=-10 position=-8
newStep=1 dir=0  target=-30 position=-19
newStep=1 dir=0  target=-40 position=-33
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0
newStep=1 dir=0  target=0 position=0


Добавлено спустя 5 минут 51 секунду:
может движёк не годится такой?

Добавлено спустя 2 минуты 38 секунд:
и ещё, если вводить быстро, всё время недотягивает

Добавлено спустя 36 минут 10 секунд:
:o
а что с этим делать?


Добавлено спустя 8 минут 30 секунд:
и как с терминала через репрап отправлять?
---------
В обратную сторону оказывается крутит, но изза этих помех нет стабильности.
нехотя лезет в одну сторону, а когда делаю реверс, некоторое время ползёт тудаже, а потом в обратную сторону
---------
Вот ещё чего высидел: http://wiki.edwindertien.nl/doku.php?id=modules:slider#source_code
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 12 июл 2011, 10:05

ну репрап подключается же не через ком порт? Просто параллельно подключи компорт и репрап.
Да с помехами нужно что то делать.
Я не понял по видео, что срабатывает когда подносишь руку? Появляются шаги?

Попробуй потюненговать, замени
motor_speed = MOTOR_START_PWM + distance;
на
motor_speed = 107+60;
нужно подобрать значение при котором оно будет чётко ходить на этой скорости.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 12 июл 2011, 10:22

тоже не пойму. по схеме, клемы движка идут через индуктивности. закоротил. вроде легче стало. там ещё одна катушка массы разделяет, ещё не закоротил.
подношу руку - шагает вовсю и чётко.
думаю, прежде чем менять что-то, надо эти наводки устранить. такое ощущение, что всё как в вату проваливается. толи с энкодера сигнал пропадает(из за наводок), толи плату я тупо развёл
---
репрап через ком(фтди), как и контроллёр
..а, между собой. мешать друг другу не будут?
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 12 июл 2011, 11:53

нет не будут, просто будут com1 и com2 соответственно в программах нужно будет скорректировать.
проще наверное подключить сначала reprap а зетем подключить драйвер двигателя и в путти поправить с com1 на com2
А зачем ты двигатель через индуктивности подключаешь? Двигатель и так индуктивная нагрузка.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 12 июл 2011, 16:11

индуктивность по схеме вроде стоит
Вложения
L.png
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 12 июл 2011, 16:24

А тут что на фотке, между двигателем и драйвером? download/file.php?id=21025&mode=view
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Пред.След.

Вернуться в Электроника, электротехника

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5