|
|
  |
Детекция ЭДС в регуляторе бесколлекторного двигателя. |
|
|
|
Jun 8 2018, 18:29
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Коллеги, есть трупик модельного регулятора скорости бесколлекторного двигателя. Китайский. Плата 4-х слойная, прозвонила ее с трудом. На плате ATmega8. Во первых Атмега горелая, буду ее менять. Во вторых, хочу залить свою прошивку по ряду причин - отрегулировать напряжение отключения при разряде, добавить изменение направления вращения по команде на пин и др. В общем, частичный реверсинг. В принципе схема очень похожа на вот это http://radioparty.ru/prog-avr/program-c/61...bldc-sensorlessС одним лишь отличием - посмотрите как реализована схема детекции обратной ЭДС там, и посмотрите в выложенный мной PDF - это в моем контроллере, для которого хочу писать прошивку. В статье, которую я привела выше, замечательно расписано, как с помощью компаратора детектируется обратная ЭДС. Но совершенно непонятно, какую функцию выполняют входы ADC0 ADC1 ADC2. Ни в статье это не описано, ни в приведенном коде на С обращения к этим пинам нет. Посмотрите на мою схему, в прилагающемся PDF. Там немного по другому. Но тоже идут 3 линии к ADC0 ADC6 ADC7. Для чего же они нужны, какую роль они играют в управлении двигателем? Ну и, учитывая то, что в моей схеме цепи детекции несколько иные, будет ли отличаться алгоритм обработки поступющих с них сигналов на компаратор и на ADC ?
Сообщение отредактировал murmur - Jun 8 2018, 18:31
Прикрепленные файлы
Sheet1.pdf ( 24.87 килобайт )
Кол-во скачиваний: 45
|
|
|
|
|
Jun 8 2018, 19:12
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(murmur @ Jun 8 2018, 21:29)  Ну и, учитывая то, что в моей схеме цепи детекции несколько иные, будет ли отличаться алгоритм обработки поступющих с них сигналов на компаратор и на ADC ? В статье применялся очень маломощный двигатель. В таких случаях алгоритм на компараторах еще кое-как работает, особенно если отключен ШИМ. Но в случае более мощного мотора вариант с компараторами не пройдет. Поскольку обратная ЭДС будет зашумлена паразитными всплесками на фронтах ШИМ-а, как на рисунке ниже.
Тогда применяют АЦП в строго синхронном с ШИМ-ом режиме и деалают медианную фильтрацию как у Microchip - http://www.microchip.com/wwwAppNotes/AppNo...ppnote=en533912Другие применяют интегрирование и проч. методы
|
|
|
|
|
Jun 9 2018, 02:57
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата В статье применялся очень маломощный двигатель. В таких случаях алгоритм на компараторах еще кое-как работает, особенно если отключен ШИМ. Но в случае более мощного мотора вариант с компараторами не пройдет. Статья статьей, но я привела свою схему, на которой именно компаратор, а мотор к ней можно подключать до 20 ампер. И схема работает. Конденсаторы фильтров на плате есть, я их просто на схеме не привела. За статью спасибо, очень интересно. V_N, вам тоже спасибо. СЛона то я и не заметила))) Следующий вопрос - ШИМ. В статье, которую я привела, все просто и логично - управление верхними ключами осуществляется через ШИМ выходы контроллера. При проектировании же моей платы китайцы наверное следовали Конфуцию или еще кому-то... Но у меня OC1A, OC1B и OC2 вообще не заняты. Управление верхними ключами повешено на PC3 PC5 PD4. Есть статейка от АТМЕL, где есть интересное решение - один ШИМ выход и логические элементы. Но у меня такое решение не применено. Неужели у меня был программный ШИМ? Как на практике еще организовывают ШИМ управление? Может есть какой-то способ шимировать все ключи или ток регулировать? У меня на плате есть еще несколько элементов, предназначение которых я понять не могу пока, в виду того, что плата 4-х слойная. Кстати - на плате почему то целых 3 преобразователя напряжения 7805, которые соединены параллельно, только выход их развязаны маломощными резисторами 22 ом. И это при том, что из 5-ти вольтовых потребителей только Атмега... Никого ни на какие мысли не наводит?
|
|
|
|
|
Jun 9 2018, 06:33
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(murmur @ Jun 9 2018, 05:57)  И схема работает. Конденсаторы фильтров на плате есть, я их просто на схеме не привела. BLDC многое стерпят. Они даже в асинхронном режиме крутятся. Вопрос как эффективно вы хотите управлять. Конденсаторы фильтров дадут вам неизвестную фазовую задержку, которая на высоких оборотах приведет к плохому регулированию, низкому КПД и неприятному шуму.
|
|
|
|
|
Jun 9 2018, 07:59
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(murmur @ Jun 9 2018, 10:01)  Хм... странно все таки. Почему разработчик моего контроллера не использовал аппаратные возможности шим.... Скажите я ведь могу, используюя для управления верхними ключами навязанные мне пины, завести таймер и с его помощью тупо менять состояния пинов обычным "ногодрыгом" и возвращать их обратно? Это будет адекватная замена аппаратным возможностям? Конечно можете. Более того, мотор будет крутится даже если вовсе не будете следить за обратной ЭДС. Все упирается в назначение мотора и характеристики регулирования. Если не планируется какое-то точное регулирование, то всеми ключами можно управлять программно без аппаратного ШИМ-а.
|
|
|
|
|
Jun 9 2018, 08:08
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(AlexandrY @ Jun 9 2018, 10:59)  Конечно можете. Более того, мотор будет крутится даже если вовсе не будете следить за обратной ЭДС. Все упирается в назначение мотора и характеристики регулирования. Если не планируется какое-то точное регулирование, то всеми ключами можно управлять программно без аппаратного ШИМ-а. Мотор изначально предназначен для авиамодели. Но мной он будет установлен в детский автомобильчик (через редуктор), взамен старого и дохлого.
|
|
|
|
|
Jun 9 2018, 10:11
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(murmur @ Jun 9 2018, 10:01)  Скажите я ведь могу, используюя для управления верхними ключами навязанные мне пины, завести таймер и с его помощью тупо менять состояния пинов обычным "ногодрыгом" и возвращать их обратно? Это будет адекватная замена аппаратным возможностям? На Атмеге это будет довольно сложно делать. Слабовата имхо. Я конечно делал подобное на STM8 на 16МГц (ШИМ=10кГц), но аппаратным ШИМом. И то пришлось бОльшую часть кода на асме писать. И это без всяких векторных управлений, без обратных связей, чисто синусное управление. А на синусном управлении моторчиком под нагрузкой (да ещё переменной нагрузкой) имхо не по-управлять.  Но можно сделать без ШИМа и без векторного управления, коммутируя ключи в соответствии с датчиком положения ротора. Это называется BLDC. Но всё равно схема будет очень чувствительна к задержкам выполнения кода (на разных скоростях ротора влияние задержек будет меняться). Задержка будет вызвана: скоростью вычисления положения ротора по показаниям датчиков положения ротора (зависит от типа датчиков) и скоростью выставления управляющих воздействий на ключи по вычисленному положению. А как, кстати, положение ротора на вашей плате определяется? д.Холла или бездатчиковое?
|
|
|
|
|
Jun 9 2018, 10:23
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
Цитата(jcxz @ Jun 9 2018, 13:11)  А как кстати положение ротора на вашей плате определяется? д.Холла или бездатчиковое? У авиаторов - исключительно BackEMF
|
|
|
|
|
Jun 9 2018, 10:41
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
Цитата(jcxz @ Jun 9 2018, 13:33)  Читать много лень.  Для авиа-назначения, можно считать, что нагрузка примерно постоянна (вентиляторная нагрузка)? И можно обойтись без обратной связи? Авиа, в свою очередь, делятся на самолетные и вертолетные. Основное отличие - для вертолетов через BackEMF (обратная ЭДС по-русски  ) делается стабилизация частоты вращения ротора под любой нагрузкой (governor mode) Цитата(jcxz @ Jun 9 2018, 13:33)  Если так, то можно и синусным ШИМом по-управлять, заранее зная параметры инерции вала с пропеллером. Чаще всего так и делается Цитата(jcxz @ Jun 9 2018, 13:33)  Но ТС ведь хочет этот моторчик для авто применить. А там уже так не поработать. Обратная связь по положению ротора нужна. И самое простое тут - датчики Холла  Все зависит от kV мотора и передаточного отношения редуктора. Но не припоминаю на модельных автомоторах датчика Холла...
|
|
|
|
|
Jun 9 2018, 11:29
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Смущает в коде, что по ссылке в первом сообщении, отсутствие deadtime. Или я слепая и не вижу? Цитата(jcxz @ Jun 9 2018, 13:50)  Зато гироскутеры наверное все на них бегают  Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла.
|
|
|
|
|
Jun 9 2018, 14:26
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(jcxz @ Jun 9 2018, 17:14)  д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп. Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат
|
|
|
|
|
Jun 9 2018, 14:39
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Цитата(jcxz @ Jun 9 2018, 13:33)  Читать много лень. Для авиа-назначения, можно считать, что нагрузка примерно постоянна (вентиляторная нагрузка)? И можно обойтись без обратной связи? Если так, то можно и синусным ШИМом по-управлять, заранее зная параметры инерции вала с пропеллером. Но ТС ведь хочет этот моторчик для авто применить. А там уже так не поработать. Обратная связь по положению ротора нужна. И самое простое тут - датчики Холла  На 3d rc вертолетах во всю используют гувернер оборотов (система поддержания постоянных оборотов) либо в регуляторе либо в flybarless system (ФБЛке), если гувернер используют в ФБЛке то, сейчас, обычно берут (цифру) с регулятора, либо используют датчик оборотов в простом случае это припаянные провода на два провода из трех от регулятора к двигателю. В rc автомобилях, я не знаю, может тоже есть регуляторы оборотов но по моему они там сильно не нужны ведь в руках джойстик и там есть газ, им и можно держать обороты т.е. скорость. Цитата(murmur @ Jun 9 2018, 17:26)  Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат Сделайте простой опыт поставьте на гироскутер мешок картошки и посмотрите как гироскутер будет держать равновесие.
|
|
|
|
|
Jun 10 2018, 13:34
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Что-то не получается у меня с ЭДС. Господа, взгляните на схему цепочки детектирования в статье в первом сообщении, на ту же схему, но выложенную мной в PDF и скажите, будет ли отличаться алгоритм работы с компаратором? У меня ЭДС детектируется, прерывание срабатывает где надо (хотя впрочем, посмотрите на осциллограмму и оцените). Но двигатель пищит и не стартует. ОСЦИЛЛОГРАММА - красный график - вход компаратора, синий - строка PORTD.3=~PORTD.3 в самом начале обработчика прерывания от компаратора, чтобы понять, в какой момент времени он срабатывает. Код (мне его пришлось переделать) привожу Код #include <mega8.h> #include <delay.h>
// Фаза U(Верхнее плечо) #define UH_ON PORTD.4=1; #define UH_OFF PORTD.4=0; // Фаза U(Нижнее плечо) #define UL_ON PORTD.5=1; #define UL_OFF PORTD.5=0; // Фаза V(Верхнее плечо) #define VH_ON PORTC.5=1; #define VH_OFF PORTC.5=0; // Фаза V(Нижнее плечо) #define VL_ON PORTC.4=1; #define VL_OFF PORTC.4=0; // Фаза W(Верхнее плечо) #define WH_ON PORTC.3=1; #define WH_OFF PORTC.3=0; // Фаза W(Нижнее плечо) #define WL_ON PORTB.0=1; #define WL_OFF PORTB.0=0; #define PHASE_ALL_OFF UH_OFF;UL_OFF;VH_OFF;VL_OFF;WH_OFF;WL_OFF; #define SENSE_U ADMUX = 6; // Вход обратной ЭДС фазы U #define SENSE_V ADMUX = 7; // Вход обратной ЭДС фазы V #define SENSE_W ADMUX = 0; // Вход обратной ЭДС фазы W #define SENSE_UVW (ACSR&(1 << ACO)) // Выход компаратора #define START_PWM 10 // Минимальный ШИМ при запуске #define WORK_PWM 100 // Рабочий уровень ШИМ unsigned char start_stop = 0; unsigned char current_phase = 0; volatile unsigned char motor_pwm = WORK_PWM; volatile unsigned char commutation_step = 0; volatile unsigned char rotor_run = 0; // Счетчик импульсов обратной ЭДС // Крутим по часовой стрелке void commutation(unsigned char startup) { switch (commutation_step) { case (0): if(!SENSE_UVW || startup) { UH_ON; // На фазе U - ШИМ WH_OFF; // Фаза W отключена SENSE_W; // Активируем вход фазы W commutation_step = 1; // Следующий шаг TCNT0 = 0; // Обнуляем счетчик T0 } break; case (1): if(SENSE_UVW || startup) { VL_OFF; // На фазе V - лог. 0 WL_ON; // На Фазе W - лог. 1 SENSE_V; // Активируем вход фазы V commutation_step = 2; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (2): if(!SENSE_UVW || startup) { UH_OFF; // Фаза U отключена VH_ON; // На фазе V - ШИМ SENSE_U; // Активируем вход фазы U commutation_step = 3; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (3): if(SENSE_UVW || startup) { UL_ON; // На фазе U - лог. 1 WL_OFF; // На Фаза W - лог. 0 SENSE_W; // Активируем вход фазы W commutation_step = 4; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (4): if(!SENSE_UVW || startup) { VH_OFF; // Фаза V отключена WH_ON; // На фазе W - ШИМ SENSE_V; // Активируем вход фазы V commutation_step = 5; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (5): if(SENSE_UVW || startup) { UL_OFF; // На фазе U - лог. 0 VL_ON; // На Фазе V - лог. 1 SENSE_U; // Активируем вход фазы U commutation_step = 0; TCNT0 = 0; // Обнуляем счетчик T0 } break; } } // Обработчик прерывания по компаратору. Детектор обратной ЭДС
// Analog Comparator interrupt service routine interrupt [ANA_COMP] void ana_comp_isr(void) { PORTD.3=~PORTD.3; rotor_run++; // инкрементируем импульсы if(rotor_run > 200) rotor_run = 200; if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную {
commutation(0);
} }
// Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС rotor_run = 0; // Сбрасываем счетчик импульсов
}
// Timer2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { /* // // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ if (commutation_step==0) UH_ON; if (commutation_step==2) VH_ON; if (commutation_step==4) WH_ON; */ }
// Timer2 output compare interrupt service routine interrupt [TIM2_COMP] void timer2_comp_isr(void) { // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ /* if (commutation_step==0) UH_OFF; if (commutation_step==2) VH_OFF; if (commutation_step==4) WH_OFF; */ }
void main(void) {
// Порты ввода/вывода
DDRD.4=1; // UH DDRD.5=1; // UL DDRC.5=1; // VH DDRC.4=1; // VL DDRC.3=1; // WH DDRB.0=1; // WL
DDRD.3=1; PORTD.3=0;
/* while(1) {
PORTD.4=1; // UH PORTD.5=0; // UL PORTC.5=1; // VH PORTC.4=0; // VL PORTC.3=1; // WH PORTB.0=0; // WL delay_ms(10);
PORTD.4=0; // UH PORTD.5=0; // UL PORTC.5=0; // VH PORTC.4=0; // VL PORTC.3=0; // WH PORTB.0=0; // WL delay_ms(10); } */ // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 15,625 kHz // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x02; OCR2=20; // T0 - для старта и работы двигателя без сигналов обратной ЭДС TCCR0=0x05;
TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0
PHASE_ALL_OFF; // Выключаем все фазы // Аналаговый компаратор ADCSRA &= ~(1 << ADEN); // Выключаем АЦП SFIOR |= (1 << ACME); // Отрицательный вход компаратора подключаем к выходу мультиплексора АЦП ACSR |= (1 << ACIE); // Разрешаем прерывания от компаратора #asm("sei") // Глобально разрешаем прерывания start_stop=1;
if(start_stop) {
ACSR |= (1 << ACIE); // Разрешаем прерывание от компаратора TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0 if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ { // OCR2=0x0F; }
} else {
PHASE_ALL_OFF; // Все фазы выключены ACSR &= ~(1 << ACIE); // Запрещаем прерывание от компаратора TIMSK &= ~(1 << TOIE0); // Запрещаем прерывание по переполнению T0
}
}
Сообщение отредактировал murmur - Jun 10 2018, 13:57
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 10 2018, 16:45
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата Попробуйте сначала коммутировать ключи с фиксированной частотой. 1 Гц например Этот этап пройден. Работает, пыхтит, греется, но крутит.
|
|
|
|
|
Jun 10 2018, 18:07
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Поигралась с настройками - увеличила таймаут, по которому обычный режим переключается в режим с контролем ЭДС. Программа не дожидалась и сбрасывала сччетчик в ноль. И доходило до этого, в том числе, из-за отсутсвия ШИМ и инерции мотора. Сейчас заработало. Дергается, но через некоторое время раскручивается. Попробую реализовать программный ШИМ. Мда... с ШИМом он почему-то вообще не стартует, только дергается. Будем искать... Цитата значит теперь смещайте угол пока не закрутится. Это что-то вроде угла опережения зажигания? Где-то здесь задержку ставить надо? Код switch (commutation_step) { case (0): if(!SENSE_UVW || startup) { UH_ON; // На фазе U - ШИМ WH_OFF; // Фаза W отключена SENSE_W; // Активируем вход фазы W commutation_step = 1; // Следующий шаг TCNT0 = 0; // Обнуляем счетчик T0 } break; case (1): if(SENSE_UVW || startup) { VL_OFF; // На фазе V - лог. 0 WL_ON; // На Фазе W - лог. 1 SENSE_V; // Активируем вход фазы V commutation_step = 2; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (2): if(!SENSE_UVW || startup) { UH_OFF; // Фаза U отключена VH_ON; // На фазе V - ШИМ SENSE_U; // Активируем вход фазы U commutation_step = 3; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (3): if(SENSE_UVW || startup) { UL_ON; // На фазе U - лог. 1 WL_OFF; // На Фаза W - лог. 0 SENSE_W; // Активируем вход фазы W commutation_step = 4; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (4): if(!SENSE_UVW || startup) { VH_OFF; // Фаза V отключена WH_ON; // На фазе W - ШИМ SENSE_V; // Активируем вход фазы V commutation_step = 5; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (5): if(SENSE_UVW || startup) { UL_OFF; // На фазе U - лог. 0 VL_ON; // На Фазе V - лог. 1 SENSE_U; // Активируем вход фазы U commutation_step = 0; TCNT0 = 0; // Обнуляем счетчик T0 } break; }
Сообщение отредактировал murmur - Jun 10 2018, 18:09
|
|
|
|
|
Jun 10 2018, 19:30
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Все пока хорошо, но вот почему то запускается двигатель с дерганьем. Непредсказуемым по времени. Поможешь рукой - крутится. Посмотрела на управляющие импульсы на фазах - они какие-то неодинаковые по ширине. Что-то мне подсказывает, что сигнал обратной ЭДС кривой. Посмотрите на эту ЭКГ - что с ней не так?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 11 2018, 01:24
|
Знающий
   
Группа: Участник
Сообщений: 926
Регистрация: 9-08-15
Пользователь №: 87 913

|
Цитата(murmur @ Jun 11 2018, 01:30)  .... но вот почему то запускается двигатель с дерганьем. Непредсказуемым по времени. ...именно в этом главный недостаток работы по сигналу ЭДС (в отличие от Холлов)... Ведь вот что происходит - при старте, вращение отсутствует, и сигнала ЭДС нет ВООБЩЕ..., а для уверенного старта, контроллер должен точно знать в каком положении ротор в ДАННЫЙ момент, чтобы подключить нужные фазы... А информации о положении ротора у контроллера нет... Вот контроллер и подключает СЛУЧАЙНЫМ образом фазы (или перебирает по очереди все шесть возможных комбинаций..., не знаю, как там реально программно организовано...), чтобы хоть как то заставить ротор вращаться и выдать сигнал ЭДС (очень слабый при старте, надо отметить...) и только потом станет ясно, в каком положении ротор, и в нужную ли сторону вращается...
Сообщение отредактировал варп - Jun 11 2018, 03:15
|
|
|
|
|
Jun 11 2018, 05:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(murmur @ Jun 10 2018, 21:07)  Это что-то вроде угла опережения зажигания? Управление вашим двигателем сводится к одной простой вещи: "держать магнитное поле статора к магнитному полю ротора под 90 градусов!" И всё будет ок. Под +90 или под -90 - в зависимости от требуемого направления вращения. А значит: нужно знать угловое положение м.поля статора и м.поля ротора. Для формирования поля статора у Вас есть ключи (грубое задание углового положения поля, с большой дискретностью - просто коммутацией; и более точное - с помощью ШИМ). А для того, чтобы определить положение ротора (и его магнитного поля), используют датчики угла разных типов (д.Холла, ресольверы, синус-косинусные датчики, энкодеры и т.п.). Также в самых дешёвых случаях используют бездатчиковое определение: по ЭДС на неиспользуемых обмотках. Естественно это и самый плохой случай. О недостатках полно инфы в инете. Например хотя-бы то, что не завращав ротор (а без вращения не получить эту самую ЭДС) не получить и показаний угла. Да и на малых скоростях ЭДС мала и определять угол по ней сложно. Наилучшие варианты: ресольвер или синус-косинусный датчик. Но дорого и громоздко. Вот измерили Вы угловое положение поля ротора и можете задать угловое положение поля статора, но остаётся вопрос: каков угол между началом координат (точкой 0 градусов) статора и началом координат ротора? А они естественно обычно не совпадают. А чтобы выставить поле под 90 градусов эту угловую разницу нужно знать. Обычно её измеряют. Или задают конструктивно. Ну или в крайнем случае грубо можно определить методом тыка. Вот про этот угол (угловую разницу) я и говорю. Обычно, когда я неверно выставлю этот угол, то у меня как раз такая картина и наблюдается: моторчик гудит, свистит, но не едет. Это если заданная угловая разница далека от истинной. Если ошибка не очень большая, то едет, но с гораздо бОльшим током по обмоткам (греется). Примерно так. Цитата(варп @ Jun 11 2018, 04:24)  в отличие от Холлов Не вводите в заблуждение! д.Холла - это всего лишь частный случай датчиков положения ротора. Не самый лучший кстати. Их много разных бывает.
|
|
|
|
|
Jun 11 2018, 05:57
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(jcxz @ Jun 11 2018, 08:37)  Примерно так. Вообще-то есть способы определения угла поворота ротора с помощью измерения напряжений даже в статическом состоянии. Они описаны в апнотах у TI, Microchip, ST и прочих Обратная ЭДС достаточная для синхронизации в модельных моторчиках возникает уже со второго импульса. Надо только применять не компаратор, а АЦП этак на сотню килогерц.
|
|
|
|
|
Jun 13 2018, 15:04
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(khach @ Jun 12 2018, 11:59)  Измерять индуктивность обмоток в зависимости от углового положений ротора конечно можно, но только если нет никаких других возможностей определить начальное положение ротора. Да и калибровать надо под каждый двигатель. А в многополюсном двигателе угловая зависимость индуктивности вообще слабая очень. Гораздо проше использовать датчики холла в аналоговом режиме. Кстати, нет ли где примеров такого кода, чтобы на удержании и низких оборотах использовались холлы аналогово, а на больших оборотах- через таймера. Интересует вопрос плавного перехода из первого режима во второй и отратно. Бьюсь над похожей задачей.  В моторе стоят цифровые холлы, на плате управления цифровой магнитометр, который ловит поле от дверной петли. Задача максимально плавно, бесшумно и с максимальным моментом закрывать и открывать дверь. Пока ничего лучше чем слияние Калмана не придумал, но еще не реализовал. Кстати в этом моторе 8-мь полюсов, но определение позиции ротора по индуктивности вполне четкое. Калибровка не требуется ибо определение идет по разнице.
|
|
|
|
|
Jun 13 2018, 18:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 172
Регистрация: 14-11-11
Из: Москва
Пользователь №: 68 299

|
Не касаясь особенностей ШИМ (я в этом не профи), 1) AlexandrY про дверь (извините, если не для этой темы) - лучше переделать систему рычагов так, чтобы в начале и в конце открывания двери тоже было максимальное передаточное число, т.е. медленный поворот двери при одинаковой скорости двигателя. А в середине открывания чтоб было побыстрее. 2) про вентиляторный момент: это когда нагрузка пропорциональна квадрату скорости. В частности, при 0 скорости и нагрузка почти 0. Поэтому авиа-мотор стартует как-нибудь без нагрузки, а потом уже и ЭДС появляется. В автомобиле при 0 скорости момент максимальный, а при разгоне уменьшается. А также возможна длительная работа с низкими оборотами и большим моментом. Т.е. кое-как старт и низкие обороты нельзя реализовывать, а скорее всего, и двигатели нужны разные. И, например, может понадобиться отдельный вентилятор для охлаждения мотора на низких оборотах, когда собственная крыльчатка не вентилирует.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|