Пример как можно генерировать шаги для ШД

Контроллеры, драйверы, датчики, управляющие устройства.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Bender, новую версию не пробовал, скажу пока за старую неполучается разогнать мотор на всю чтоб мотор остановился. Всякое пробовал и частоту до 9000 поднял, максимум скорость получается поднять до 300
Drive1.setDim(0.1); //установка размера одного шага допустим 0.1мм или 0.1градус
Drive1.setFreq(9000);//установили частоту нашей системы. Это частота характеризующая быстродействие работы нашего генератора

if(!Drive1.setParam(1,300,1,5)
Если задаю больше 300 ошибка. При этом реальная скорость мотора больше 260 об/мин (измеряю лазерным тахометром) не подымается.

Попробовал на той же ардуине разогнать мотор максимум выжал 960 об/мин дальше мотор просто уходит в стопор. то есть Ардуина может выдавать шустро сигналы :)


Вот таким левым кодом разогнал мотор до 960 об/мин

Код: Выделить всё

   for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(300); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
        for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(250); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
    
        for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(200); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
    
        for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(150); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
         for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(100); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
    
            for (f = 0; f < 500; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(80); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
            for (f = 0; f < 5000; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(70); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
            for (f = 0; f < 5000; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(65); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    } 
   for (f = 0; f < 50000; f++)
      {
        digitalWrite(outBeep, LOW); //                      
        delayMicroseconds(65); // пауза 3 сек 
        digitalWrite(outBeep, HIGH); //        
        delayMicroseconds(100); // пауза 3 сек         
    }
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Bender писал(а):А если максимальная скорость задана больше максимально возможной, то будет установлена максимально возможная.
Скорость больше 315 об/мин поднять не могу. Хоть какую частоту ставь скорость больше не подымается.
Bender писал(а):+ обновил расчёт скорости
Если поставить торможение более 1 сек, то вначале тормозится плавно, а к концу начинает грубо шагать слышны шаги.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Impartial »

aftaev писал(а):Если поставить торможение более 1 сек, то вначале тормозится плавно, а к концу начинает грубо шагать слышны шаги.
Похоже не верный принцип генератора шагов выбран.
Генератор шагов это накапливающий сумматор с фиксированной точкой в котором перенос используется как сигнал "шаг" а знак входного параметра скорости как сигнал "дир". Не знаю как это выглядит в терминах языка ардуины, но смысл в том, что надо взять 32 битное число и суммировать скорость, допустим в формате 12.19 а старший бит использовать как шаг. Может так и сделано , не разбирался.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Ардуина может выдерживать заданные интервалы времени. Почему нельзя расчитать разгон и торможение в задержках времени?
допустим импульс шага = 5мкс
Тогда
шаг(5мкс) - пауза 10мс - шаг(5мкс)- пауза 9мс - шаг(5мкс)- пауза 8мс - шаг(5мкс)- пауза 7мс - шаг(5мкс) ....
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Impartial »

Заранее извиняюсь, я не разбирался с кодом, приведенным выше. Поэтому могу повторить то, что уже все знают.
Для начала нужно сформировать временную траекторию. Допустим есть отрезок прямой АВ. Далее учитывая максимально заданные скорость и ускорение разбиваем весь участок на сервоциклы(допустим 1мс как в ЕМС или 5мс как в маче). Считаем, что скорость не периоде сервоцикла постоянна.
Если нужно S траектория ускорений пропускаем выход планировщика через синусную таблицу, ну или любую какая прийдет в голову.
Вот в этой временной траектории и закладываем все разгоны-торможения.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Impartial писал(а):Вот в этой временной траектории и закладываем все разгоны-торможения.
как рассчитать :thinking:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Impartial »

Сначала нужно посчитать за какое время проедем весь участок учитывая максимальную скорость и ускорение. Потом считаем времена участков разгона/торможения. Разбиваем на сервоциклы и проигрываем. В ЕМС неплохо написан планировщик траектории. Можно оттуда код дернуть.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Serg »

aftaev писал(а):А у кого он есть. Наверно есть у СТМ32
У старших ардуин тоже есть, но см. ниже.
Serg-tmn писал(а):
UAVpilot писал(а):У ардуинщиков это плохо получается.
А что, там работа по прерываниям невозможна в принципе?
Возможна, но нужно успевать все их обрабатывать, а ардуинский компилятор генерит очень "неэффективный" код.
Как вариант, если например LCD конектится по SPI, задействование аппаратной реализации SPI, если она есть в чипе. Но в случае с ардуиной тут могут быть полторы засады: 0.5 - нужно правильно настроить этот порт (вроде должно получиться); 1 - надеяться, что контакты, на которые одевается LCD и представляют собой вывода этого аппаратного SPI.
Ну и всё равно работать с прерываниями от таймера и с буфером, из которого данные будут выводится в этото порт. Но в случае с аппаратным SPI хоть битики в провода будут не ЦП передаваться.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

UAVpilot, приведи пример у кого есть аппаратный SPI
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

В описание Ардуины нашел:
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Посредством данных выводов осуществляется связь SPI, например, используя библиотеку SPI. Также выводы SPI могут быть выведены на блоке ICSP, который совместим с платформами Uno, Duemilanove и Diecimila.
Описание библиотеки http://arduino.ru/Reference/Library/SPI
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Serg »

Да, это оно, только по хорошему надо исходники библиотеки глянуть, чтоб убедиться, что используется именно аппаратный, а не эмуляция.
Ты лучше пока скажи по какому интерфейсу твой LCD подключается, а то вдруг не по SPI. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

UAVpilot писал(а):Ты лучше пока скажи по какому интерфейсу твой LCD подключается, а то вдруг не по SPI.
экран TFT
3.2TFT screen breakout.pdf
(12.8 КБ) 823 скачивания
Схема Ардуины
http://arduino.ru/Schematic/arduino-meg ... ematic.pdf
В этих схемах черт ногу сломит :hehehe:


Вау, Ардуина переходит на Arduino Due — плата микроконтроллера на базе процессора Atmel SAM3X8E ARM Cortex-M3 http://arduino.ru/Hardware/ArduinoDue
частота процессора (CPU) 84 МГ

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Serg »

aftaev писал(а):экран TFT
Обломись - там паралельный интерфейс с режимами 8 и 16 bit.
aftaev писал(а):Arduino Due — плата микроконтроллера на базе процессора Atmel SAM3X8E ARM Cortex-M3
Знатная теперь путаница будет, да ещё и со сгоревшими платами...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

UAVpilot писал(а):Обломись - там паралельный интерфейс с режимами 8 и 16 bit.
Нужно пока сделать чтоб шаги генерил как нужно, потом с индикацией разбираться.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение ukr-sasha »

aftaev писал(а):Нужно пока сделать чтоб шаги генерил как нужно, потом с индикацией разбираться.
Саша, а зачем тебе это нужно? Ты же пользуешься готовыми контроллерами с богатыми возможностями.
Скорее всего, до нормального работоспособного состояния, в скором времени не удастся его довести. Или это хобби своего рода?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

ukr-sasha писал(а):Саша, а зачем тебе это нужно? Ты же пользуешься готовыми контроллерами с богатыми возможностями.
Нужно для:
1.Делаю шлифовальный станок 3м длиной нужно туды сюды таскать ось.
2.Есть станок ТШ-1 (ташниловка) загружается 12 банок с зерном и нужно плавно раскрутить банки и вращать 5 минут. Иногда менять направления вращения. В банках идет смешивание. Станок вращается шаговиком.
3.У знакомых есть гельотина нужно задал сдвинуться на 100мм, нажал пуск ось проехала.
4. Есть китайский станок с поворотной осью. Станок управляется через китайский пульт 3 оси. При работе в режиме ротации одна ось Х переключается на ратацию. Нужно чтобы можно было на каком либо устройстве задал повернуть ось на 90, 40 , 1 град ось повернулась и стояла пока обрабатывают поверхность.
Я не один кому этонужно система управления задним упором #1

Зачем на такие задачи ставить комп?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение aftaev »

Еще забыл про одну задачу. В лаборатории нужнораспылять специальный аэрозоль. Форсунку нужно крутить в разные направления. Аэрозоль подается при помощи перистальтического насоса http://www.ebay.com/sch/i.html?_trksid= ... &_from=R40 имеется только голова. Вот этот насос будет вращать шаговик и форсунку поворачивать тоже шаговик.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2181
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение ukr-sasha »

Блин, ну и сфера интересов у тебя. Молодчина. :good:
Олег А
Новичок
Сообщения: 10
Зарегистрирован: 18 янв 2013, 17:28
Репутация: 0
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение Олег А »

Здравствуйте Всем.
Прошу прощения если был невнимателен,
setFreq(1000) - в каких единицах задается частота, и этот параметр связан с частотой процессора?
Bender писал(а): Drive1.setParam(1,5,0.1,0.1);//Установили режим движения соотв. (начальная скорость,конечная скорость,время разгона(с),время торможения(с))
и нельзя ли разгон/торможение задавать не по времени, а в каких то целых единицах?, скажем в шагах.
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Пример как можно генерировать шаги для ШД

Сообщение wldev »

Маленько подправил код с целью увеличения скорости вращения.
Олег А писал(а):setFreq(1000) - в каких единицах задается частота, и этот параметр связан с частотой процессора?
Это максимальная частота в герцах которую может выдать программа т.е. самый быстрый ход...
на неё влияет аппаратная часть устройства и сложность вычислений в программе.
Олег А писал(а):и нельзя ли разгон/торможение задавать не по времени, а в каких то целых единицах?, скажем в шагах.
добавил функцию
+setParamL(начальная скорость,конечная скорость, длина разгона, длина торможения)

Вскоре ручной режим постараюсь написать...
Вложения
WLDrive.rar
(3.01 КБ) 476 скачиваний
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Ответить

Вернуться в «Электроника»