Управление роботом на базе прошивке Marlin для 3д принтера

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем pavelsplavel, 5 янв 2017.

  1. CryNET

    CryNET Гик

    Сам по себе RS232, как писали выше - последовательный. Передать можно 1 байт (8 бит) инфы за раз. Всё равно нужно будет писать программу, которая в цикле будет "скакать" между 20ю шаговиками, каждый раз обновляя статус текущего шаговика. По типу: "массив длиною 20. в нем состояние шаговика - 1 и 0 (шагает-не шагает). Таким образом бегая по шаговикам каждый раз смотреть в массив - шагать или нет". Параллельно с этим надо будет принимать байты с компа.

    //Ну это так, поток мысли. Думаю можно развить тему...
     
  2. CryNET

    CryNET Гик

    Частота довольно большая, думаю хватит (чисто экспериментом только проверить)
     
  3. CryNET

    CryNET Гик

    Так вы простой дизайнер или еще программки пишите? На компьютере я имею ввиду. Ведь если я правильно понял, вашего опыта достаточно, чтобы написать программу на компьютере для управления ардуиной, так?
     
  4. Igor68

    Igor68 Гуру

    Ваша прошивка должна с чем-то работать! Даже сигналов не хватит на 20 моторов. О чём шум?
    Наверное я не могу вам оказать помощь - Простите!
     
  5. CryNET

    CryNET Гик

    Хорошо подмечено :)
    Разве что сдвиговыми регистрами спасаться или Mega использовать, а не Uno
    Но тут уже встает вопрос - может тогда всё-таки с SoC посмотрите?)
     
    Igor68 нравится это.
  6. ostrov

    ostrov Гуру

    Вопрос про потоки функционирования или приема сообщений? Если второе, то хоть тысячу, если правильно организовать протокол. Вопрос останется только в скорости передачи такого объема информации. Нои тут есть секретики. )
     
  7. pavelsplavel

    pavelsplavel Нуб

    Есть один момент мне не ясен в прошивке. Объясните плыз, я его выделил Жирным.


    #include <Stepper.h>

    const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
    // for your motor

    const int motorCount = 1;

    int Speed = 100;
    int Step = 100;
    int val = 0;
    int motor_index = 0;
    int character_index = 0;

    unsigned char characters[3];

    int saveValue(){
    //get values (0-999)
    int hunderter = characters[0] * 100;
    int zehner = characters[1] * 10;
    int einser = characters[2];

    val = hunderter + zehner + einser;
    }


    // initialize the stepper library on pins 8 through 11:
    Stepper myStepper(stepsPerRevolution, 8,9,10,11);

    int stepCount = 0; // number of steps the motor has taken

    void setup() {
    Serial.begin(115200);

    }

    void loop() {
    //////////////////////////////// get vvvv rs232 signal
    while (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    unsigned char c = Serial.read();

    if (':' == c) {
    saveValue();
    motor_index++;


    if (motor_index == motorCount) {
    motor_index = 0;
    //startTime = millis();
    }
    character_index = 0;
    return;
    }
    if (character_index < 3) {
    characters[character_index] = c-48;
    character_index++;

    }
    }
    ////////////////////////////set motor values

    // int motorSpeed = Speed;
    Serial.println (val);
    if (val <= 125)
    {
    Speed = val;
    Step = 100; // also direction
    }
    if (val > 125)
    {
    Speed = val - 125;
    Step = -100;
    }
    // set the motor speed:
    if (Speed > 0) {
    myStepper.setSpeed(Speed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution/Step);
    }
    }

    Это прошивка работает следующим образом:
    Ардуина получает цифры зашифрованные от 0 до 250 и мотор начинает работать то в одну то во вторую сторону.
     
    Последнее редактирование: 6 янв 2017
  8. pavelsplavel

    pavelsplavel Нуб

    Что такое SoC??
     
  9. pavelsplavel

    pavelsplavel Нуб

    Думаю больше второе, но проблема остается в индивидуальном приеме сигнала для каждого из моторов.
     
  10. ostrov

    ostrov Гуру

    Отправляете пакетами, в каждом адрес приемного устройства, сами данные и, желательно, контрольная сумма.
     
    pavelsplavel нравится это.
  11. ostrov

    ostrov Гуру

    Вот тут хороший пример с пояснениями как сделать простую сеть на несколько устройств с пакетами данных.
     
    pavelsplavel нравится это.
  12. pavelsplavel

    pavelsplavel Нуб

    Функция Stepper возможно только для программирования одного Шаговика??

    В этом коде у меня не получилось запрограммировать на прием отдельного сигнала

    #include <Stepper.h>

    #define PIN_A0 A0
    #define PIN_A1 A1

    const int stepsPerRevolution = 200;

    Stepper myStepper1(stepsPerRevolution, 4, 5, 6, 7);
    Stepper myStepper2(stepsPerRevolution, 8, 9, 10, 11);

    int stepCount = 0;

    void setup() {

    }

    void loop() {

    int sensorReadingA0 = analogRead(PIN_A0);
    int motorSpeedA0 = map(sensorReadingA0, 0, 1023, 0, 100);
    int sensorReadingA1 = analogRead(PIN_A1);
    int motorSpeedA1 = map(sensorReadingA1, 0, 1023, 0, 100);

    if (motorSpeedA0 > 0) {
    myStepper1.setSpeed(motorSpeedA0);
    myStepper1.step(stepsPerRevolution / 100);
    }
    if (motorSpeedA1 > 0) {
    myStepper2.setSpeed(motorSpeedA1);
    myStepper2.step(stepsPerRevolution / 100);
    }
    }
     
  13. CryNET

    CryNET Гик

    System-on-a-Chip - "Система на кристалле", если мне память не изменяет.
    Т.е. какой-нибудь аля Linux на платформе стоит, поверх него программируете на поддерживаемом языке программирования.
     
  14. rkit

    rkit Гуру

    Ну хватит уже, а? Система на кристалле к ОС никакого отношения не имеет. Это железная архитектура, где весь функционал интегрирован в одном чипе.
     
  15. CryNET

    CryNET Гик

    А я писал что ОС имеет отношение к SoC ? Вы ищите там, где ничего нету и скрытых смыслов у меня нету, товарищ.

    //Из контекста смотрите, а не вырывайте. А то смотрится уже не красиво и тема переходит в "срач", не надо так(
     
    Последнее редактирование: 8 янв 2017