два шаговых с управлением скорости

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем L&K, 23 июн 2018.

  1. L&K

    L&K Нуб

    Добрый день
    просьба помочь кто знает , четвертый день не могу запустить чтобы два нема 17 вращались с регулировкой скорости от потенциометра (резистора), каждый от своего потенциометра, независимо друг от друга.
    за основу взят вот этот скетч
    #include <Stepper.h>
    const int stepsPerRevolution = 2500; // «» - это количество шагов, за которые вал выполняет
    // полный оборот; у вашего мотора это число может быть другим
    // инициализируем библиотеку Stepper на контактах 3,5:
    Stepper myStepper(stepsPerRevolution, 3, 5);
    int stepCount = 0; // количество шагов, которые сделал мотор
    /*Управляем сервой в зависимости от освещенности
    Используем фотосопротивление, может быть любой аналоговый сенсор
    */
    #include <Servo.h> //Подключаем библиотеку Servo
    Servo motor;
    int sensePin = 1;//Обьявляем 0 аналоговый пин
    void setup()
    {
    analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта.Необязательное
    /* Будем смотреть вывод на сериальном мониторе с Ардуино, для чего его инициализируем
    Заодно можно посмотреть диапазон работы датчика чтобы в этом диапазоне поворачивать серву*/
    Serial.begin(9600);
    motor.attach(4); // Подключаем серву на 5 пин
    }
    void loop()
    {
    // Печатаем на монитор
    Serial.println(analogRead(sensePin));
    int val = analogRead(sensePin);// Создаем переменную val для чтения analogRead
    val= constrain(val,0 ,1000);// Ограничиваем диапазон работы датчика посмотрев его на мониторе
    int motorAngl = map(val,1023, 0, 180,0);//Преобразуем диапазон выдаваемый датчиком в диапазон углов сервы
    motor.write(motorAngl);// Устанавливаем серву на угол который получаем через преобразование
    // считываем значение потенциометра:
    int sensorReading = analogRead(A0);
    // подгоняем считанное значение под диапазон от «0» до «100»:
    int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
    // задаем скорость мотора:
    if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // шагаем на 1/100 от полного оборота:
    myStepper.step(stepsPerRevolution / 100);
    }
    }
    удалено все что касается серво и продублирован так как я себе это представлял, получилось вот это
    #include <Stepper.h>
    const int stepsPerRevolution = 2500; // «» - это количество шагов, за которые вал выполняет
    // полный оборот; у вашего мотора это число может быть другим
    const int stepsPerRevolution1 = 2500; // «» - это количество шагов, за которые вал выполняет
    // инициализируем библиотеку Stepper на контактах 3,5:
    Stepper myStepper(stepsPerRevolution, 3, 5);
    Stepper myStepper1(stepsPerRevolution, 4, 6);
    int stepCount = 0; // количество шагов, которые сделал мотор
    int stepCount1 = 1; // количество шагов, которые сделал мотор
    void setup()
    {
    }
    void loop()
    { {
    // считываем значение потенциометра:
    int sensorReading = analogRead(A0);
    // подгоняем считанное значение под диапазон от «0» до «100»:
    int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
    // задаем скорость мотора:
    if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // шагаем на 1/100 от полного оборота:
    myStepper.step(stepsPerRevolution / 100);
    }}
    {
    // считываем значение потенциометра:
    int sensorReading1 = analogRead(A1);
    // подгоняем считанное значение под диапазон от «0» до «100»:
    int motorSpeed1 = map(sensorReading1, 0, 1023, 0, 100);
    // задаем скорость мотора:
    if (motorSpeed1 > 0)
    {
    myStepper1.setSpeed(motorSpeed1);
    // шагаем на 1/100 от полного оборота:
    myStepper1.step(stepsPerRevolution1 / 100);
    }
    } }

    В результате когда скетч для одного мотора все работает отлично хорошо, когда для двух, то они работают но синхронно и регулируются обоими потенциометрами.
    Добавлю , мне реверс не нужен, использую драйвера А4988, ИСПОЛЬЗУЮ ТОЛЬКО СТЭП ,
    плис , подскажите что исправить, правда я очень слаб в этом деле посему если такое возможно то более доступным "языком"
     
  2. parovoZZ

    parovoZZ Гуру

    Все реализуется очень просто на 2 таймерах и модуле сравнения.
     
  3. L&K

    L&K Нуб

    …………. да, это именно тот доступный и понятный ответ, как я и хотел...……..


    ......….если кто то еще захочет подобное написать, пожалуйста не надо , просто представьте что вы что то ищите, перечитываете в надежде почерпнуть что то ценное , тратите уйму времени , а натыкаетесь на мусор который люди от избытка времени ссыпают во все дыры инета ……..
     
  4. parovoZZ

    parovoZZ Гуру

    изучи периферию мк, прежде чем за него браться. Будет что не понятно - задай конкретный вопрос.
    http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/16.htm

    На блюдечке да с золотой каёмочкой блюдо дают в другом разделе форума.
     
    Mitrandir, Igor68 и Daniil нравится это.
  5. Daniil

    Daniil Гик

    Оформите код, пожалуйста, в специальные теги.
     
  6. L&K

    L&K Нуб

    у тебя руки чешутся? пишешь бред, ты для замены колеса изучаете основы автомобилестроения? ...….нахватаетесь вершков и пальцы гнете , а капнуть глубже то выяснится , что сами толком не знаете потому и не отвечаете , встречал таких, после как сказал "напиши скетч заплачу" , чел пропал и умничать перестал....
    я от тебя ничего не требую, я прошу тех кто знает и кому не лень указать на ошибки доступным языком или дать ссылку где такое скачать можно
    отвечать не надо, диалог окончен...
     
  7. parovoZZ

    parovoZZ Гуру

    Я почему и не хочу ничего писать и давать конкретных примеров, ибо опять будет полное неудовлетворение - у меня твой код не компилируется, мне сюда надо кнопочку вставить, дисплей прикрутить, как мне это сделать, помоги пожалуйста ....почему ты не хочешь помогать, ведь это твой код и т. д. и т. п.
     
  8. parovoZZ

    parovoZZ Гуру

    Да не надо ничего оформлять- он код управления сервой хочет переделать под шаговик. Это равносильно написанию кода с нуля.
     
  9. Tomasina

    Tomasina Иномирянин

    В примерах к AccelStepper есть образец параллельной работы нескольких ШД.
     
  10. L&K

    L&K Нуб

    Да, но там нет управления скоростью по отдельности, ( я не нашел) а если я его там прописываю то двигателя мешают друг другу, по одному работают отлично , а пара...………………. ладно , почитал тут в разных разделах, похоже помощь искать тут бесполезно, зря регистрировался ……………………..
     
  11. parovoZZ

    parovoZZ Гуру

    Ну ты же не говоришь, что конкретно у тебя не получается. В своем коде, прежде всего, ты должен лучше всех разбираться. А за готовым кодм в другой раздел.