Бесколлекторные электродвигатели

Автор работы: Пользователь скрыл имя, 21 Марта 2010 в 15:23, Не определен

Описание работы

Бесколлекторные (brushless англ.) электродвигатели пришли в моделизм сравнительно недавно, в последние 5-7 лет. В отличие от коллекторных моторов они питаются трехфазным переменным током. Бесколлекторные двигатели эффективно работают в более широком диапазоне оборотов и имеют более высокий КПД. Конструкция двигателя при этом проще, в ней нет щеточного узла, и нет необходимости в техническом обслуживании. Можно сказать, что бесколлекторные моторы практически не изнашиваются. Стоимость бесколлекторных двигателей несколько выше, чем коллекторных. Это вызвано тем, что все бесколлекторные моторы снабжены подшипникам и, как правило, изготовлены более качественно. Хотя, разрыв в ценах между хорошим коллекторным мотором и бесколлекторным двигателем аналогичного класса не столь уж велик

Файлы: 1 файл

Бесколлекторные электродвигатели.doc

— 552.50 Кб (Скачать файл)

Если следовать  схеме коммутации, показанной на рисунке 3 и в таблице 1, то получим шесть различных векторов магнитного потока, соответствующих шести ступеням коммутации. Шесть ступеней соответствуют одному обороту ротора.

Стартовый набор ATAVRMC100

В следующей  части данных рекомендаций по применению будет рассмотрена аппаратная и программная реализация на основе стартового набора ATAVRMC100 с микроконтроллером AT90PWM3.

Принципиальная  электрическая схема представлена на рисунках 21, 22, 23 и 24 в конце документа.

Программа содержит контур управления скоростью с помощью ПИД-регулятора. Такой регулятор состоит из трех звеньев, каждый из которых характеризуется собственным коэффициентом передачи: Kп, Kи и Kд.

Кп - коэффициент  передачи пропорционального звена, Kи - коэффициент передачи интегрирующего звена и Kд - коэффициент передачи дифференцирующего звена. Отклонение заданной скорости от фактической (на рисунке 6 называется "сигнал рассогласования") обрабатывается каждым из звеньев. Результат данных операций складывается и подается на двигатель для получения требуемой частоты вращения (см. рисунок 6).

 
Рисунок 6. Структурная схема ПИД-регулятора

Коэффициент Кп влияет на длительность переходного процесса, коэффициент Ки позволяет подавить статические ошибки, а Кд используется, в частности, для стабилизации положения (см. описание контура управления в архиве с программным обеспечением для изменения коэффициентов).

Описание аппаратной части

Как показано на рисунке 7 микроконтроллер содержит 3 контроллера силового каскада (PSC). Каждый PSC можно рассматривать как широтно-импульсный модулятор (ШИМ) с двумя выходными сигналами. Во избежание возникновения сквозного тока PSC поддерживает возможность управления задержкой неперекрытия силовых ключей (см. документацию на AT90PWM3 для более детального изучения работы PSC, а также рисунок 9).

Аварийный вход (Over_Current, токовая перегрузка) связан с PSCIN. Аварийный вход разрешает микроконтроллеру отключить все выходы PSC.

 
Рисунок 7. Аппаратная реализация

Для измерения  тока можно использовать два дифференциальных канала с программируемым усилительным каскадом (Ку=5, 10, 20 или 40). После выбора коэффициента усиления необходимо подобрать номинал шунтового резистора для наиболее полного охвата диапазона преобразования.

Сигнал Over_Current формируется  внешним компаратором. Пороговое  напряжение компаратора можно регулироваться с помощью внутреннего ЦАП.

Переключение  фаз должно выполняться в соответствии со значением на выходах датчиков Холла. ДХ_A, ДХ_B и ДХ_C подключаются к  входам источников внешних прерываний или к трем внутренним компараторам. Компараторы генерируют такой же тип прерываний, что и внешние прерывания. На рисунке 8 показано, как используются порты ввода-вывода в стартовом наборе.

 
Рисунок 8. Использование портов ввода-вывода микроконтроллера (корпус SO32)

VMOT (Vдв.) и VMOT_Half (1/2 Vдв.) реализованы, но не используются. Они могут использоваться для  получения информации о напряжении  питания двигателя.

Выходы H_x и L_x используются для управления силовым мостом. Как  было сказано выше, они зависят  от контроллера силового каскада (PSC), который генерирует ШИМ-сигналы. В  таком применении рекомендуется  использовать режим с выравниванием  по центру (см. рисунок 9), когда регистр OCR0RA используется для синхронизации запуска преобразования АЦП для измерения тока.

 
Рисунок 9. Осциллограммы сигналов PSCn0 и PSCn1 в режиме с выравниванием по центру

  • Время вкл. 0 = 2 * OCRnSA * 1/Fclkpsc
  • Время вкл. 1 = 2* (OCRnRB - OCRnSB + 1) * 1/Fclkpsc
  • Период PSC = 2 * (OCRnRB + 1) * 1/Fclkpsc

Пауза неперекрытия между PSCn0 и PSCn1:

  • |OCRnSB - OCRnSA| * 1/Fclkpsc

Блок PSC тактируется сигналов CLKPSC.

Для подачи ШИМ-сигналов в силовой каскад может использоваться один из двух способов. Первый заключается  в приложении ШИМ-сигналов к верхним  и нижним частям силового каскада, а  второй - в приложении ШИМ-сигналов только к верхним частям.

Описание программного обеспечения

Atmel разработала  библиотеки для управления БКЭПТ.  Первый шаг их использования  заключается в конфигурации и  инициализации микроконтроллера.

Конфигурация  и инициализация микроконтроллера

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

Структура программной  реализации

После конфигурации и инициализации микроконтроллера может быть выполнен запуск двигателя. Для управления двигателем необходимо только несколько функций. Все функции определены в mc_lib.h:

void mc_motor_run(void)

    - Используется  для запуска двигателя. Вызывается  функция контура стабилизации для установки рабочего цикла ШИМ. После этого выполняется первая фаза коммутации.

Bool mc_motor_is_running(void)

    - Определение  состояния двигателя. Если '1', то  двигатель работает, если '0', то двигатель  остановлен.

void mc_motor_stop(void)

    - Используется  для остановки двигателя. 

void mc_set_motor_speed(U8 speed)

    - Установка  заданной пользователем скорости.

U8 mc_get_motor_speed(void)

    - Возвращает  заданную пользователем скорость.

void mc_set_motor_direction(U8 direction)

    - Установка направления вращения 'CW' (по часовой стрелке) или 'CCW' (против часовой стрелки).

U8 mc_get_motor_direction(void)

    - Возвращает  текущее направление вращения  двигателя. 

U8 mc_set_motor_measured_speed(U8 measured_speed)

    - Сохранение  измеренной скорости в переменной measured_speed.

U8 mc_get_motor_measured_speed(void)

    - Возвращает  измеренную скорость.

void mc_set_Close_Loop(void)

void mc_set_Open_Loop(void)

    - Конфигурация  контура стабилизации: замкнутый  контур или разомкнутый (см. рисунок  13).

 
Рисунок 10. Конфигурация AT90PWM3

 
Рисунок 11. Структура программного обеспечения

На рисунке 11 показаны четыре переменные mc_run_stop (пуск/стоп), mc_direction (направление), mc_cmd_speed (заданная скорость) и mc_measured_speed (измеренная скорость). Они являются основными программными переменными, доступ к которым может выполняться посредством ранее описанных пользовательских функций.

Программную реализацию можно рассматривать как черный ящик с наименованием "Управление двигателем" (рисунок 12) и несколькими  входами (mc_run_stop, mc_direction, mc_cmd_speed, mc_measured_speed) и выходами (все сигналы управления силовым мостом).

 
Рисунок 12. Основные программные переменные

Большинство функций  доступны в mc_drv.h. Только некоторые из них зависят от типа двигателя. Функции можно разделить на четыре основных класса:

  • Инициализация аппаратной части

    void mc_init_HW(void);

    Инициализация аппаратной части полностью выполнена  в этой функции. Здесь выполняется  инициализация портов, прерываний, таймеров и контроллера силового каскада. 

    void mc_init_SW(void);

    Используется  для инициализации программного обеспечения. Разрешает все прерывания.

    void mc_init_port(void);

    Инициализация порта ввода-вывода путем задания  через регистры DDRx, какие выводы функционируют как вход, а какие как выход, а также с указанием, на каких входах необходимо включить подтягивающие резисторы (через регистр PORTx).

    void mc_init_pwm(void);

    Данная функция  запускает ФАПЧ и устанавливает  все регистры PSC в исходное состояние.

    void mc_init_IT(void);

    Модифицируйте данную функцию для разрешения или  запрета типов прерываний.

    void PSC0_Init ( unsigned int dt0,

    unsigned int ot0,

    unsigned int dt1,

    unsigned int ot1);

    void PSC1_Init ( unsigned int dt0,

    unsigned int ot0,

    unsigned int dt1,

    unsigned int ot1);

    void PSC2_Init (unsigned int dt0,

    unsigned int ot0,

    unsigned int dt1,

    unsigned int ot1);

    PSCx_Init позволяет  пользователю выбрать конфигурацию  контроллера силового каскада  (PSC) микроконтроллера.

  • Функции коммутации фаз

    U8 mc_get_hall(void);

    Считывание  состояния датчиков Холла, соответствующее  шести ступеням коммутации (HS_001, HS_010, HS_011, HS_100, HS_101, HS_110).

    _interrupt void mc_hall_a(void);

    _interrupt void mc_hall_b(void);

    _interrupt void mc_hall_c(void);

    Данные функции  выполняются, если выявлено внешнее  прерывание (изменение выхода датчиков Холла). Они позволяют выполнить  коммутацию фаз и вычислить скорость.

    void mc_duty_cycle(U8 level);

    Данная функция  устанавливает рабочий цикл ШИМ  в соответствии с конфигурацией PSC.

    void mc_switch_commutation(U8 position);

    Коммутация  фаз выполняется в соответствии со значением на выходах датчиков Холла и только в случае, если пользователь запустит двигатель.

  • Конфигурация времени преобразования

    void mc_config_sampling_period(void);

    Инициализация таймера 1 для генерации прерывания каждые 250 мкс.

    _interrupt void launch_sampling_period(void);

    После активизации 250 мкс-ого прерывания устанавливает  флаг. Он может использоваться для  управления временем преобразования.

  • Оценка скорости

    void mc_config_time_estimation_speed(void);

    Конфигурация  таймера 0 для выполнения функции  вычисления скорости.

    void mc_estimation_speed(void);

    Данная функция  вычисляет частоту вращения двигателя  на основе принципа измерения периода следования импульсов датчика Холла.

    _interrupt void ovfl_timer(void);

    При возникновении  прерывания выполняется приращение 8-разрядной переменной для реализации 16-разрядного таймера с помощью 8-разрядного таймера.

  • Измерение тока

    _interrupt void ADC_EOC(void);

    Функция ADC_EOC выполняется сразу после завершения преобразования усилителя для установки  флага, который может использоваться пользователем.

    void mc_init_current_measure(void);

    Данная функция  инициализирует усилитель 1 для измерения  тока.

    U8 mc_get_current(void);

    Считывание  значения тока, если преобразование завершено.

    Bool mc_conversion_is_finished(void);

    Индицирует  завершение преобразования.

    void mc_ack_EOC(void);

    Сброс флага  завершения преобразования.

  • Детекция токовой перегрузки

    void mc_set_Over_Current(U8 Level);

    Устанавливает порог определения токовой перегрузки. В качестве порога выступает выход  ЦАП, связанный с внешним компаратором.

Контур стабилизации

Контур стабилизации выбирается с помощью двух функций: разомкнутый (mc_set_Open_Loop()) или замкнутый контур (mc_set_Close_Loop()). На рисунке 13 показан программно-реализованный контур стабилизации.

 
Рисунок 13. Контур стабилизации

Замкнутый контур представляет собой контур стабилизации скорости на основе ПИД-регулятора.

Информация о работе Бесколлекторные электродвигатели