Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > MB90 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Применение микроконтроллеров серии MB89/MB90/MB91 для управления шаговыми двигателямиВведениеШаговые двигатели находят широкое применение в принтерах, станках с ЧПУ, дисководах, автомобильных приборных панелях и других устройствах, где требуется прецизионное передвижение под управлением микрокомпьютера. Для упрощения процесса разработки и снижения стоимости конечных изделий, использующих шаговые двигатели, Fujitsu предлагает недорогие 8-, 16-, и 32-битные микроконтроллеры с встроенным драйвером шагового двигателя. Для управления шаговым двигателем требуется специальная система управления и сильноточные драйвера. Такая система может быть построена на дискретной логике или специальных интерфейсных микросхемах, но в результате усложняется схемотехника и/или вырастает цена конечного устройства. Широкоизвестный пример применения шаговых двигателей – автомобильная панель управления. Шаговые двигатели управляют стрелками индикаторов, таких, как спидометр и тахометр. Один или несколько контроллеров шаговых двигателей в Flash-микроконтроллерах Fujitsu могут быть индивидуально запрограммированы для контроля датчика скорости, тахометра, топливного датчика и датчика температуры двигателя. Эта Application Note описывает управление шаговым двигателем при помощи Flash-микроконтроллера Fujitsu с встроенным драйвером ШД на примере управления стрелкой. 1 Физические основыВ этом разделе даётся объяснение технических основ управления шаговыми двигателями. 1.1 Использование шагового двигателя для управления стрелочным прибором. Ряд микроконтроллеров Fujitsu имеют встроенный контроллер шагового двигателя. Он с лёгкостью может быть использован для очень плавного вращения ШД, как в данном примере стрелочного индикатора. Чтобы этого добиться, необходимо чётко представлять его физические характеристики и свойства. Поэтому рассмотрим кратко физические основы функционирования ШД. В данном описании мы применим простую эквивалентную схему замены шагового двигателя. В этой модели ротор представлен двухполюсным магнитом, а статор – двумя обмотками, расположенными перпендикулярно друг другу (Рис.1). Для того, чтобы обеспечить действительно плавное перемещение, мы должны обеспечить постоянный вращающий момент в течение всего процесса движения. Это достигается таким геометрическим расположением катушек, которое позволяет получить постоянный суммарный момент (см. рис.2 ). Проще говоря, для каждой катушки используется sin и cos проекция, таким образом, на ротор, находящийся в любом положении всегда действует одинаковый момент. Для создания движения, мы должны последовательно пройти все положения от Старта до Останова. В ШД это осуществляется пошаговым методом (Рис. 3). Таким образом, при движении сохраняется постоянная скорость. Это, однако, не относится к точке останова, где двигатель прекращает движение моментально. Чтобы избавиться от этого, используем ФНЧ, который позволяет решить проблему в точке останова (Зона B). Аналогичная проблема присутствует и в точке старта, для её устранения используем ФНЧ второго порядка. Такой ФНЧ решает проблему в точке старта (Зона A), но накладывает ограничения на максимальную скорость и максимальное ускорение в зависимости от точки траектории. С другой стороны, максимальная скорость и максимальное ускорение двигателя ограничены конструктивными особенностями. Чтобы быть уверенными, что требуемые параметры не превышают физических возможностей двигателя, мы применили ограничитель ускорения и скорости. Этот ограничитель должен быть встроен в ФНЧ второго порядка, при этом уровни ограничения должны быть симметричными. ФНЧ второго порядка легко реализуется двухступенчатым применением ФНЧ первого порядка, который, в свою очередь может быть представлен при помощи простой математической формулы вида: Для повышения скорости вычисления удобно преобразовать её следующим образом: Таким образом, требуется только две операции сдвига и два вычитания, что позволяет экономить вычислительные ресурсы микроконтроллера. Эта операция должна повторяться через заданные промежутки времени. Разница между текущим положением в данный момент и предыдущим положением в предшествующий момент времени представляет собой скорость. Таким образом, мгновенная скорость в конкретный момент времени вычисляется простым вычитанием. Если значение скорости сохраняется в ячейке памяти, мы можем вычесть текущее значение скорости из предыдущего значения. Результатом данной операции будет ускорение. Физически это выглядит следующим образом: Алгоритмически можно записать: Для ограничения мгновенных значений скорости и ускорения мы должны убедиться, что они достигли предельных значений: В данном примере мы сравниваем значения скорости и ускорения с предустановленными константами и если эти величины превышают пределы, они заменяются на значения из следующей формулы: Используя вычисление по данной формуле несколько сот раз в секунду (время повторения несколько мс) мы получим полноценное движение стрелки в нашем примере. На практике значение демпфирующего коэффициента n выбирают из диапазона 3-6, основываясь на характеристиках ФНЧ второго порядка. В данном примере мы использовали табличный метод для управления выходами ШД контроллера. Ниже приведен пример выходной функции для модуля контроллера ШД, использующий 128 микрошагов на квадрант для каждой из таблиц синуса и косинуса, т.е. предустановленное значение для данной функции ограничено 256-ю микрошагами на квадрант. При этом мы можем легко изменять разрешение в пределах 0…7 бит на квадрант, используя только операции сдвига для приведения к требуемой разрядности и выборки из таблицы синусов/косинусов. 2 Контроллер шагового двигателя В этом разделе описаны особенности контроллера ШД 2.1 Микроконтроллеры с встроенным контроллером ШД Fujitsu Microelectronics предлагает ряд микроконтроллеров с встроенным контроллером ШД:
2.2 Блок контроллера шагового двигателя Вышеупомянутые серии МК будут использованы в качестве примера для объяснения работы встроенного контроллера ШД. Данный контроллер состоит из 4 драйверов, связанной с ними переключающей логики и двух ШИМ-генераторов. Драйвера двигателя имеют повышенный до 30мА ток нагрузки и могут быть подключены непосредственно к четырём выводам обмоток двигателя. Таким образом, маломощные ШД могут управляться напрямую, для более мощных моторов схема легко модернизируется подключением внешнего мостового драйвера. Комбинация из ШИМ-генераторов и переключающей логики разработана для контроля вращения двигателя. Блок контроллера ШД разделён на 2 канала и имеет возможность подключения четырёх выводов от двух обмоток мотора, как изображено на рисунке: 2.3 Регистры управления контроллером ШД "n"-ый контроллер ШД имеет следующие 5 типов регистров:
2.3.1 Регистр управления ШИМ Регистр управления ШИМ служит для запуска и остановки контроллера ШД, управления прерываниями и управления выходными выводами. Эти функции одинаковы для всех одноименных модулей контроллера ШД.
Рис. 9 Назначение битов регистра управления ШИМ 2.3.2 Регистр сравнения ШИМ Регистры сравнения ШИМ1 и ШИМ2 (PWC1n + PWC2n) определяют скважность импульсов ШИМ. Значение "00h" соответствует нулевой длительности импульса ,"FFh" соответствует коэффициенту заполнения 99.6%. Два 8-битных регистра сравнения доступны для чтения и записи в любое время, но изменённое значение вступит в силу только после завершения текущего такта ШИМ, после того, как бит BS регистра выбора PWM2 будет установлен в "1". 2.3.3 Регистр выбора ШИМ
Рис. 13 Назначение битов регистра выбора ШИМ
Рис. 15 Назначение битов регистра выбора ШИМ2 3 Примеры программ В этом разделе приводятся и поясняются программные коды для управления стрелочным индикатором 3.1Таблица для организации микрошагов ************************************************************************************/ /* Этот программный пример предлагается «as is» и может быть изменён. Fujitsu */ /* Microelectronics не несёт никакой ответственности за возможные ошибки и */ /* вероятную несовместимость ни в каких случаях */ /* © Fujitsu Microelectronics Europe GmbH */ /* Таблица sin\cos для микрошагового режима */ unsigned char const SMC_TAB_CS[129]={ 0, 3, 6, 9, 13, 16, 19, 22, 25, 28, 31, 34, 37, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98,100,103,106,109,112,115,117, 120,123,126,128,131,134,136,139, 142,144,147,149,152,154,157,159, 162,164,167,169,171,174,176,178, 180,183,185,187,189,191,193,195, 197,199,201,203,205,207,208,210, 212,214,215,217,219,220,222,223, 225,226,228,229,231,232,233,234, 236,237,238,239,240,241,242,243, 244,245,246,247,247,248,249,249, 250,251,251,252,252,253,253,253, 254,254,254,255,255,255,255,255, 255 }; /*-------------------------------------------------------------------*/ /* Таблица для управления квадрантами */ unsigned char const smc_quad_a[4]={0x02, 0x10, 0x10, 0x02}; unsigned char const smc_quad_b[4]={0x50, 0x50, 0x42, 0x42}; /*-------------------------------------------------------------------*/ void smc_out(int ustp) { int q,d,smc_a,smc_b; /* вспомогательные переменные*/ q=((ustp>>8) & 3); /* нормализуем диапазон разбиения до 1024 точек на полупериод */ d=((ustp>>1) & 127); /* сделаем нормализацию внутреннего разбиения до 512 точек на полупериод, таким образом, бит 0 в ustp не влияет! */ smc_a=SMC_TAB_CS[d]; /* загрузим компонент sin */ smc_b=SMC_TAB_CS[128-d]; /* загрузим компонент cos обратите внимание, что таблица увеличена и используется с «обратной стороны» */ if ((q & 1)==1) { /* определим направление движения */ PWC10=smc_a; /* установим значение sin для катушки A */ PWC20=smc_b; /* установим значение cos для катушки B */ } else { /* при вращении в обратную сторону сменим знак */ PWC10=smc_b; /* установим значение cos для катушки A */ PWC20=smc_a; /* установим значение sin для катушки B */ } PWC0=0xE8; /* инициализация системы */ PWS10=smc_quad_a[q]; /* квадрантное управление катушкой A */ PWS20=smc_quad_b[q]; /* квадрантное управление катушкой B */ } 3.2 Фильтр низкой частоты Эта подпрограмма организована таким образом, чтобы обеспечить оптимальный баланс между требованиями минимизации используемой памяти и хорошей читаемостью. Ниже приведен пример программы ФНЧ второго порядка для управления шаговым двигателем. /* Этот программный пример предлагается «as is» и может быть изменён. Fujitsu */ /* Microelectronics не несёт никакой ответственности за возможные ошибки и */ /* вероятную несовместимость ни в каких случаях */ /* © Fujitsu Microelectronics Europe GmbH */ void smc__lpf(void) { /* эти вычисления занимают небольшую часть от миллисекунды */ smc_old=smc_new; /* сохраним значение smc_old */ /* ФНЧ первого порядка */ *((int *)&smc_clc1+1)=smc_inp; /* нормализация входного значения */ smc_clc1=(smc_clc1>>smc_dn); smc_clc2=(smc_pt1-(smc_pt1>>smc_dn)); smc_pt1=smc_clc2+smc_clc1; /* ФНЧ второго порядка */ smc_clc2=(smc_pt2-(smc_pt2>>smc_dn)); smc_pt2=smc_clc2+(smc_pt1>>smc_dn); smc_new=*((int *)&smc_pt2+1); /* новое выходное значение */ } Данный ФНЧ 2-го порядка работает следующим образом: Таким образом, нам нужно использовать простые ограничители скорости и ускорения в дополнение к ФНЧ второго порядка. 3.3 Пример подпрограммы обработки прерываний Этот код должен исполняться в подпрограмме обработчика прерываний, вызываемой каждые несколько миллисекунд. /* Этот программный пример предлагается «as is» и может быть изменён. Fujitsu */ /* Microelectronics не несёт никакой ответственности за возможные ошибки и */ /* вероятную несовместимость ни в каких случаях */ /* © Fujitsu Microelectronics Europe GmbH */ __interrupt void irq_stepper_srv (void) { /* «фоновая» задача контроля шагового двигателя*/ smc_out(smc_new); /* для уменьшения джиттера сначала выведем значение*/ smc__ido(); /* потом вычислим значение для следующего такта */ smc_avclip(); TMCSR1_UF = 0; /* сброс флага */ } 3.4 Ограничение до требуемых физических значений /* Этот программный пример предлагается «as is» и может быть изменён. Fujitsu */ /* Microelectronics не несёт никакой ответственности за возможные ошибки и */ /* вероятную несовместимость ни в каких случаях */ /* © Fujitsu Microelectronics Europe GmbH */ void smc_avclip(void) { /* ограничение до требуемых физических значений */ smc_clc1=(smc_new-smc_old); /* действующее значение скорости */ if ( smc_clc1 < -smc_vmax ) { /* проверка режима движения вперёд */ /* исправление, т.к. скорость превышена */ smc_new=smc_old-smc_vmax; /* установим новую скорость */ smc_clc1=-smc_vmax; /* запомним новую скорость */ *((int *)&smc_pt2+1)=smc_new; /*установим новое выходное значение */ } if ( smc_clc1 > smc_vmax ) { /* проверка режима обратного движения */ /* исправление, т.к. скорость превышена */ smc_new=smc_old+smc_vmax; /* установим новую скорость */ smc_clc1=smc_vmax; /* запомним новую скорость */ *((int *)&smc_pt2+1)=smc_new; /*установим новое выходное значение */ } smc_acc=(smc_clc1-smc_velo); /* действующее значение ускорения */ if ( smc_acc < -smc_amax ) { /* проверка режима разгона */ /* исправление, т.к. ускорение превышено */ smc_clc1=smc_velo-smc_amax; /* установим новую скорость */ smc_new=smc_old+smc_clc1; /* пересчитаем выходное значение */ *((int *)&smc_pt2+1)=smc_new; /* установим новое выходное значение */ } if ( smc_acc > smc_amax ) { /* проверка режима торможения */ /* исправление, т.к. ускорение превышено */ smc_clc1=smc_velo+smc_amax; /* установим новую скорость */ smc_new=smc_old+smc_clc1; /* пересчитаем выходное значение */ *((int *)&smc_pt2+1)=smc_new; /* установим новое выходное значение */ smc_acc =smc_clc1-smc_velo; /* запомним новые значения скорости */ smc_velo=smc_clc1; /* и ускорения для вычислений в след. цикле*/ } Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|