Специальные цены   новые товары
Закрытая тема
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 81 по 120 из 137

5-Microstep Drive. Xilinx CPLD

Тема раздела Драйверы и контроллеры для CNC в категории Станки ЧПУ, Hobby CNC, инструмент; Сообщение от andrey_als76 отсюда вопрос зачем такой изврат ) ...поэтому в борьбе с помехами знаю толк. current set - дословный ...

  1. #81

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от andrey_als76 Посмотреть сообщение
    отсюда вопрос зачем такой изврат)

    ...поэтому в борьбе с помехами знаю толк.
    current set - дословный перевод "установка тока".

    Изврат для установки тока мотора без влезания на плату. К терминалам подсоединяется внешний резистор и все. Не надо ничего мерять и подбирать.

    Усилить сигнал с токовых резисторов хорошая идея. Применять еще дополнительные 5В питания не совсем понятно зачем.
    Если посмотреть внимательно на плату предложенной выше схемы то видно что проводники от резисторов через всю плату идут к усилителям и потом к компаратору. Какой смысл в такой разводке?

    Если есть желание поучаствовать в "правильной" разводке платы (а ваш опыт несомнено будет полезен) могу дать проект со схемами и печатными платами в Altium Designer Summer 2009. В проекте двусторонняя печатная плата расчитанная на домашнее применение. Её фотки я выкладывал раньше. Там я старался максимально уменьшить количество переходных отверстий. Для домашнего изготовления это иногда критично (сверел не так уж и много, и переломал я их достаточно).

  2.  
  3. #82

    Регистрация
    01.04.2009
    Адрес
    Lutsk
    Возраст
    36
    Сообщений
    176
    Идея использования CPLD хорошая. Респект. Но хотел бы спросить, почему не взять к примеру обычную AVR AT90PWM2 или AT90PWM3 или даже ATMEGA8 и запрограммировать ШИМ на работу с sin/cos? Как на меня, это проще и доступнее. В CPLD я не разбираюсь, но с AVR я бы потягался.

  4. #83

    Регистрация
    07.03.2010
    Адрес
    Kharkov
    Возраст
    45
    Сообщений
    5
    Цитата Сообщение от boldive Посмотреть сообщение
    current set - дословный перевод "установка тока".

    Изврат для установки тока мотора без влезания на плату. К терминалам подсоединяется внешний резистор и все. Не надо ничего мерять и подбирать.

    Усилить сигнал с токовых резисторов хорошая идея. Применять еще дополнительные 5В питания не совсем понятно зачем.
    Если посмотреть внимательно на плату предложенной выше схемы то видно что проводники от резисторов через всю плату идут к усилителям и потом к компаратору. Какой смысл в такой разводке?
    по ссылке я имел ввиду саму схему ,плата там разведена криво. усилитель тока надо располагать прямо возле токового ресистора. 5в для того чтоб улучшить помехоустойчивость по синусу, хотя и 3.3в хватит. в затворы полевиков лучше резисторы всетаки поставить, меньше помех на плм идти будет. резистор R22 раза в 2 уменьшить если усиливать.
    Чтобы уменьшить сопротивление земли я применял многожильный провод 1.5мм в нужных местах, сильно помогало. попробуйте соединить проводом землю токового резистора землю компаратора и плм звездой

    на вашей схеме стабилизатор напряжения на 0.5В сделан, получается ток 10А 0.05ом*10А=0.5В (написано 1А)
    Последний раз редактировалось andrey_als76; 09.03.2010 в 13:35.

  5. #84

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от Zliva Посмотреть сообщение
    Идея использования CPLD хорошая. Респект. Но хотел бы спросить, почему не взять к примеру обычную AVR AT90PWM2 или AT90PWM3 или даже ATMEGA8 и запрограммировать ШИМ на работу с sin/cos? Как на меня, это проще и доступнее. В CPLD я не разбираюсь, но с AVR я бы потягался.
    Ну так в чем проблема? AVR в руки и вперед, на штурм CPLD!

  6.  
  7. #85

    Регистрация
    01.04.2009
    Адрес
    Lutsk
    Возраст
    36
    Сообщений
    176
    Не понял Вашего сарказма. Мне просто интересно. Почему не AVR, а CPLD. В освоении CPLD тоже не все так гладко. Если не трудно назовите плюсы и минусы. Думаю многим будет интересно. В принципе, я для реализации ТНС думаю использовать AVR. Но если изначально сам процессор будет выбран неправильно, то потом не разгрести проблемы, которые могут появиться.

  8. #86

    Регистрация
    29.09.2005
    Адрес
    Николаев украина
    Возраст
    66
    Сообщений
    651
    Дык я так понимаю, можно и на рассыпухе. Темы про драйвера на процах обсуждались. На рассыпухе тоже. Народ осваивает новые горизонты.
    Это скорее вопрос религии, кому что нравиться.

  9. #87

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    У процов есть одно нехорошее свойство - ЗАВИСАНИЕ.
    И что-б недопустить дыма необходимо городить огород из рассыпухи, что сводит на нет все прелести проца.
    Но это не значит что НЕЛЬЗЯ делать драйвер, можно и нужно.

    Перед началом неплохо изучить предмет (читай рынок), я делал кучу разных драйверов и пришел к выводу "Для тока до 3А использовать TA8435, TB6560" и только для больших токов разрабатывать свое. Придется этим заняться т.к. в магазине появились 86-е движки http://kosmodrom.com.ua/data/cncstepdriver/cnc.php

  10.  
  11. #88

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от Zliva Посмотреть сообщение
    Не понял Вашего сарказма. Мне просто интересно. Почему не AVR, а CPLD...
    Сарказма там нет вообще, так, легкая ирония.
    Вот к примеру, в "...AT90PWM2 или AT90PWM3..." есть триггеры (я не в курсе, не имел с ними дела)?
    А если их нет, как будете реализовывать ШИМ с фиксированным периодом? Ставить рассыпуху?
    Какую максимальную частоту STEP можно получить на MK? 200 кГц можно? А 500 кГц?

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

  12. #89

    Регистрация
    01.04.2009
    Адрес
    Lutsk
    Возраст
    36
    Сообщений
    176
    В общем суть понятная. Так как буду делать ТНС, то считаю, что синхронизации по STEP и DIR делать не надо. Это избыточно. Посужу над алгоритмом. Посимулирую схему. Может что-то проясниться.

    Еще хочу сказать, что автор молодчина, хорошим делом занимается.

  13. #90

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Переписал код на 10 микрошагов, плюс добавил переход с микрошага в полный шаг. Размерность шага меняется только после поворота двигателя на 1.8° (полный шаг), менять в пределах шага не стал, хотя это легко реализуемо. Для перехода в микрошаг хотел вначале использовать 3 и 5 гармоники из ряда Фурье, а потом просто взял и по экспоненте вытянул синусоиду в меандр. Теперь вот думаю а как было-бы правильнее переходить из синусоиды в меандр использую все 10 шагов? Симуляция в Modelsim показывает что все красиво и работает так как надо. А когда зашиваю код в CPLD то на выходах A1, B1 неожиданно появляются какие-то непонятные импульсы с шастотой шима (20KHz). В симуляторе их нет. Ну и двигатель соответственно дергается но не крутится.

    В общем, есть желающие (со знанием Verilog и Xilinx ISE+Modelsim) поучаствовать в проекте и довести код до ума?

    А я пока защиту драйва от всяких замыканий и перегрузок испытаю. Сама схема простая но под нее надо новую плату делать. А это время.

  14. #91

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Для желающих все это дело повторить, выкладываю все необходимое для домашнего изготовления. Описания нет. Но из картинок и схемы все должно быть понятно. Там же включена и схема с платой программатора для прошивки CPLD.

    Программатор прямо вставляется в LPT порт компьютера. Минимальная длинна проводов, никаких кабелей длиньше 30см. Программа для прошивки называется iMPACT. Скачивается бесплатно с сайта Xilinx (ISE Design Suite 11 Standalone Programming Tools). Чтобы его скачать отдельно следуйте инструкции. Не забудьте зарегистрироваться на сайте. Это бесплатно и ни к чему не обязывает.

    Плата драйва расчитана под ЛУТ, но так делать не советую. Я использовал текстолит с уже нанесенным фоторезистом. Содержимое .pdf файла распечатывается на пленку и засвечивается через DayLight люминисцентную лампу ~10мин. Результат просто отличный. Фотографии уже спаянной платы я вроде выкладывал выше.

    В архиве прошивка на 5 микрошагов (5uStep.ipf). Просто подсоединяется в iMPACT и прошивается.

    Если собираетесь покупать IRF540N то попробуйте их заменить на STP30NF20. Они подороже, но работать должны получше.

    Если будут стоять IRF540 то напряжение на драйв больше 70V подавать не стоит. У IRF540 max 100V, выбросы напряжения при 70В питании будут около 100В, а может и больше. В этих случаях лучше использовать STP30NF20.

    После проявления фоторезиста или нанесения тонера, процарапайте дорожки в цепях затворов выходных MOSFET. Это чтобы туда потом либо перемычку впаять либо 10 Ohm - 33 Ohm сопротивление.

    Все вопросы задаем в этой ветке.

    Архив с файлами берем тут.

  15. #92

    Регистрация
    28.03.2010
    Адрес
    Диксон
    Возраст
    41
    Сообщений
    1
    Добрый день.
    К сожалению столкнулся со сложностью регистрации на ксилинке, почемуто не завершается эта регистрация, первый раз такое вижу..ну да это мои трудности.
    скачал софт алтеры "макс", даже мне далекому от этой темы удалось "запихать" и скомпилить код выложеный под алтеру, прошу выложить полный лог компиляции под алтеру, кто уверен на все 100% что у него все правильно, т.к я неуверен. По крайней мере пины и заполнение плис такиеже как у mura...
    Просто создал новый проект указал на файл с кодом, никаких ног ничего вручную не заводил, скомпилилось и пишет ошибок 0.
    возможно ли в схеме выложеной здесь, заменить ксилинк на алтеру? или для алтеры нужно другую схему?

  16. #93

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Сегодня покрутил свой мотор на Geckodrive G203V. Никакого свиста и шума. Только легкое "шуршание". Двигатель раскрутился в три раза быстрее чем у меня получилось на текущем драйве.

    Будем трудится над печатной платой и бороться с помехами.

  17. #94

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Интересно. А можно снять осциллограммы с небольшого резистора, включенного последовательно с какой-нибудь обмоткой (осциллограмму тока в обмотке) на скорости 500-600 полных шагов в сек., потом на 1500-2000 и на максимально возможной скорости?

  18. #95

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от ATLab Посмотреть сообщение
    Интересно. А можно снять осциллограммы с небольшого резистора, включенного последовательно с какой-нибудь обмоткой (осциллограмму тока в обмотке) на скорости 500-600 полных шагов в сек., потом на 1500-2000 и на максимально возможной скорости?
    no problem

  19. #96

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Резистор 0.075 Ohm включен последовательно с обмоткой. Напряжения сняты с этого резистора. Двигатель SY85STH80-4208B. Ссылку на его параметры я вроде как в начале этой ветки давал. Управляющая программа Mach3. Сам драйв G203V на 10 микрошагов. Шаг винта 5мм, соответственно 400 пульсов Step на 1мм. На 500 полных шагов в секунду будет 750mm/min перемещение.

    На осциллограмме 2В/дел 1ms


    1500 полных шагов в секунду будет 2250мм/мин
    Те же 2В/дел 1ms


    2В/дел 0.5ms и та-же скорость 2250мм/мин


    Увеличиваем скорость до 3000мм/мин. 2В/дел 0.5ms
    При скорости больше чем 2950мм/мин загорается желтый светодиод. Значит уже недостаточно напряжения питания дря нарастания тока (torque падает).


    Идем дальше до 3750мм/мин (дальше Mach не пускает) 2В/дел 0.5ms


    Если нужны макро-фотки печатной платы драйва, то могу на мыло выслать или через рапиду в личке. Фотографии на форуме выкладывать не буду.

    P.S. За неделю 26 "коллекционеров" скачало файлы. Кто-нибудь будет делать?

  20. #97

    Регистрация
    22.07.2007
    Адрес
    Ульяновская обл.
    Возраст
    44
    Сообщений
    301
    Цитата Сообщение от boldive Посмотреть сообщение
    ...P.S. За неделю 26 "коллекционеров" скачало файлы. Кто-нибудь будет делать?
    Олег, на мой взгляд, повторять вряд ли кто нибудь будет, пока Вы не добьётесь хорошей работы драйвера (тем более после того как Вы написали, что оригинальный Геко лучше работает) и не выложите все доказательства на всеобщее обозрение. Я с подобным столкнулся при усовершенствовании Ченовского Усовершенствованный сервопривод Чена , тоже думал выложу информацию, кто-то повторит, улучшит, добавит и выложит инфу на всеобщее обозрение. Но, к сожалению своими наработками делятся только на «буржуйском» форуме http://www.cnczone.com/forums/showthread.php?t=69640, но "там" мне тяжело общаться из-за незнания англицкого. А наши … – в личке мне писали, задавали вопросы. Потом у них спрашиваю – работает? Пишут – да всё работает, далее прошу выложить хоть какие нибудь результаты на всеобщее обозрение – в ответ тишина… Или нет результатов или что то ещё. И так было с несколькими соотечественниками. Так что не обращайте на это внимание (то что никто не повторяет конструкцию) и доводите драйвер «до ума» в одиночку. Это дело нужное!
    Успехов Вам!

  21. #98

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от boldive Посмотреть сообщение
    Резистор 0.075 Ohm включен последовательно с обмоткой. Напряжения сняты с этого резистора. Двигатель SY85STH80-4208B. Ссылку на его параметры я вроде как в начале этой ветки давал. Управляющая программа Mach3. Сам драйв G203V на 10 микрошагов...

    Вообще то я имел ввиду осциллограммы работы Вашего драйвера. На Гековские красивые картинки насмотрелся на cnczone.com
    Хотя и эти тоже будут к месту: можно наглядно сравнить и поискать разницу.
    Снимите осциллограммы еще со своего, а?

    Цитата Сообщение от arisov77 Посмотреть сообщение
    Олег, на мой взгляд, повторять вряд ли кто нибудь будет, пока Вы не добьётесь хорошей работы драйвера (тем более после того как Вы написали, что оригинальный Геко лучше работает) и не выложите все доказательства на всеобщее обозрение.... Так что не обращайте на это внимание (то что никто не повторяет конструкцию) и доводите драйвер «до ума» в одиночку. Это дело нужное!
    Imho, вообще мало кто сможет повторить такой драйвер:
    купить и запрограммировать ПЛИС не каждый сможет, плата сложная, монтаж тоже, на коленке без приборов не настроить. Не зря Марисс собирался выпустить минимальный набор для желающих.
    В основном ведь за "драйверный самострой" берутся из желания сэкономить, и пока не дошло, что купить проще и быстрее.
    Успехов!

  22. #99

    Регистрация
    29.09.2005
    Адрес
    Николаев украина
    Возраст
    66
    Сообщений
    651
    Цитата Сообщение от ATLab Посмотреть сообщение
    В основном ведь за "драйверный самострой" берутся из желания сэкономить
    Анатолий, не всегда. Иногда из азарту там или из интересу... А вдруг заработает. . Но, лучше опереться на опыт специалистов.

  23. #100

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от ATLab Посмотреть сообщение

    Вообще то я имел ввиду осциллограммы работы Вашего драйвера.

    Imho, вообще мало кто сможет повторить такой драйвер:
    купить и запрограммировать ПЛИС не каждый сможет, плата сложная, монтаж тоже, на коленке без приборов не настроить.
    Как только переделаю плату, так сразу выложу осциллограммы. Это будет скоро. У меня основная проблемма помехи по step and dir. Это лечится только модернизацией схемы и платы.

    Этот драйвер хорошо паяется на коленке с помощью Hot Air Gun. У меня
    Aoyue 968 SMD Digital Hot Air Rework Station. За первый вечер вытравил платы, за второй просверлил дырки, а за третий спаял 4 платы. Реально можно и в один выходной уложиться. Если в монтаже ошибок нет то там и настраивать нечего. Все упирается в элементарную аккуратность. Программатор CPLD проще не бывает. Если есть интернет то скачать 560мег programming tool с сайта Xilinx не проблемма. Все бесплатно. Проблемма только одна, купить все это разношерстье SMD компонентов. Тут очень критично к размерам. Хотя сами SMD намного дешевле старых и привычных "ножечных" вариантов. Я уже достаточно с SMD наигрался, и уходить с них не буду, уж больно все удобно и компактно получается. Да и дырок на плате почти не надо сверлить.

    Жаль что в России проблеммы с почтой. Я все электронные компоненты покупаю только в трех местах:
    avnet.com
    futureelectronics.com
    digikey.com
    С последних двух доставка в течении 24 часов за 8$. Почти бесплатно. Зато первые самые дешевые и с самым большим ассортиментом. Но доставка уже 35$.

  24. #101

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Извиняюсь и может не по теме.
    А никто не пробовал такое сделать для управления станком?
    http://www.knjn.com/FPGA-Parallel.html
    Ведь преимуществ много!
    Легко перенастраивается с шагового режима на серво, не требует программатора, много входов-выходов и простое подключение к LPT порту.
    Исходный код открытый под GPL лицензией в ЕМС2.
    При желании и знании Verilog или VHDL можно описать и запрограммировать любую конфигурацию оборудования. Но и так существует уже готовое решение и не надо заморачиваться с программированием.
    И цена на FPGA типа Cyclone 1,2,3 в районе 10$.

  25. #102

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Imho, это не по теме. Если есть желание поговорить по этому поводу, начните новую ветку? Не хотелось бы замусоривать эту...

    P.S. Не вижу никаких преимуществ у этой отладочной платки, зачем она вообще здесь?
    ПЛИСок много всяких разных, и на них потенциально можно сделать черта с рогами
    Эта ни хуже ни лучше...

  26. #103

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Наверное Вы правы!
    Но ведь именно на эту плату есть готовые драйвера в EMC2 для работы как сервоприводов, и не в режиме step/dir, так и шаговых двигателей.
    Вроде по теме, ведь здесь попытка найти тоже решение.

  27. #104

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    Я что-то исходников не нашел, можно пальцем ткнуть?

  28. #105

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Если вопрос ко мне, то здесь "src/hal/drivers/pluto_servo_firmware/"
    там же и на шаговики, но с выходом step/dir.
    Для полного управления надо подключить модуль, аналогичный рассматриваемому в этом посте.
    Речь идет о UBUNTU.
    Однако там изначально нет этих исходников.
    Необходимо их скачать штатными средствами UBUNTU.
    Если интересно, опишу подробнее.

  29. #106

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    Конечно интересно, а схема данного девайса имеется?

  30. #107

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Схему сейчас разрабатываю на EP1K30TC144 потому что много в наличии.
    Программирование по PPA. Штатное по PS.
    Разводка поддерживает и то и другое.
    Занимаюсь сервоприводом.
    Вам какой исходник?
    Вот штатный на сервопривод.
    Тут три модуля
    1 Servo
    2 Quad
    3 WDT
    Компилится в Квартусе без проблем.
    На отладчике тоже вроде все ОК.
    На железе еще не пробовал.

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // This program is free software; you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 2 of the License, or
    // (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module pluto_servo(clk, led, nConfig, epp_nReset, pport_data, nWrite, nWait, nDataStr,
    nAddrStr, dout, din, quadA, quadB, quadZ, up, down);
    parameter QW=14;
    input clk;
    output led, nConfig;
    inout [7:0] pport_data;
    input nWrite;
    output nWait;
    input nDataStr, nAddrStr, epp_nReset;
    wire do_tristate;
    reg[9:0] real_dout; output [9:0] dout = do_tristate ? 10'bZZZZZZZZZZ : real_dout;
    input [7:0] din;
    input [3:0] quadA;
    input [3:0] quadB;
    input [3:0] quadZ;
    wire[3:0] real_up; output [3:0] up = do_tristate ? 4'bZZZZ : real_up;
    wire[3:0] real_down; output [3:0] down = do_tristate ? 4'bZZZZ : real_down;
    reg Zpolarity;

    wire [2*QW:0] quad0, quad1, quad2, quad3;

    wire do_enable_wdt;
    wire pwm_at_top;
    wdt w(clk, do_enable_wdt, pwm_at_top, do_tristate);

    // PWM stuff
    // PWM clock is about 20kHz for clk @ 40MHz, 11-bit cnt
    reg [10:0] pwmcnt;
    wire [10:0] top = 11'd2046;
    assign pwm_at_top = (pwmcnt == top);
    reg [15:0] pwm0, pwm1, pwm2, pwm3;
    always @(posedge clk) begin
    if(pwm_at_top) pwmcnt <= 0;
    else pwmcnt <= pwmcnt + 11'd1;
    end

    wire [10:0] pwmrev = {
    pwmcnt[4], pwmcnt[5], pwmcnt[6], pwmcnt[7], pwmcnt[8], pwmcnt[9],
    pwmcnt[10], pwmcnt[3:0]};
    wire [10:0] pwmcmp0 = pwm0[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp1 = pwm1[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp2 = pwm2[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp3 = pwm3[14] ? pwmrev : pwmcnt;
    wire pwmact0 = pwm0[10:0] > pwmcmp0;
    wire pwmact1 = pwm1[10:0] > pwmcmp0;
    wire pwmact2 = pwm2[10:0] > pwmcmp0;
    wire pwmact3 = pwm3[10:0] > pwmcmp0;
    assign real_up[0] = pwm0[12] ^ (pwm0[15] ? 1'd0 : pwmact0);
    assign real_up[1] = pwm1[12] ^ (pwm1[15] ? 1'd0 : pwmact1);
    assign real_up[2] = pwm2[12] ^ (pwm2[15] ? 1'd0 : pwmact2);
    assign real_up[3] = pwm3[12] ^ (pwm3[15] ? 1'd0 : pwmact3);
    assign real_down[0] = pwm0[13] ^ (~pwm0[15] ? 1'd0 : pwmact0);
    assign real_down[1] = pwm1[13] ^ (~pwm1[15] ? 1'd0 : pwmact1);
    assign real_down[2] = pwm2[13] ^ (~pwm2[15] ? 1'd0 : pwmact2);
    assign real_down[3] = pwm3[13] ^ (~pwm3[15] ? 1'd0 : pwmact3);

    // Quadrature stuff
    // Quadrature is digitized at 40MHz into 14-bit counters
    // Read up to 2^13 pulses / polling period = 8MHz for 1kHz servo period
    reg qtest;
    wire qr0, qr1, qr2, qr3;
    quad q0(clk, qtest ? real_dout[0] : quadA[0], qtest ? real_dout[1] : quadB[0], qtest ? real_dout[2] : quadZ[0]^Zpolarity, qr0, quad0);
    quad q1(clk, quadA[1], quadB[1], quadZ[1]^Zpolarity, qr1, quad1);
    quad q2(clk, quadA[2], quadB[2], quadZ[2]^Zpolarity, qr2, quad2);
    quad q3(clk, quadA[3], quadB[3], quadZ[3]^Zpolarity, qr3, quad3);

    // EPP stuff
    wire EPP_write = ~nWrite;
    wire EPP_read = nWrite;
    wire EPP_addr_strobe = ~nAddrStr;
    wire EPP_data_strobe = ~nDataStr;
    wire EPP_strobe = EPP_data_strobe | EPP_addr_strobe;

    wire EPP_wait; assign nWait = ~EPP_wait;
    wire [7:0] EPP_datain = pport_data;
    wire [7:0] EPP_dataout; assign pport_data = EPP_dataout;

    reg [4:0] EPP_strobe_reg;
    always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[3:0], EPP_strobe};
    wire EPP_strobe_edge1 = (EPP_strobe_reg[2:1]==2'b01);

    // reg led;

    assign EPP_wait = EPP_strobe_reg[4];
    reg[4:0] addr_reg;
    reg[7:0] lowbyte;

    always @(posedge clk)
    if(EPP_strobe_edge1 & EPP_write & EPP_addr_strobe) begin
    addr_reg <= EPP_datain[4:0];
    end
    else if(EPP_strobe_edge1 & !EPP_addr_strobe) addr_reg <= addr_reg + 4'd1;
    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_write & EPP_data_strobe) begin
    if(addr_reg[3:0] == 4'd1) pwm0 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd3) pwm1 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd5) pwm2 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd7) pwm3 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd9) begin
    real_dout <= { EPP_datain[1:0], lowbyte };
    Zpolarity <= EPP_datain[7];
    qtest <= EPP_datain[5];
    end
    else lowbyte <= EPP_datain;
    end
    end

    reg [31:0] data_buf;

    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_read && addr_reg[1:0] == 2'd0) begin
    if(addr_reg[4:2] == 3'd0) data_buf <= quad0;
    else if(addr_reg[4:2] == 3'd1) data_buf <= quad1;
    else if(addr_reg[4:2] == 3'd2) data_buf <= quad2;
    else if(addr_reg[4:2] == 3'd3) data_buf <= quad3;
    else if(addr_reg[4:2] == 3'd4)
    data_buf <= {quadA, quadB, quadZ, din};
    end
    end

    // the addr_reg test looks funny because it is auto-incremented in an always
    // block so "1" reads the low byte, "2 and "3" read middle bytes, and "0"
    // reads the high byte I have a feeling that I'm doing this in the wrong way.
    wire [7:0] data_reg = addr_reg[1:0] == 2'd1 ? data_buf[7:0] :
    (addr_reg[1:0] == 2'd2 ? data_buf[15:8] :
    (addr_reg[1:0] == 2'd3 ? data_buf[23:16] :
    data_buf[31:24]));

    wire [7:0] EPP_data_mux = data_reg;
    assign EPP_dataout = (EPP_read & EPP_wait) ? EPP_data_mux : 8'hZZ;
    assign do_enable_wdt = EPP_strobe_edge1 & EPP_write & EPP_data_strobe & (addr_reg[3:0] == 4'd9) & EPP_datain[6];
    assign qr0 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd0);
    assign qr1 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd1);
    assign qr2 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd2);
    assign qr3 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd3);
    assign led = do_tristate ? 1'BZ : (real_up[0] ^ real_down[0]);
    assign nConfig = epp_nReset; // 1'b1;
    endmodule

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // This program is free software; you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 2 of the License, or
    // (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1507 USA

    module quad(clk, A, B, Z, zr, out);
    parameter W=14;
    input clk, A, B, Z, zr;
    reg [(W-1):0] c, i; reg zl;
    output [2*W:0] out = { zl, i, c };
    // reg [(W-1):0] c, i; reg zl;

    reg [2:0] Ad, Bd;
    reg [2:0] Zc;
    always @(posedge clk) Ad <= {Ad[1:0], A};
    always @(posedge clk) Bd <= {Bd[1:0], B};

    wire good_one = &Zc;
    wire good_zero = ~|Zc;
    reg last_good;

    wire index_pulse = good_one && ! last_good;

    wire count_enable = Ad[1] ^ Ad[2] ^ Bd[1] ^ Bd[2];
    wire count_direction = Ad[1] ^ Bd[2];

    always @(posedge clk)
    begin
    if(Z && !good_one) Zc <= Zc + 2'b1;
    else if(!good_zero) Zc <= Zc - 2'b1;
    if(good_one) last_good <= 1;
    else if(good_zero) last_good <= 0;
    if(count_enable)
    begin
    if(count_direction) c <= c + 1'd1;
    else c <= c - 1'd1;
    end
    if(index_pulse) begin
    i <= c;
    zl <= 1;
    end else if(zr) begin
    zl <= 0;
    end
    end
    endmodule

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // This program is free software; you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 2 of the License, or
    // (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module wdt(clk, ena, cnt, out);
    input clk, ena, cnt;
    output out;
    reg [6:0] timer;
    wire timer_top = (timer == 7'd127);
    reg internal_enable;
    wire out = internal_enable && timer_top;

    always @(posedge clk) begin
    if(ena) begin
    internal_enable <= 1;
    timer <= 0;
    end else if(cnt && !timer_top) timer <= timer + 7'd1;
    end
    endmodule

  31. #108

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Может, все же в новую ветку, а? Это же не трудно!
    Как ни интересно, но это не имеет отношения к 5-Microstep Drive.


  32. #109

    Регистрация
    22.07.2007
    Адрес
    Ульяновская обл.
    Возраст
    44
    Сообщений
    301
    Может кому пригодиться, вот здесь http://soel.ru/cms/f/?/364218.pdf есть статейка «Шаговый двигатель, управляемый устройством на ПЛИС»

  33. #110

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    Цитата Сообщение от arisov77 Посмотреть сообщение
    Может кому пригодиться, вот здесь http://soel.ru/cms/f/?/364218.pdf есть статейка «Шаговый двигатель, управляемый устройством на ПЛИС»
    Автор в реале с ПЛИС не работал, даже начинающий ПЛДшник такого себе не позволит.

  34. #111

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Слепил. Пойду смотреть откуда дым повалит

    Силовая часть сделана на связке IR2104 + STP30NF20
    Две отптопары HCPL2531 (для STEP, DIR) и PS2501 (Enable) еще не запаял. Они будут с обратной стороны платы (в левом верхнем углу на картинке видны посадочные места).


  35. #112

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Еще немножко доработал схему и теперь все работает. Сделал какое-то подобие морфинга. Вначале было 1/10 => 1/4 => 1/2 => FullStep а потом сделал по другому. Стал синусоиду вытягивать по экспоненте (опорное напряжение стало походить на трапецию). Что-то так мне больше нравится. Более плавно. Максимальная скорость которую могу вытащить из Mach3 3750мм/мин (1/10 микрошаг, 5мм винт) и на этой скорости крутит. Драйвер и мотор греются не шибко сильно. По ходу работы из мотора слышно какое-то постукивание, не механическое, явно электрического происхождения. Примерно каждые 3-6сек слышен такой "ТУК". Надо на станке погонять и посмотреть что там с пропуском шагов, если кончно будет. Где-то на 2300мм/мин идет резонанс. Вот с этим облом. Тут только программой не обойдешься, надо менять схемотехнику. Только непонятно откуда начинать. Можно сравнивать ток обмотки мотора (в идеале экспонента) с какой-то опорной экспонентой и в случае расхождения выдавать сигнал на CPLD (при резонансе экспонента начинает вытягиваться в синусоиду). А вот что дальше менять в алгоритме работы пока не знаю.

    to ATLab. Посмотрел я на картинки тока в обмотках двигателя. Такие-же как и в G203V (это когда резонанса нет). Практически все один в один. Форму тока при резонансе надо снимать на видео, тогда будет видно как она "раздувается".

  36. #113

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от boldive Посмотреть сообщение
    ... Форму тока при резонансе надо снимать на видео, тогда будет видно как она "раздувается".
    Что значит "раздувается"? Что раздувается?

  37. #114

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от ATLab Посмотреть сообщение
    Что значит "раздувается"? Что раздувается?
    Пост №96. Последние две картинки показывают форму тока когда резонанса нет.
    Перед переходом в резонанс форма тока начинает "раздуваться" и больше походить на синусоиду чем на экспоненту.


    А при самом резонансе уже почти синусоида.


    Ну видео как все это происходит тут:



    На 53сек четко виден переход в резонанс. Весь этот "визжащий-надрывный" звук из ролика когда мотор в резонансе и вал не крутится.

  38. #115

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Покрутил на станке. 1/10 микрошаг. Винт 5мм. Голый мотор уходил в резонанс на скорости 2300мм/мин. Воткнул на ось Y. Теперь полоса резонанса с 2400 до 3100 мм/мин. Выше 3100мм/мин и до 3750мм/мин (Mach3 больше не дает) никаких проблемм.

    Порылся в интернете и понял что тема борьбы с резонансом "засекречена". Есть общие идеи с которых можно начинать, но как именно это реализовывать в системах контроля с open-loop под завесой тайны.

    На cnczone.com нашел только единственную фразу проливающую свет на решение проблеммы.
    The midband resonance circuit adds a derivative component (+80 degrees
    phase lead) to the system phase angle to eliminate parametric
    resonance. It involves sensing the rate of motor load change
    (derivative of motor torque) which then phase modulates the internal
    step pulse timing.

    Может у кого есть еще какие-то практические мнения по этому поводу?

  39. #116

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    1. Самое простое - посмотреть как это делается в Gecko. Проследить по плате драйвера кусок схемы на ОУ от измерительных резисторов до компараторов и попытаться понять, что там творится.
    2. Поискать патенты.

  40. #117

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Как сделано в геко посмотрел, даже схемку нарисовал. Там с каждого current sense резистора через сопротивление в 10К (оба этих резистора соединены вместе) снимается сигнал (получается суммарный сигнал) и идет на ОУ который является фильтром низких частот, а с него на компаратор. С компаратора на CPLD. Что дальше происходит в программе пока непонятно. Причем опорное напряжение для компаратора тоже формируется от CPLD.

    Патенты искал. Пока ничего путного не нашел.

  41. #118

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    Цитата Сообщение от boldive Посмотреть сообщение
    Там с каждого current sense резистора через сопротивление в 10К (оба этих резистора соединены вместе) снимается сигнал (получается суммарный сигнал)
    Может это для защиты цепь?
    Или для поддержания "среднего" тока?

  42. #119

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Защита там по другому выполнена и к CPLD не имеет отношения. "Защелка" на двух элементах НЕ. На входе сигнал от терминала "Enable". На выходе сигнал SD для IR2104. Плюс, туда еще приходит сигнал с токового резистора стоящего в цепи общего питания драйвера (собственно защита).

  43. #120

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от boldive Посмотреть сообщение
    Как сделано в геко посмотрел... идет на ОУ который является фильтром низких частот, а с него на компаратор. С компаратора на CPLD...
    Где-то у меня валялся китаец, драный с Геко, сделанного еще на логике.
    Если найду, в выходные попробую посмотреть.

    А этот ФНЧ никакую фазу не двигает? По идее, смысл то в введении доп. фазового сдвига, чтобы убрать условие самовозбуждения.

Закрытая тема

Похожие темы

  1. MotoCalc vs Drive Calculator
    от spyder3 в разделе Самодельная электроника, компьютерные программы
    Ответов: 1
    Последнее сообщение: 22.03.2010, 00:40
  2. Ответов: 2
    Последнее сообщение: 14.06.2009, 23:39
  3. Gearless direct drive motor for helicopter
    от ron_van_sommeren в разделе Электродвигатели, регуляторы, мотоустановки
    Ответов: 2
    Последнее сообщение: 22.03.2004, 17:31

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения