3sin
.pdfСравнение фактического направления вращения с требуемым направлением вращения, позволяет определить, вращается ли двигатель в нужном направлении.
3.5.5 Синхронизация и изменение направления
Когда микроконтроллер только начинает работу, был включен или сброшен, двигатель может уже вращаться. Поэтому важно, что бы программа умела определять состояние двигателя и подстраиваться к этому состоянию.
При изменении направления вращения, ротор должен быть сначала остановлен, а уж потом запущен в противоположном направлении. Если команда изменения направления поступит еще раз, прежде чем двигатель остановился, программа должна повторно синхронизироваться перед подачей напряжений на выводы.
Синхронизация и вращение управляются датчиками холла. Информация о направлении вращения получена, как описано в разделе 3.5.4.
Двигатель полагают остановленным, когда прошло достаточное число тиков с момента последнего изменения датчика холла.
Синхронизация происходит, когда двигатель вращается в нужном направлении и обнаружены не менее двух изменений датчика холла.
3.5.6 Коммутация с опережением
Программируемый угол опережения коммутации может использоваться, чтобы настраивать фазу синусоиды, чтобы заставить её опережать угол ротора. Это необходимо что бы заставить двигатель работать на максимальной скорости и/или эффективности. Угол опережения коммутации, во время выполнения доступен и может быть установлен, чтобы измениться согласно, например скорости ротора или амплитуде. Угол опережения коммутации получается, если добавлять смещение к индексу таблицы значений, таким образом, сдвигая фазу волны. Угол опережения коммутации может быть настроен в шагах таблицы значений (1.8 °).
3.5.7 Вывод сигнала тахогенератора
Выходной сигнал тахогенератора сгенерирован непосредственно от датчика холла, чтобы выдать сигнал, который меняет полярность при каждом изменении датчика холла.
3.6 Обнаружение сверхтока
Блокировка ротора, внезапное изменение нагрузки или быстрое ускорение могут вызвать чрезмерный ток через драйвер и двигатель. Чтобы избежать повреждений из-за сверхтока, очень важно всегда контролировать ток. Обычно, устанавливается шунт между транзисторами драйвера и землей, и, чтобы вычислить ток, измеряется падение напряжения на этом шунте. Это может быть сделано аналого-цифровым преобразователем (ADC) или аналоговым компаратором.
В этом документе использовался ADC для измерения тока. Использование ADC вводит небольшую задержку, из-за времени преобразования, но есть другие преимущества. Аналоговый компаратор работает все время, и поэтому очень чувствителен к шумам от переключений PWM, если не делать сложную внешнюю фильтрацию. Эту проблему проще преодолеть с помощью ADC. Напряжение измеряется в определенный момент, который может быть вызван, например, прерыванием переполнения в таймере PWM (точка 1 на рис.3-2), тогда измерение будет сделано в середине цикла PWM. Если коэффициент заполнения не слишком мал, этот момент будет далеко от любого переключения PWM. В результате потребуется более простая внешняя фильтрация, чтобы получить надежные значения тока.
3.7 Управление скорости
Эта РпП включает примеры и управления скорости разомкнутого цикла и контроллера PID. Также возможно добавить другие виды регуляторов скорости. Как вычислять фактическую скорость ротора, было описано в разделе 3.5.2.
3.7.1 Задатчик скорости
Контроллер, открытого или закрытого цикла, нуждается в некотором задатчике скорости. В этом документе используется аналоговое напряжение, хотя это могло бы быть легко заменено, например командой UART. Аналоговый задатчик измеряется с помощью ADC.
3.7.2 Контроллер скорости
Можно построить программу управления скоростью с закрытым или открытым контуром (с обратной связью (ОС) или без). Управление скоростью без ОС очень просто. Аналоговое значение задатчика скорости, оцифрованное на 8 бит, непосредственно используется, как значение амплитуды на 8 бит для сгенерированных синусоид.
Управление скоростью с ОС также использует значение аналогового задатчика скорости на 8 бит как первичное значение к установке амплитуды. Кроме того, PID (пропорциональная, интегральная производная) контроллер используется, чтобы удостовериться, что скорость точно соответствует желаемой. Измерение ADC используется как точка назначения для контроллера скорости. Так как внутреннее представление скорости – инкремент индекса, взвешенный сигнал должен быть преобразован в то же самое представление. Раздел 3.5.2 описывает отношения между скоростью в RPM и внутренним представлением инкрементом индекса. Блок-схема системы с ОС с подачей вперед показана на рисунке 3-4.
Рисунок 3-4. Контроллер PID с подачей вперед.
Цикл управления скорости - единственная часть программы управления двигателем, которое не управляется прерыванием. Это, потому что вычисления PID производятся слишком долго, чтобы исполнятся в подпрограмме прерывания, без ухудшения управления двигателем. Кроме того, нет необходимости выполнять цикл управления так часто, как коммутации.
4 Выполнение программы
Исходный текст программы, предоставляемой с этой РпП, полностью прокоментирован Doxygen, который объясняет все части кода. Открытие файла 'readme.html' поможет обратиться к полной документации Doxygen в формате html.
Эта глава включает дополнительную информацию, нужную для более полного понятия программы.
4.1 Структура кода
Обратите внимание, что код был написан для высокой эффективности. Из-за этого, почти весь исходный текст содержится в одном файле, чтобы позволить компилятору максимально оптимизировать код. Большинство функций объявлено с директивой " *pragma inline=forced", так как их вызывают из подпрограмм прерывания.
4.2 Использование периферии
Периферийные модули ATmegax8, используемые в этой программе перечислены в Таблице 4-1. Таблица 4-1. Использование аппаратных модулей.
Модуль |
Использование |
Timer/counter0 |
PWM фазы U |
Timer/counter1 |
PWM фазы V |
Timer/counter2 |
PWM фазы W |
Каналы ADC |
Задатчик скорости/измерение тока |
Pin change interrupt 0 |
Прерывание аварийного завершения |
Pin change interrupt 1 |
Прерывание по изменению датчиков холла |
Pin change interrupt 2 |
Прерывание изменения направления |
4.3 Действия, выполняемые в прерываниях
Программа управления двигателем полностью построена на прерываниях, исключая управление скоростью. В Таблице 4-2 показано, за что отвечает каждое прерывание, используемое в программе. Понимание работы каждой подпрограммы обработки прерывания - ключ к пониманию, как работает вся программа.
Таблица 4-2. Действия прерываний.
Прерывание |
Функция |
|
Ответственность/действие |
|
Timer/counte1 захват |
Timer1CaptureISR |
|
Обновление значения PWM. |
|
|
|
|
Управление коэффициентом заполнения блочной |
|
|
|
|
коммутации. |
|
|
|
|
Измерение скорости. |
|
|
|
|
Обнаружение останова. |
|
|
|
|
|
|
Pin change 0 |
EmergencyInterruptISR |
|
Обработка внешнего сигнала выключения |
|
Pin change 1 |
HallChangeISR |
|
Синхронизирует синусоиду с датчиками холла. |
|
|
|
|
Блочная коммутация. |
|
|
|
|
Обновление сигнала тахогенератора. |
|
|
|
|
Обнаружение фактического направления. |
|
|
|
|
Проверка синхронизации двигателя и программы. |
|
|
|
|
Обновление сигнала противовращения. |
|
|
|
|
Вычисление инкремента индекса таблица синуса. |
|
|
|
|
Обнаружение останова |
|
Pin change 2 |
DirectionInputChangeISR |
|
Ввод сигнала направления вращения. |
|
ADC complete |
ADCCompleteISR |
|
Управление амплитудой для синусной/блочной |
|
|
|
|
коммутации. |
|
|
|
|
Измерение тока. |
|
|
|
|
Выбор канала ADC. |
|
4.4 Генерация синусоиды
Две подпрограммы обработки прерывания используются, чтобы получить на выходе синусоиду. Timer1CaptureISR изменяет регистр сравнения PWM, один раз для каждого цикла PWM. HallChangeISR синхронизирует синусоиду по текущему положению ротора, и вычисляет инкремент индекса таблицы значений. Рисунок 5-2 показывает взаимодействие между этими двумя прерываниями. Состояние, обозначенное как 'Любое состояние', показывает, что не важно в каком состоянии был или будет двигатель.
Рисунок 4-1. Конечный автомат генерации синусоиды.
4.5 Контроль направления и синхронизации
4.5.1 Связные флаги Необходимы два определения, чтобы объяснить контроль синхронизации и направления:
Синхронизатор указывает ожидаемое значение датчиков холла для направления вращения, которым командует входной сигнал направления. Это нужно, чтобы гарантировать, что синусоида генериться с правильной частотой, фазой и в нужном направлении.
Детектор останова указывает, что датчики холла не менялись в течение определенного числа тиков.
Два флага, которые являются частью глобальной переменной fastFlags, указывают, синхронизирован ли двигатель в настоящее время и/или остановлен. Эти флажки автоматически проверяются подпрограммами обработки прерывания в некоторых событиях. Следующие функции/прерывания изменяют эти флаги:
CommutationTicksUpdate:
∙motorStopped=ИСТИНА, если предопределенный число ‘тиков’ прошло с последнего изменения датчика холла.
∙motorSynchronized=ЛОЖЬ, если флаг motorStopped был только что установлен на
ИСТИНУ.
Эту функцию вызывает Timer1CaptureISR.
MotorSynchronizedUpdate:
∙motorSynchronized=ИСТИНА, если выполнены критерии синхронизации.
∙motorSynchronized=ЛОЖЬ, если критерии синхронизации не выполнены.
Эту функцию вызывает HallChangeISR.
HallChangeISR:
∙motorStopped=ЛОЖЬ (двигатель не может быть остановленным, если датчики холла изменяются)
DirectionInputChangeISR:
∙motorSynchronized=ЛОЖЬ
∙motorStopped=ЛОЖЬ
4.5.2Логика синхронизации и направления
Есть несколько ситуаций, где программа должна синхронизироваться с двигателем, прежде чем начнет генерировать синусоиду:
∙Когда двигатель стартует после останова, первые переключения используют блочную коммутацию. Блочная коммутация используется, пока синхронизация не получена. Это гарантирует, что синусоида будет сгенерирована с правильной частотой и фазой, когда двигатель переключится на неё.
∙Когда микроконтроллер стартует, а двигатель уже вращается, программа не будет ничего генерировать, пока она не засинхронизируется с двигателем, или пока ротор не прекратит вращение.
∙Когда требуется изменить направление вращения, запуск будет заблокирован или инициализировано торможение, пока двигатель не остановиться. Если снова потребуется изменение направления, двигатель может быть синхронизироваться заново. В этом
случае, возобновляется синусоидальный запуск с правильной частотой, не дожидаясь остановки двигателя.
Полностью управление синхронизацией и направлением показаны на рис.4-2. Двигатель остановлен, значит, флажок motorStopped ИСТИНЕН. Двигатель синхронизирован, значит, что флажок motorSynchronized ИСТИНЕН. Если требуется сменить направление, тогда должно быть выполнено DirectionInputChangeISR.
Рисунок 4-2. Конечный автомат управления направлением и синхронизацией.
4.6 Аналого-цифровые преобразования
В этом примере программы, ADC используется, чтобы принимать две величины: задатчик скорости и ток двигателя. ADC способен производить преобразование только одной выборки за раз, так что входные каналы конвертируются по очереди.
Каждое переполнение Timer/counter0 автоматически вызывает осуществление выборки входного значения. Это гарантирует, что выборки происходят в середине цикла PWM, делая каждое текущее измерение, сопоставимым с последним.
Когда период преобразования закончен, вызывается соответствующее прерывание ADC, и полученное значение помещается в глобальную переменную, соответствующую каналу ADC выбранному в настоящее время. Флаг прерывания переполнения Timer/Counter0 должен быть очищен вручную, если прерывание переполнения Timer/Counter0 не выполнено. Новый преобразование не будет вызвано, пока этот флаг не очищен.
Если необходимо обрабатывать больше входных сигналов, подпрограмма прерывания ADC может быть расширена, чтобы добавить больше чтений к циклу.
Обратите внимание, в исходном тексте программы, значение тока двигателя только сохраняется в глобальной переменной. Это значение нигде в программе не используется, для ограничения тока или завершения по сверхтоку, поскольку эти ограничения тока зависят от конкретных устройств.
5 Аппаратные средства
Эта глава описывает, как подключить аппаратные средства для использования согласно с этим документом.
5.1 Назначение выводов
Назначение выводов, используемое в этом документе, показано на рисунке 5-1. Функция каждого вывода описана в Таблице 5-1.
Рисунок 5-1. Назначение выводов
Таблица 5-1. Использование выводов AVR
Pin |
Имя |
назначение |
направление |
|
PD5 |
UL |
Фаза U сигнал управления нижнего ключа |
Out |
|
PD6 |
UH |
Фаза U сигнал управления верхнего ключа |
Out |
|
PB2 |
VL |
Фаза V сигнал управления нижнего ключа |
Out |
|
PB1 |
VH |
Фаза V сигнал управления верхнего ключа |
Out |
|
PD3 |
WL |
Фаза W сигнал управления нижнего ключа |
Out |
|
PB3 |
WH |
Фаза W сигнал управления верхнего ключа |
Out |
|
PCO |
H1 |
Датчик Холла 1 |
In |
|
PC1 |
H2 |
Датчик Холла 2 |
In |
|
PC2 |
H3 |
Датчик Холла 3 |
In |
|
PC3 |
Задатчик скорости |
Аналоговый вход управления амплитудой. |
In |
|
Внешний сигнал в пределах 0-1.1V. |
||||
|
|
|
||
PC4 |
Ток |
Измерение тока двигателя. Внешний сигнал в |
In |
|
пределах 0-1.1V. |
||||
|
|
|
||
|
Экстренный |
Когда измениться логический уровень на этом |
|
|
PB5 |
выводе будет вызвано прерывание |
In |
||
останов |
||||
|
EmergencyInterrupt. |
|
||
|
|
|
||
PD2 |
Направление |
0-вперед, 1-назад. |
In |
|
вращения |
||||
|
|
|
||
|
|
0 - двигатель вращается согласно сигналу |
|
|
PD4 |
Реверсивное |
«Направление вращения». |
Out |
|
вращение |
1 – двигатель вращается в обратном |
|||
|
|
|||
|
|
направлении или остановлен. |
|
|
|
|
Выходной сигнал (меандр) с частотой в 3 раза |
|
|
PD7 |
Тахо |
выше электрической частоты вращения |
Out |
|
|
|
двигателя. |
|
5.2 Соединение Atmega48/88/168 с драйвером и двигателем
Для работы этой программы требуются:
∙3-фазный двигатель с постоянными магнитами и датчиками холла.
∙Драйвер, способный управлять двигателем.
∙Atmel ® ATmega48/88/168 микроконтроллер.
∙Аналоговый входной сигнал в диапазоне 0-1.1V (для управления скорости).
Рисунок 5-2 показывает концептуальную схему построения полной системы.
Обратите внимание, чтобы программа могла работать, сигналы завершения и направления, даже если они не нужны, должны быть подключены к соответствующим логическим уровням.
Рисунок 5-2. Концептуальное схемное решение полной системы.
5.2.1 Использование драйвера ATAVRMC100
Эта программа была проверена на наборе для разработки приводов мощных двигателей ATAVRMC100. ATAVRMC100 имеет встроенный микроконтроллер AT90PWM3, но возможно
использовать его и как мощный драйвер с другим микроконтроллером через интерфейсы EXT_DRV и SENSOR на плате. Разъем EXT_DRV задокументирован в Руководстве Пользователя ATAVRMC100, доступном на web узле Atmel. Важно стереть AT90PWM3 перед использованием ATAVRMC100 с другим микроконтроллером, чтобы гарантировать, что только один микроконтроллер управляет сигналами.
Таблица 5-2 содержит полный список сигналов, которые должны быть связаны с платой ATAVRMC100. Обратите внимание, что сигнал GND связан с отрицательным выводом шунта, который фактически напрямую связан с общим проводом. Рисунок 5-3 показывает графическое представление разъема EXT_DRV.
Таблица 5-3 показывает необходимые подключения для интерфейса с датчиками холла. Графическое представление этого интерфейса показано на Рисунке 5-4.
|
Таблица 5-2. Подключение EXT_DRV |
ATAVRMC100. |
|||
Имя сигнала |
|
ATmegax8 pin |
сигнал ATAVRMC100 |
|
номер вывода EXT_DRV |
UH |
|
PD6 |
H_A |
|
1 |
UL |
|
PD5 |
L_A |
|
2 |
VH |
|
PB1 |
H_B |
|
3 |
VL |
|
PB2 |
L_B |
|
4 |
WH |
|
PB3 |
H_C |
|
5 |
WL |
|
PD3 |
L_C |
|
6 |
Ток |
|
PC4 |
V шунт+ |
|
7 |
GND |
|
GND |
V шунтt- |
|
8 |
Рисунок 5-3. Разъем EXT_DRV.
Таблица 5-3. Интерфейс датчиков холла ATAVRMC100.
Имя сигнала |
Вывод ATmegax8 |
Сигнал ATAVRMC100 |
H1 |
PCO |
Sensor A |
H2 |
PC1 |
Sensor B |
H3 |
PC2 |
SensorC |
Рисунок 5-4 Подключение датчиков холла
6 Выходные графики
Рисунки 6-1 и 6-2 показывают сгенерированные волны, при вращении вперед и назад с различными скоростями. На осциллографе использовалась функция усреднения, чтобы сгладить формы волны. Оба графика показывают, с верху вниз: напряжения фазы для U, V, W, межфазное напряжение U-V, датчики холла H1, H2 и H3.
Рисунок 6-1 Вращение вперед, 750 RPM
Рисунок 6-2 Вращение назад, 12660 RPM
7 Размер программы и характеристики
Таблица 7-1 показывает использование памяти программ и ОЗУ. Обратите внимание, что размер программы включает почти 900 байт, занятых таблицами значений.
Таблица 7-1. Использование памяти |
|||
|
Программа |
ОЗУ |
|
Открытая система управлением |
~2.6kB |
~70B |
|
скоростью |
|||
|
|
||
Управление скоростью PID |
~3.5kB |
~90B |
|
контроллером |
|||
|
|
||
8 Ссылки
1. Valentine, R., Motor control electronics handbook, 1998, McGraw-Hill.
2. Atmel corporation, ATAVRMC100 hardware user guide rev. B, February 2006 http://www.atmel.com/dvn/resources/prod documents/doc7551.pdf
9 Источники
1.Оригинал этого документа на английском http://www.atmel.com/dyn/resources/prod_documents/doc8010.pdf
2.Программа описанная здесь http://www.atmel.com/dyn/resources/prod_documents/AVR447.zip
