отзыв duxe.ru отзывы duxe.ru Шаговые двигатели и контроллеры в моем магазине duxe.ru

самодельный станок с ЧПУ, отзывы duxe.ru

Объявление

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » самодельный станок с ЧПУ, отзывы duxe.ru » Схема контроллера, шаговые двигатели » Разработка "умного" контроллера на МК


Разработка "умного" контроллера на МК

Сообщений 1 страница 30 из 195

1

Дорогие друзья !

Предлагаю начать разработку контроллера для управления 3-4 двигателями. Как особенность выделить псевдо-одновеременное управление всеми двигателями (X,Y,Z,A). Возможно что-то подобное уже изобретено, но мне хочется чтобы одновременное управление было осуществлено программно и с функцией работы через RS-232 в режиме получения мнемокодов. Т.е. например чтобы окружности, кривые линии, овалы, кривые 2-го порядка рисовались не программой для станка, а контроллером; а программа станка таким образом только оперировала бы этими мнемокодами....

Я склонен считать что в таком режиме работы и скорость возрастет многократно и снизится нагрузка на управляющий ПК.

Полагаю также что внести в программу VRI-CNC поддержку такого режима работы особого труда не составит.

Также предполагается, что контроллер за счет внешнего ОЗУ + внутренее ПЗУ будет обладать возможностью программирования к какой-либо клавиатуры посредством написания структурированной программы в мнемокодах с контролем вводимой информации на 4-строчном ЖКИ дисплее, на котором собственно будет также отображаться служебная информация.

0

2

RoBinZon
Чем сложнее механизм, тем нестабильней он работает.
Тут собрались ХОББИСТЫ а не ПРОМЫШЛЕННИКИ.
Схема должна быть ПРОСТА в повторении.
Все ИМХО.

0

3

VVChaif написал(а):

Чем сложнее механизм, тем нестабильней он работает.Тут собрались ХОББИСТЫ а не ПРОМЫШЛЕННИКИ.Схема должна быть ПРОСТА в повторении.Все ИМХО.

Мне кажется что схемы на МК не сверхсложные.....Схемы даже очень простые, а вот прошивка МК - вот в чем собака и порылась.....

0

4

Вся сложность будет заключатся, собственно, она и заключается в программном коде МК... Язык вероятнее всего Си

0

5

Я бы принял участие...

0

6

3BEPb написал(а):

Я бы принял участие...

Дорогой Семен !

Я буду очень рад если вы примете активное участие в данной разработке.

Как вы думаете действительно нужен такой "умный" контроллер, или это излишество ?

С уважением, Пащенко М.Г.

0

7

RoBinZon написал(а):

Т.е. например чтобы окружности, кривые линии, овалы, кривые 2-го порядка рисовались не программой для станка, а контроллером;

Вы уже прикидывали какой камень для этого нужен и сколько времени будут занимать вычисления? Мне например в 2К камень удалось вместить управление 3-мя двигателями и рисование линий из gerber файла. Боюсь, что рисование окружностей туда уже не поместится.

RoBinZon написал(а):

Также предполагается, что контроллер за счет внешнего ОЗУ + внутренее ПЗУ

4х4+2 = 18ног на COM и двигатели. Пусть будем адресовать 1Мег ОЗУ - это ещё 28 ног. И минимум 6 ног на LCD. Получается, что это камень с 64 ногами. Нужен ли такой наворот в хоббийном станке? Или под внешним ОЗУ подразумевается USB флэш?

0

8

koolhatcker написал(а):

Мне например в 2К камень удалось вместить управление 3-мя двигателями и рисование линий из gerber файла

А что за МК вы использовали, и можно ли ознакомиться с вашей разработкой ?

0

9

Использовал 16F628. Обсуждалось это всё в "самодельный станок с ЧПУ » Схема контроллера, шаговые двигатели » Контроллер станка с ЧПУ на PIC с возможностью автономной работы".
Так как интереса никто не проявил (насколько я понял это из-за небольшого объёма памяти и ограничений на обработку Gerber кодов - доступны только G00 и G01), то я забросил разработку.

0

10

koolhatcker написал(а):

Использовал 16F628. Обсуждалось это всё в "самодельный станок с ЧПУ » Схема контроллера, шаговые двигатели » Контроллер станка с ЧПУ на PIC с возможностью автономной работы".Так как интереса никто не проявил (насколько я понял это из-за небольшого объёма памяти и ограничений на обработку Gerber кодов - доступны только G00 и G01), то я забросил разработку.

К сожалению с PIC-контроллерами мне не довелось работать, зато активно работаю с платформой AVR... А интереса не проявили - это зря... С удовольствием посмотрю вашу разработку, жаль G-кодов маловато....

С уважением, Пащенко М.Г.

0

11

RoBinZon написал(а):

К сожалению с PIC-контроллерами мне не довелось работать, зато активно работаю с платформой AVR...

Это особой роли не играет - там всё программно можно сделать.

RoBinZon написал(а):

А интереса не проявили - это зря...

Ну не под дулом автомата же принуждать :)

RoBinZon написал(а):

жаль G-кодов маловато....

А вы не пробовали реализовать обработку всего лишь четырёх кодов - G00, G01, G02, G03 на МК с объёмом памяти 2К? Попробуйте, думаю сразу поймёте что к чему...
Я так понял, что на мелком МК в режиме автономной работы с внешней памятью I2C можно реализовать только сверление. Как максимум - фрезерование небольшой платы с углами изгиба проводников 90 и 45 градусов. Все что касается окружностей, овалов, фрезерования 3D и т.д. - увы...

0

12

ну чтож вы сразу "не проявили интереса"... Если мы молчим это может значить что мы не хотим мешать глупыми вопросами на стадии разработки :)

сейчас допишу свои идеи и думаю вы заметите что мы подходим к таким контроллерам :)

0

13

RoBinZon написал(а):

псевдо-одновеременное управление всеми двигателями (X,Y,Z,A)

Сразу оговорюсь, что в микроконтроллерах я не очень...
Не то, чтобы совсем, но дальше повторения готовых конструкций дело не шло.
Где-то на форуме обсуждалась мысль, что G-коды преобразуются, грузятся во флэшку, дальше контроллер, двигателя.
Если допустим 1 байт из флэшки разбить таким образом: биты 1,2 - степ/дир по Х, биты 3,4 - степ/дир по Y , биты 5,6 - степ/дир по Z, биты 7,8 - на усмотрение юзера. Все это кормить микроконтроллеру, а он в свою очередь, пускай таскает оси.
В таком варианте возможно не "псевдо", а одновременное управление всемя двигателями.
Понимаю, что объемы этих кодов будут огромными(По моему, где-то Трудоголик эти вещи просчитывал).
Но и объемы современных флэшек - тоже будь здоров :)
Или не обязательно флэшка... теперешняя память тоже бездонная.
Но это так... мысли в слух.

Отредактировано Dj_smart (2008-04-12 22:20:46)

0

14

Dj_smart написал(а):

В таком варианте возможно не "псевдо", а одновременное управление всемя двигателями.

Мне кажется эта функция актуальна только для роботов - манипуляторов, для которых скорость перемещения имеет огромное значение, ну и может для плоттеров.
Для станков,особенно фрезерных и токарных, скорость перемещений особого значения не имеет, поскольку рабочая скорость очень мала (она задается технологией обработки материала) а время обработки материала несоизмеримо велико по сравнию с временем холостых перемещений.
Второй аргумент: В большинстве случаев основные перемещения будь то на токарных, будь то на фрезерных станках произволится в основном вдоль одной оси, в токарных - вдоль заготовки, во фрезерных по методу строчной развертки, а пемещения по другой оси очень малы, например, резец отводится от заготовкина доли ммиллиметра и потом вгрызается в нее на миллиметр-два при сравнительно длинных перемещениях вдоль заготовки.То есть фактически случаев, когда необходимо двигать инструмент сразу по двум осям на соизмеримые расстояния, практически не бывает. Посмотрите как нибудь за работой настоящего станка с ЧПУ или хотя бы за работой токаря или фрезеровщика, убедитесь, что это так.
Поэтому смысла заморачиваться  даже с псевдосинхронным перемещением не вижу.
Оно получится само собой, поскольку при скорости даже 2000 шагов в секунду время одного шага составляет 500 микросекунд, а за это время АВР или ПИК произведут 4000 элементарных операций.
Если между шагами по разным осям МК сделает 400 вычислений, то несинхронность составит всего 10 % на скорости холостых перемещений. При рабочей скорости несинхронность вообще будет составлять доли процента.

Отредактировано Трудоголик (2008-04-12 23:04:30)

0

15

А я предвидел, что Трудоголик мне по соплям даст! :tomato:

0

16

Dj_smart написал(а):

А я предвидел, что Трудоголик мне по соплям даст!

Да никому я не хочу ни по чему  давать, наоборот, оберегаю вас от лишнего гемороя :)

0

17

Dj_smart написал(а):

Или не обязательно флэшка... теперешняя память тоже бездонная.

О какой бездонной памяти идёт речь? Может я чего-то упустил и появилась недорогая память больших размеров и с малым количеством выводов? С флешками лично у меня не очень - это ж сразу FAT и всё, что с ним связано, а я в этих делах не силён. :(

0

18

Заглянув в отдел EEPROM не нашел ничего дороже 550 руб (500 в инет маге) за чип, даже 64 мб за 500 руб по мойму не дорого (сравнить то с ценами на ШД)
http://www.chipdip.ru/catalog/1744.aspx
Флешки вообще уже дешёвые, 400 руб за 2 гига. Покажите мне модель которая займет 2 гига на хоббийнике... ;-)

... с флешками не очень - не обязательно всё делать самому! "Не делай то, что ктото сделал до тебя и за тебя" старая мудрость не зря придумана ;-)

С большим интересом слежу за темой, очень хотелось бы увидить как станок сам по себе чтото делает, без постоянного участия пк ;-)

0

19

Sheeft написал(а):

очень хотелось бы увидить как станок сам по себе чтото делает

Народ, а если помечтать...
Допустим делаем мы такой контроллер. Плюсы и минусы:
+: Софт - таже программа Романа в режиме степ/дир. Она пережёвывает все эти G - коды и выдает их на контроллер, отслеживает временные параметры для ШД, и многое другое. Для "умного" контроллера ее надо просто слегка упростить. То есть обрабатывать те же G - коды, но не выдавать их в порт, а создавать файл. Про расположение битов в байте я уже писал. Этот файл грузим во флэш USB. Дальше в станок.
+: LPT порт забываем как страшный сон, соединительные кабели иже с ним. То есть комп может стоять где угодно, даже на работе ;) , где можем готовить файлы для станка (Славянская натура, что поделаешь...).
+: Станок, опять же, стоит тоже где угодно. То есть пыль, дым, абразивы, масло, все это где-то в сарайчике :). Пришёл, воткнул флэшку, нажал кнопку пуск или педаль какую и жди.
-: При такой подаче байтов на МК, как я писал, скорость всех двигателей будет определять самый ленивый мотор.
+: Авторские права Романа никоим образом не нарушаются, а за сохранность своих готовых файлов каждый юзер отвечает сам. Вообще-то это, как говорят на Украине, "ДУРЕНЬ ДУМКОЮ БАГАТІЄ", а может в этом что-то и есть.

Ну а теперь можете бить, это знаете, иногда полезно. Быстрее доходит. :suspicious:

0

20

Дорогие мои друзья !

Спасибо за то, что откликнулись на мою идею... Хотя это была всего-навсего идея, есть некоторые наработки на МК ATmega16... Я тоже не великий программер, как и не великий электронщик, НО кое-что умею и кое к чему стремлюсь...

Для размышлений по поводу разработки такого "умного зверька" приведу апноуты по МК AVR: http://www.ineltek.ru/html.cgi/txt/app/ … /index.htm ,там как раз подробно разобраны вопросы подключения USB, граммотный подход к USART и некоторые программные приемы...

Дорогой Sheeft если будет интересно можете ознакомиться с моими думками в CVAVR и PROTEUS....

Я не очень силен в математике, так что не могу придумать одновременного управления 3-мя ШД, с остальным думаю должно быть посложнее....Но первый шаг - управление ШД...Может быть вы предложите какие-нибудь варианты, алгоритмы, схемные решения ?...

А загрузка файла с флеш-памяти предусмотреть опционально...также как и простое управление от ПК (RS-232)....

Из-за того что я немного разбился паяльник пока в руки взять не смогу....

С уважением, Пащенко М.Г.

0

21

Sheeft написал(а):

даже 64 мб за 500 руб по мойму не дорого (сравнить то с ценами на ШД)

Как называется этот чип? Сколько у него ножек?

Sheeft написал(а):

С большим интересом слежу за темой, очень хотелось бы увидить как станок сам по себе чтото делает, без постоянного участия пк ;-)

Если найдёте у себя 16F628, 24сххх и немного свободного времени, то могу выслать прошивку которая будет сверлить отверстия на фиксированную глубину.

0

22

RoBinZon написал(а):

Но первый шаг - управление ШД...Может быть вы предложите какие-нибудь варианты, алгоритмы, схемные решения ?...

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

0

23

Трудоголик написал(а):

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

Абсолютно верно  :jumping:

Я ее для этого и привел, чтобы дорогие коллеги могли ознакомиться, по крайней мере тем кому интересно....  :tomato:

0

24

koolhatcker написал(а):

Если найдёте у себя 16F628, 24сххх и немного свободного времени, то могу выслать прошивку которая будет сверлить отверстия на фиксированную глубину.

Если я не ошибся то он стоит ~150 руб, которые выделить "на опыты" проблемы не составит, сейчас как раз занимаюсь программатором для AT...

RoBinZon написал(а):

Дорогой Sheeft если будет интересно можете ознакомиться с моими думками в CVAVR и PROTEUS....

А можно ссылочку :-[

0

25

Sheeft написал(а):

сейчас как раз занимаюсь программатором для AT...

Дорогой друг...

А почему вы не хотите использовать 5 проводков от LPT-порта ? Помоему это наипростейший вариант программатора...

Чем собирать свякие STK-500, Пони, байт бластеры :-)))

С уважением, Макс

0

26

А это мои процедуры для полного и для микрошага...

, где

step - кол-во шагов
dir - направление движения
speed - скорость (задержка)

void FullStep(int step, int dir, int speed) {
 
  for (y=0;y<step;y++) {
    if (dir==0) {
      x++;
      PORTC=1<<x;         
      delay_ms(speed);
      if (x==3) {
        PORTC=0x09;
        delay_ms(speed);
        x=-1;   
        PORTC=0x00;
      } // If close
    } // If close
   
    if (dir==1) {
      x--;
      PORTC=1<<x;         
      delay_ms(speed);
      if (x==3) {
        PORTC=0x09;
        delay_ms(speed);
        x=-1;   
        PORTC=0x00;
      } // If close
    } // If close
  } // For close
} // FullStep close

void MicroStep(int step, int dir, int speed) {

  for (y=0;y<step;y++) {
    if (dir==0) {
      x++;
      PORTC=1<<x;         
      delay_ms(speed);
      if (x==3) {
        PORTC=0x09;
        delay_ms(speed);
        x=-1;   
        PORTC=0x00;
      } // If close
    } // If close
   
    if (dir==1) {
      x--;
      PORTC=1<<x;         
      delay_ms(speed);
      if (x==3) {
        PORTC=0x09;
        delay_ms(speed);
        x=-1;   
        PORTC=0x00;
      } // If close
    } // If close
  } // For close
} // MicroStep close

Может кому и пригодится.....за корявости кода помидорами не кидаться.... :tomato:

С уважением, Макс

0

27

Критика приветствуется? :)
Если я всё верно понял, то:
1.Задержка в миллисекундах не многовата? Ведь тогда чаще 1КГц шагать не получится.
2.Так как задействование всего порта под двигатель может оказаться расточительным, то может быть лучше в порт выводить по маске?

0

28

koolhatcker написал(а):

1.Задержка в миллисекундах не многовата? Ведь тогда чаще 1КГц шагать не получится.2.Так как задействование всего порта под двигатель может оказаться расточительным, то может быть лучше в порт выводить по маске?

К сожалению я не смог вписать в us_delay переменную, только числовое значение....из-за этого и в милисекундах, да в принципе можно и через nop организовать.....В протеусе видно, а мне больше и не нужно было.

Насчет вывода по маске: убейте меня в лоб помидором, но я не могу придумать алгоритм....может мозги не в том направлении работают ?!.... :suspicious:

А критику я приветствую и очень даже....ибо в споре рождается истина....

0

29

RoBinZon написал(а):

К сожалению я не смог вписать в us_delay переменную, только числовое значение....

Наверное выходом из положения будет написание собственной процедуры задержки? ;) Благо в этом нет ничего сложного.

RoBinZon написал(а):

Насчет вывода по маске: убейте меня в лоб помидором, но я не могу придумать алгоритм....может мозги не в том направлении работают ?!

Вот один из возможных вариантов (не самый лучший) реализации шага.
Допустим двигатель подключен к 4-м старшим разрядам порта В. Что подключено к младшим 4-м разрядам - неважно, их состояние меняться не должно.
PORTB ^ = 0b10000000;
DelayMs (1);
PORTB ^ = 0b11000000;
DelayMs (1);
PORTB ^ = 0b01100000;
DelayMs (1);
PORTB ^ = 0b00110000;
DelayMs (1);
PORTB ^ = 0b00010000;
DelayMs (1);
Если идея ясна, то думаю, что найти другой вариант (самый лучший) не составит труда. :)
Хотя и этот вроде работает.

0

30

Один из вариантов - установка между шагами меток или переменных, тогда при смене направления проще будет найти откуда шагать. 
Do
A = 0
Portd = &B0001
A = A + 1
Wait T
Portd = &B0011
A = A + 1
Wait T
Portd = &B0010
A = A + 1
- - - -
  - - - -
Portd = &B1001
A = A + 1
Wait T
Loop

Можно и в какой нибудь регистр прописывать каждый шаг.

По поводу процедуры задержки - При организации ШИМ эта процедура может  являться процедурой "мигания" выводами порта, если не делать выход ENABLE

Отредактировано Трудоголик (2008-04-15 21:37:12)

0


Вы здесь » самодельный станок с ЧПУ, отзывы duxe.ru » Схема контроллера, шаговые двигатели » Разработка "умного" контроллера на МК