Главная arrow Программирование arrow AVR arrow AVR-USB-MEGA16: управление шаговым двигателем через USB Wednesday, June 07 2023  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

AVR-USB-MEGA16: управление шаговым двигателем через USB Версия для печати
Написал Сергей Кухтецкий   
01.07.2009

В статье описана простая система управления шаговым двигателем на базе персонального компьютера, платы AVR-USB-MEGA16 и простого силового модуля для питания обмоток двигателя. Рассмотрены два варианта программного обеспечения: простой вариант для малых частот вращения двигателя и несколько более сложный, но без ограничений на частоту шагов. Разработка выполнена в лаборатории проблем материаловедения Института химии и химической технологии СО РАН, г. Красноярск (http://www.icct.ru/).

Шаговый двигатель – неотъемлемый атрибут многих исполнительных устройств, используемых для позиционирования в пространстве и регулирования материальных расходов. Шаговые двигатели также широко используются в приводах floppy-дисков, HDD, CD-ROM, в бытовых видеомагнитофонах, фотоаппаратах и видеокамерах. Существует множество конструкций шаговых двигателей и способов их питания. В данной статье мы рассмотрим довольно часто встречающийся вариант – униполярный двигатель в полношаговом режиме с одной включенной фазой. При таком питании в каждый момент времени ток подается только на одну обмотку двигателя. Пусть, например, в начальный момент времени ток подан на первую обмотку. В соответствующем положении находится и ротор. Если в следующий момент времени ток будет подан на вторую обмотку и снят с первой, то двигатель сделает один шаг (т.е. ротор повернется на определенный угол). Затем подадим ток только на третью обмотку, потом – на четвертую и опять на первую. И так далее. Ротор будет вращаться по часовой стрелке. Временная диаграмма сигналов показана на Рис.1. Естественно, если запитывать обмотки в обратной последовательности: 1-4-3-2, то двигатель будет вращаться в противоположном направлении.

stepmoto01-avr-usb-mega16.jpg

Рис.1. Схема обмоток и временная диаграмма

Несмотря на то, что при таком включении от двигателя нельзя получить полный момент, схема контроллера двигателя получается очень простой. Если же использовать микроконтроллер, то конструкция получается совсем тривиальной – к четырем цифровым выходам микроконтроллера нужно подсоединить усилители тока (простые транзисторные ключи) для питания обмоток двигателя. Далее остается только подавать единички на соответствующие выходы микроконтроллера. Рассмотрим немного подробнее силовой модуль.

[Силовой модуль]

Схема модуля представлена на Рис.2. При открывании какого-нибудь из транзисторов, ток будет протекать через соответствующую обмотку шагового двигателя. Для управления транзисторами используются свободные выходы PC0, PC1, PC6 и PC7 микроконтроллера платы AVR-USB-MEGA16. Тип транзисторов зависит от мощности подключаемого двигателя, напряжения его питания и, естественно, нагрузочной способности портов микроконтроллера. В данной  конструкции я использовал составные транзисторы BD677, обладающие достаточным коэффициентом усиления по току, с допуститимым напряжением коллектор-эммитер до 60В, ток коллектора – до 4 А. Для большинства двигателей, которые используются в лабораторной практике – вполне достаточно. Если не нужна большая мощность, то при питании двигателя от 5В источника можно вообще обойтись без радиаторов.

stepmoto02-avr-usb-mega16.gif

Рис.2. Схема силового модуля

Поскольку нагрузка индуктивная, полезно поставить защитные диоды. Я поставил 1-амперные диоды 1N4001, но можно обойтись и без них. Защитные диоды увеличивают время спада тока в обмотках шагового двигателя (через них ЭДС самоиндукции возвращается в источник питания V+), что уменьшает максимально возможную частоту вращения шагового двигателя. Если убрать диоды, то время спада тока окажется минимальным, двигатель сможет вращаться быстрее, но при этом возникают опасные для транзисторов выбросы ЭДС самоиндукции, которые могут превысить допустимое для них напряжение 60 В.

Для первых экспериментов и отладки программного обеспечения взял небольшой шаговый двигатель от старого матричного принтера. Силовая часть разместилась на макетной плате. Питание двигателей производилось от внешнего источника. Напряжение питания – 5В. Вся электроника с двигателем показана на Рис.3, общий вид стенда – на Рис.4.

stepmoto03-avr-usb-mega16.jpg

Рис.3. Электронная часть и шаговый двигатель

stepmoto04-avr-usb-mega16.jpg

Рис.4. Общий вид стенда

[Программное обеспечение]

Как было отмечено выше, все управление нашим шаговым двигателем сводится к подаче логической единицы последовательно на пины микроконтроллера PC0, PC1, PC6 и PC7. В каждый момент времени единица должна быть только на одном пине. При подаче единицы, откроется соответствующий транзистор в силовом модуле и через одну из обмоток потечет ток. Двигатель сделает шаг. Затем нужно подать единицу на следующий пин, и двигатель сделает следующий шаг. Если не требуется высокая частота шагов, то с такой задачей вполне справится и сам хост. Рассмотрим этот вариант подробнее.

Простой вариант

Для этого решения можно воспользоваться простой универсальной прошивкой «firmware simple» из статьи «AVR-USB-MEGA16 : Быстрая разработка USB приложений на C# при помощи класса-обертки ATMega16». Эта прошивка позволяет с хоста управлять по USB состоянием регистров ввода/вывода и портами микроконтроллера. Т.е. для данного варианта прошивку можно использовать безо всяких изменений. Единственное что нужно сделать - слегка модифицировать приложение хоста «host simple/LedTest» из этой же статьи. Вместо включения/выключения светодиода, подключенного к порту B, нужно управлять портом четырьмя пинами порта C.

Прошивка, исходные файлы firmware и проект приложения хоста (на языке C# для Visual Studio 2008 Express Edition) приведены в папке «01 Простой вариант» архива «090630stepmotor-soft-mega16.zip» к данной статье. Приложение хоста очень простое, поэтому ограничусь только комментариями по общей организации программы.

В массиве ph находятся байты, которые нужно послать в порт C для того, чтобы подать единицу на один из пинов PC0, PC1, PC6 и PC7. Объявление этого массива – в классе Form1:
byte[] ph = {0x01, 0x02, 0x40, 0x80};

Таймер timerPulse в приложении хоста задает частоту следования шаговых импульсов (точнее – период этих импульсов). По тику этого таймера вызывается метод timerPulse_Tick(), в котором модифицируется индекс фазы (переменная iPh) на +1 или -1 в зависимости от направления вращения двигателя. Индекс фазы модифицируется циклически в диапазоне 0 – 3. В этом же методе соответствующий байт (ph[iPh]) посылается в порт C командой
dev.PORTC = ph[iPh];

Период следования импульсов (переменная T) регулируется компонентом NumericUpDown. При изменении T происходит модификация свойства Interval таймера timerPulse (см. метод numericUpDownMs_ValueChanged()).

Как уже отмечалось, данная реализация программного обеспечения будет работать только на сравнительно низких частотах следования шаговых импульсов. Для того, чтобы придать более строгий смысл фразе «сравнительно низкие частоты», проведем небольшой эксперимент. Подключим к одному из пинов (PC0, PC1, PC6 или PC7) осциллограф и будем измерять длительность импульсов на этом пине в зависимости от длительности импульсов, задаваемой хостом при помощи компонента NumericUpDown. Мы увидим, что длительность импульсов и период их следования заметно «гуляют» (на десятки миллисекунд). Поэтому будем измерять среднее значение (например, по 10-20 импульсам). На Рис. 5 представлена зависимость этой средней величины от длительности, задаваемой хостом. Шкалы – в логарифмическом масштабе.

stepmoto05-avr-usb-mega16.png

Рис.5. Длительность импульсов на пине микроконтроллера в зависимости от длительности, задаваемой хостом

Из графика видно, что при больших длительностях (более 100 мс), длительность импульсов на пине микроконтроллера практически совпадает с длительностью, задаваемой хостом. Т.е. в этом режиме хост вполне контролирует частоту вращения двигателя. Для более коротких импульсов (в диапазоне 10-100 мс) наблюдается заметное увеличение средней длительности импульсов (по сравнению с длительностью, задаваемой хостом). Внешне это проявляется как нестабильность вращения и неплавное увеличение скорости вращения при уменьшении длительности импульсов. Наконец, в диапазоне 1-10 мс, скорость вращения двигателя вообще перестает изменяться с изменением длительности импульсов, задаваемых хостом. Для моего компьютера эта величина оказалась равной 15.6 мс, т.е. частота - не более 64 шагов в секунду. Реально – еще меньше. Если учесть, что для типичных двигателей максимальная частота приемистости составляет величину порядка 1000 Гц, то становится ясно, что добиться максимальных скоростей вращения шагового двигателя при управлении шагами непосредственно из хоста нам не удастся. Поэтому (если, конечно, необходимы высокие скорости!) программное обеспечение необходимо модифицировать. Кроме того, возможно придется увеличить напряжение питания (для увеличения скорости нарастания тока в обмотках), применить другой принцип коммутации фаз, убрать защитные диоды и заменить их на специальные защитные цепочки, снижающие выбросы ЭДС самоиндукции до допустимого уровня, применить транзисторы подороже, у которых высокое допуститое напряжение коллектор-эммитер.

Быстрый и точный вариант

Самый простой выходом из описанной выше ситуации является переход от управления шагами двигателя по таймеру хоста к управлению от аппаратного таймера микроконтроллера. Логика работы программы не меняется, только тактирование шагов двигателя и подача соответствующих байтов в порт C происходит уже не из хоста, а непосредственно в firmware. Некритичные ко времени реакции системы операции (в частности, инициализация таймера, изменение частоты шагов и направления вращения двигателя) можно оставить на хосте.

Для реализации этого варианта нам нужно модифицировать как firmware, так и приложение хоста. Исходные файлы и проект можно найти в папке «02 Быстрый вариант» архива «090630stepmotor-soft-mega16.zip». Ниже – небольшие комментарии к этому программному обеспечению. Начнем с firmware (за основу без изменений взято firmware из статьи «AVR-USB-MEGA16: быстрая разработка USB приложений на C# при помощи класса-обертки ATMega16»).

Firmware

Будем работать с 16-разрядным таймером TIMER1 (чтобы ни в чем себе не отказывать). Основное изменение, которое нам необходимо сделать в firmware, – вставить обработчик прерывания, которое генерируется при достижении счетчиком определенного значения. Это значение как раз будет задавать период шага двигателя. Таймер, естественно, должен работать в режиме со сбросом значения счетчика при достижении этого значения (режим CTC - Clear Timer on Compare).

Модифицируем файл main.c из папки «firmware simple» следующим образом.
1. Вставим объявление константы
#define RQ_SM_SET_DIR     0x31
в начале модуля.

2. Как и в предыдущем варианте (но только не в хосте, а в firmware!) объявим массив байтов, посылаемых в порт C и другие рабочие переменные:
byte ph[4] = {0x01, 0x02, 0x40, 0x80};
int iPh = 0, maxPh = 3, inc = 1;

3. Напишем две функции (сделать шаг в нужном направлении и обработчик прерывания от таймера):
//-----------------------------------------------------------------
// Сделать шаг в заданном (inc) направлении
//-----------------------------------------------------------------
void SMDoStep(void){
  iPh += inc;       // Циклически (из интервала 0,1,2,3) изменяем индекс фазы
  if(iPh < 0)       // Зацикливаем индекс фазы для inc == -1
    iPh = maxPh;
  if(iPh > maxPh)   // Зацикливаем индекс фазы для inc == +1
    iPh = 0;
  PORTC &= 0x3C;    // Очистим биты 0,1,6 и 7 порта C
  PORTC |= ph[iPh]; // Установим 1 на соотвествующем пине (см. массив ph[])
}
//-----------------------------------------------------------------
// Обработчик прерывания от таймера 1 (COMPA)
//-----------------------------------------------------------------
ISR(TIMER1_COMPA_vect){
  sei();            // Дадим возможность обработать прерывания от USB...
  SMDoStep();       // Сделаем шаг в нужную сторону
}

4. И, наконец, в функцию usbFunctionSetup() вставим еще один case для установки направления вращения двигателя:
    case RQ_SM_SET_DIR:     // Установка направления вращения двигателя
      inc = (val > 0)? +1 : -1;
      return 0;

Это все изменения firmware, которые необходимо сделать. Компилируем, прошиваем микроконтроллер и переходим к хосту.

ПО хоста

Сначала модифицируем класс-обертку ATMega (файл ATMega.cs).
1. В секцию  «Константы» блока «Интерфейс с libusb» добавим константу, связанную с установкой напрвления вращения двигателя
const int RQ_SM_SET_DIR = 0x31;

2. В секцию «Адреса портов, регистров и пины микроконтроллера ATMega16» добавим константы для работы с регистром масок прерываний TIMSK:
        public const byte aTIMSK     = 0x39;
        public const byte TOIE0     = 0;
        public const byte OCIE0     = 1;
        public const byte TOIE1     = 2;
        public const byte OCIE1B    = 3;
        public const byte OCIE1A    = 4;
        public const byte TICIE1    = 5;
        public const byte TOIE2     = 6;
        public const byte OCIE2     = 7;
Раньше мы не использовали прерывания от таймера, поэтому этот фрагмент в «firmware simple» просто не был реализован. Естественно, нужно добавить и реализацию свойства TIMSK.

3. Сделаем это в секции «Работа с регистрами TIMER1»:
public byte TIMSK
{
    set
    {
        usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE |     
            USB_ENDPOINT_OUT, RQ_IO_WRITE, value, aTIMSK, null, 0, 5000);
    }
    get
    {
         usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE |
                USB_ENDPOINT_IN, RQ_IO_READ, 0, aTIMSK, buffer, 1, 5000);

        return buffer[0];
    }
}

4. Ну и, наконец, свойство smDir, задающее направление вращения двигателя:
public int smDir
{
   set
    {
        usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE |
     USB_ENDPOINT_OUT,RQ_SM_SET_DIR, ((value > 0)? 1 : 0), 0, null, 0, 5000);
    }
}

Все. Модификация класса-обертки закончена.

Теперь разберемся с главным файлом приложения (файл Form1.cs). Готовый файл можно найти в проекте хоста (папка «02 Быстрый вариант» архива «090630stepmotor-soft-mega16.zip»). Краткие комментарии ниже.

1. После успешного создания объекта dev класса ATMega16 производится инициализация таймера TIMER1. Выбираем режим 4 – обнуление таймера при совпадении счетчика со значением, находящимся в регистре OCR1A (единичка в бите WGM12 регистра TCCR1B, см. Datasheet на ATMega16). Коэффициент деления тактовой частоты выбираем 1024 (биты CS12 и CS10 в 1, а CS11 – в 0). При этом 16 разрядный счетчик перекроет весь необходимый нам диапазон частот (здесь я ориентировался на свой микродозатор, для которого, собственно говоря, и делалась вся эта разработка).

2. Далее посылаем в регистр OCR1A какое-нибудь значение по умолчанию (здесь оно берется из компонента numericUpDownMs.Value). В конце метода соответствующие биты порта C настраиваются на вывод.
Далее вся работа приложения основана на обработке событий от элементов управления, расположенных на форме.

3. При нажатии на кнопку «Старт/Стоп» вызывается метод checkBoxStartStop_CheckedChanged(), в котором,  в зависимости от состояния кнопки (нажата или отжата), происходит либо разрешение, либо запрет прерываний от таймера в микроконтроллере (бит OCIE1A регистра TIMSK). Дальше генерацией шаговых импульсов двигателя занимается уже сам микроконтроллер (точнее – его аппаратный таймер TIMER1) независимо от хоста.

4. При переключении направления вращения двигателя (радио кнопки radioButtonForward и radioButtonBack) происходит вызов метода radioButtonForward_CheckedChanged(). В этом методе свойству smDir присваивается значение +1 или -1. При этом по USB производится установка переменной inc (в firmware) в такое же значение. Это сразу же отражается на направлении вращения двигателя.

5. При изменении значения компонента numericUpDownMs, вызывается метод numericUpDownMs_ValueChanged(), в котором происходит вычисление нового значения регистра OCR1A и присваивание ему этого значения. Текущее значение счетчика (TCNT1) при этом обнуляется. Теперь шаговый двигатель будет делать шаги с новой частотой.

6. Чтобы не греть двигатель по окончанию работы программы (таймер микроконтроллера работает независимо от хоста!) в методе Form1_FormClosing(), вызываемом при закрытии формы приложения, происходит запрет прерываний от таймера микроконтроллера и обнуление тока всех обмоток двигателя.

Вот, собственно говоря, и все приложение. Компилируем и запускаем. Теперь измерим длительности импульсов на каком-нибудь из пинов (PC0, PC1, PC6 или PC7) микроконтроллера как и в предыдущем (простом) варианте программного обеспечения. Результат такого эксперимента представлен на Рис.6. Видно, что теперь длительность импульсов на пинах микроконтроллера совпадает с длительность импульсов, задаваемых в приложении хоста во всем нужном нам диапазоне.

stepmoto06-avr-usb-mega16.png

Рис.6. Теперь можно работать на любых частотах

[Микродозатор]

Итак, мы решили проблему управления шаговым двигателем на высоких частотах за счет использования периферии микроконтроллера (в данном случае - аппаратного таймера TIMER1). Тем самым нам удалось обойтись без использования какого-либо специализированного контроллера шаговых двигателей. Замечательно и то, что переход от первого варианта системы ко второму  происходил только за счет изменения программного обеспечения, без каких либо модернизаций «железа».

Расширенный вариант программного обеспечения, описанного выше, используется в реальном прототипе микродозатора жидкостей. В его основе лежит шприцевой насос, приводимый в действие шаговым двигателем. В качестве модели насоса был взят насос от жидкостного хроматографа Милихром. Там используется неплохой отечественный шаговый двигатель ДШИ-200-1. Он работает довольно устойчиво от этого же силового модуля, которое рассмотрено в данной статье выше.

Программное обеспечение было расширено за счет введения следующих дополнительных функций.
1. Элементы управления откалиброваны в естественных для дозатора единицах. Объемы – в микролитрах, скорости подачи – микролитры/мин.
2. Естественно, для работы реальных устройств необходима обработка сигналов от ограничителей диапазона перемещения поршня насоса. При наборе раствора – это сигнал от концевого выключателя  (логический 0), расположенного снизу. При подаче – сигнал от датчика давления. При засорении капилляров происходит повышение давления и на выходе датчика формируется логический 0. Этот же сигнал формируется и при достижении поршнем насоса предельного положения при подаче. Обработка этих сигналов производится на стороне firmware.
3. Для дозатора необходим режим подачи (или набора) заданного количества жидкости, после чего насос должен остановиться. Этот функционал тоже реализован в firmware.
4. Еще один необходимый элемент дозатора – счетчик и передача хосту количества поданной или набранной жидкости (в том числе и в режиме накопления, т.е. за несколько включений дозатора в различных режимах).
Прошивка, исходные файлы firmware и полный проект хоста для Visual Studio 2008 Express Edition можно найти в архиве данной статьи (файл «090630stepmotor-soft-mega16.zip») в папке «03 Расширенный вариант». Общий вид прототипа микродозатора показан на Рис.7. Как выглядит приложение хоста можно посмотреть на Рис.8.

stepmoto07-avr-usb-mega16.jpg

Рис.7. Общий вид прототипа микродозатора

stepmoto08-avr-usb-mega16.png

Рис.8. Вид работающего приложения хоста

Байты перемычек (fuse bits) ATmega16 должны быть 0xFF (low) и 0x09 (high). 

@ S.V.Kukhtetskiy, 2009
Кухтецкий Сергей Владимирович,
лаборатория проблем материаловедения,
Институт химии и химической технологии СО РАН, Красноярск
E-mail: ku@icct.ru

[Ссылки]

1. Исходники проектов этой статьи – firmware и ПО хоста
2. HddClock – часы-будильник из жесткого диска
3. Статья из журнала Схемотехника, автор Леонид Ридико «Раз шажок, два шажок...», 2001. Пароль на rar-архив - 075275z2p
4. Макетные платы с интерфейсом USB.
5. AVR-USB-MEGA16: быстрая разработка USB приложений на C# при помощи класса-обертки ATMega16. Класс C# (для Visual Studio Express Edition 2008) и соответствующая прошивка, позволяющие быстро сделать USB HID устройство и написать для него приложение для компьютера. Вы управляете микроконтроллером прямо из кода на C# (дергаете его ножками, читаете регистры и т. п.).
6. Библиотека AVR-USB, примеры, документация на русском языке.
7. Как работать с платой AVR-USB-MEGA16 из Visual Studio (версия 2003). На примере описано управление светодиодом на макетке из кода на C++.
8. Проекты, которые основаны на V-USB (новое название библиотеки AVR-USB) - все эти проекты можно реализовать на макетке AVR-USB-MEGA16.
9. Разработка устройства USB - как начать работу с библиотеками AVR USB и libusb.
10. Другой пример управления шаговым двигателем, использующий V-USB.

Последнее обновление ( 10.11.2010 )
 

Комментарии  

  1. #15 spyphy
    2013-12-1423:18:20 На двигателе из FDD только 4 провода. Я так понимаю общий там на корпусе висит. Но делать +V на корпус это не хорошо ИМХО. Получается, нужно по схеме эмиттерных повторителей включать транзисторы…

    microsin: скорее всего у двигателя FDD не 4 фазные обмотки, а только 3. И они наверняка изолированы от корпуса. Шаговые двигатели разные бывают, Вы разве этого не знали? Причем наверняка в FDD применен не шаговый, а синхронный двигатель BLDC с датчиками положения ротора на элементах Холла. Такие трехфазные моторы стоят и в HDD, то там для определения положения ротора обычно используют ЭДС самоиндукции. Работают двигатели BLDC почти так же, как и шаговые, разница только в скорости работы (шаговые двигатели поворот ротора четко делят на шаги, а синхронные BLDC тянут ротор вращающимся магнитным полем), и в принципе управления обмотками.
  2. #14 Павел
    2013-02-1421:40:12 Большое спасибо, хотел бы узнать, если еще программы для управления ШД через USB.

    microsin: не знаю, возможно связанные с профессиональны м применением в промышленности что-то и есть. Попробуйте поискать самостоятельно с помощью поисковых систем.
  3. #13 Павел
    2013-02-1302:06:53 Как реализовать вариант для двигателя с изменением направление вращения (по часовой, против часовой)?

    microsin: очень просто. Направление вращения шагового двигателя зависит от порядка коммутации его обмоток (от взаимного положения фаз переменного напряжения, подаваемого на обмотки). Например, если в Вашем шаговом двигателе 3 обмотки - A, B и C, то для вращения вперед последовательно сть подачи напряжения на обмотки должна быть сначала A, потом B, потом C, потом снова A, и так далее (ABCABCABCAB..). Если нужно вращать в обратную сторону, то последовательно сть подачи напряжений должна быть CBACBACBA… и так далее.
  4. #12 Александр
    2011-12-0612:56:42 > Дело в том, что расчет такой схемы довольно сложен… поэтому расчет делается только в крайнем случае, и очень приблизительно… и берется диод с запасом по параметрам на 100..200%

    microsin, во-первых - статья действительно прекрасна, большое спасибо! Во-вторых, по диодам - может я чего-то недопонял, но расчёт диодов в указанной схеме мне видится простым.
    В момент коммутации обмоток (при закрытии транзисторов) броска обратного напряжения на диоде не будет!
    Вообще в этой схеме максимальное обратное напряжение на диодах не превысит напряжения питания (ну можно взять на 2 питания на совсем уж пожарный случай :).
    А прямой ток диоды должны выдерживать равный току через обмотки двигателя (хотя бы кратковременно) , - именно он будет циркулировать через диод в прямом направлении из-за самоиндукции обмотки двигателя, очень быстро линейно затухая (именно линейно, а не экспоненциально , как если бы через резистор).

    microsin: Ваше спасибо плавно переадресовываю Сергею Кухтецкому, так как именно он автор схемы, разработки и статьи. За комментарий благодарю, возможно Вы и правы.
  5. #11 Vasilih007
    2011-05-2817:51:12 Замечательная статья, и благодаря ей я возможно сдам диплом. Но вот такой вопрос - как были выбраны диоды? Ведь нельзя же просто так взять и сказать: "а вот эти должны точно выдержать"?! Ведь можно было взять и диод послабее. Как именно посчитать максимум ЭДС в катушке, чтобы диод оставался работоспособным ?

    microsin: поспешили Вы с благодарностями , потому что ответа фактически не будет. Дело в том, что расчет такой схемы довольно сложен (при желании можете найти в учебниках), поэтому расчет делается только в крайнем случае, и очень приблизительно (считай с потолка), и берется диод с запасом по параметрам на 100..200%. Если так сделать нельзя, то просто подгоняется схема включения - для уменьшения выброса обратного напряжения снижают скорость нарастания импульса, а для ограничения тока ставят гасящие резисторы. В этой схеме скорость нарастания импульса противоЭДС ограничена переходными емкостями переходов транзисторов (попробуйте-ка их учесть в расчетах), а ток импульса ограничен активным сопротивлением обмоток, монтажа и внутренним сопротивлением блокирующих конденсаторов (как Вы собираетесь их учитывать, интересно?). Поэтому никто собственно и не рассчитывает такую схему.
  6. #10 Bиталий
    2011-05-2020:40:24 Подскажите пожалуйста, как переделать схему, чтобы управлять не одним,а несколькими ШД? Какую плату ставить и какие изменения в программе?

    microsin: чтобы управлять несколькими ШД, лучше применить макетную плату AVR-USB162 (или AVR-USB162MU), на которой стоит чип с аппаратным USB. Схему ключей менять не надо, просто их будет больше. Программу furmware придется переделать для поддержки нескольких ШД. Как переделать - на этот вопрос в комментариях ответить невозможно.
  7. #9 BraMix
    2011-05-1022:48:35 А как сделать что бы он крутился вперед-назад???

    microsin: для изменения направления вращения нужно поменять порядок чередования фаз.
  8. #8 fasty
    2011-03-1022:26:19 Здравствуйте!!! Сразу извиняюсь т.к. я полный нуб в этой теме, но можете по возможности ответить на следующие вопросы:
    1) какая приблизительно доля от заявленного производителем момента остается при использовании одной фазы?
    2) мешает ли что-нибудь организовать полношаговый режим с двумя включенными фазами в данном примере тупо изменив немного программный код?
    3) можно ли управлять биполярным двигателем?
    4) Можно ли управлять таким устройством двигателями уровня ДШИ-200-3-3 (FL57…) и вообще какой предел?
    5) Можно ли использовать AVR-USB-MEGA16 в качестве микроконтроллер а перед L297+L298N или L6208?

    microsin: пишите лучше в почту, потому что Ваши вопросы вызывают слишком много вопросов, и о чем Вы спрашиваете, мало понятно.

    1) Шаговый двигатель на одной фазе - это как? Наверное, моих телепатических способностей недостаточно.
    2) Ничто не мешает.
    3) Можно.
    4) Можно. Пределов никаких, если отсутствует техническое задание.
    5) Конечно можно.
  9. #7 Сергей
    2011-02-1523:17:40 А у меня 4 провода, как мне подключать?
  10. #6 NEW_Domine
    2011-01-1904:57:26
    Цитирую Smith:
    пс: у меня 6 проводов 3 вверху и 3 в низу

    Смит, у Вас "Униполярный шаговый двигатель с постоянными магнитами", т.е. у вас на нём 2 обмотки со срединными отводами.

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2023