Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Управление трехфазным бесколлекторным электродвигателем
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
pavel-pervomaysk
Всем привет !

Вот уже пару дней упорно бьюсь в управлении двигателем и никак не могу запустить его sad.gif.
Сосояние выводов на момент переключения брал из аппнота AVR443.
Вот код переключения.


CODE
main: //
cbi motor,wh_e //
cbi motor,wl_e // 1
rcall off //
sbi motor,ul_e //
sbi motor,vh_e //
rcall wait_m //

cbi motor,vl_e //
cbi motor,vh_e // 2
rcall off
sbi motor,wh_e //
rcall wait_m //

cbi motor,uh_e //
cbi motor,ul_e // 3
rcall off
sbi motor,vl_e //
rcall wait_m //

cbi motor,wl_e //
cbi motor,wh_e // 4
rcall off
sbi motor,uh_e //
rcall wait_m //

cbi motor,vh_e
cbi motor,vl_e // 5
rcall off
sbi motor,wl_e //
rcall wait_m //

cbi motor,ul_e //
cbi motor,uh_e // 6
rcall off
sbi motor,vh_e //
rcall wait_m //
rjmp main //


off: // закрытие полевиков
ldi zl,0x10
dfg:
dec zl
brne dfg
ret


wait_m: //
ldi xl, low(0x1FFF) //
ldi xh,high(0x1FFF) //
wt_2: //
sbiw xl,1 //
brne wt_2 //
nop //
ret //






Получаю только дерганье двигателем , если поигратся с задержками то иногда можно крутнувши рукой получить рывками вращение.
Никак не могу вьехать толи я что-то неверно делаю , толи еще чего -то....

И еще вопрос : Можно ли управлять этим мотором в наглую без опроса датчиков холла ? Их в данном моторе стоит 3шт . Всего мотор имеет 7 магнитов 12 обмоток.

Схема переключения прикреплена ниже.
AntonSor
Как-то у вас неправильно таблица задана... Конечно, лучше бы было, если бы обмотки двигателя были бы соединены "звездой" с общей точкой, тогда бы можно было подвесить общую точку на "плюс" и обойтись всего тремя "нижними" ключами, и включать их поочередно. Здесь же нужно сделать три сигнала, сдвинутые на 120 градусов. Предлагаю такую таблицу (в файле).
Дальше. Так, как вы делаете - установкой и сбросом отдельных битов - есть вероятность, что забудете сбросить поднятый бит и спалить выходные транзисторы. Лучше сформировать 6 констант, по количеству шагов, и отсылать их.
CODE
const step1:=001001b;
step2:=100100b;
...

while true do begin
motor:=step1;
delay_us(antispeed);
motor:=step2;
delay_us(antispeed);
...
end;
.
pavel-pervomaysk
Спасибо , завтра попробую по таблице сделать. И еще интерестно кто какую логику ставит после датчиков холла чтобы уже получать готовые логическиеуровни для мк. ?

И насколько я понял судя по таблице :
UH - 1
UL - 2
VH - 3
VL - 4
WH - 5
WL - 6
Правильно я понял ?

Сегодня все таки запустил его , пошагово он шагает с маленькими оборотами нормально. 1 цикл переключения = 90 градусов , то есть для получения 1 оборота двигателя нужно сделать 4 цыкла.
AntonSor
По столбцам - номер шага, строки - название сигнала, так, как на схеме. Т.е. на шаге номер один включены выходы VH и WL, выключены все остальные. На шаге номер два включены UH и WL и т.д.
depank
Цитата(Павлик @ Aug 22 2009, 15:39) *
из аппнота AVR443.


А вы возьмите исходники из апноута AVR447 для IAR - все работает чудненько.
pavel-pervomaysk
Цитата(depank @ Aug 22 2009, 19:21) *
А вы возьмите исходники из апноута AVR447 для IAR - все работает чудненько.


Собрал AVR447 , увы IAR ом не пользуюсь sad.gif . Тут постают 2 вопроса :
кто поможет откомпилировать проэкт под ATmega88 ?
Выводы датчиков холла кто как подключает
а)
H1 - U
H2 - V
H3 - W

б)
H1 - W
H2 - V
H3 - U
RA3WUM
Цитата(Павлик @ Aug 22 2009, 19:48) *
И еще интерестно кто какую логику ставит после датчиков холла чтобы уже получать готовые логическиеуровни для мк. ?

А зачем она там, проще датчик подобрать с логическим выходом smile.gif
pavel-pervomaysk
С датчиками разобрался , логические уровни идут. Только осталось дело за прошивкой. Может кто-то компилировал и есть дамп ?
celladon
Пару лет назад тоже делал плату управления для бесколлекторного двигателя. Сначала тоже были подобные проблемы. Но потом нашел статью на каком-то форуме по ремонту бытовой технике. Там расказывалось как запустить двигатель стиральной машины. Идею взял от туда, только вместо логики поставил контроллер. А идея такая. Сначало пишется тестовая программа. Создается 6 фазная таблица переключения обмоток двигателя (как я думаю не сложно догодаться). Затем двигатель тупо устанавливается в каждое из 6 положений и снимается значения датчиков хола для каждого положения. Создается таблица соответствия включенных обмоток каждой комбинации датчиков хола. На основе этой таблицы пишется уже рабочая программа. В ней в зависимости от значения датчиков из таблицы берется соответствующая комбинация включения обмоток. Этого достаточно для изготовления просто тупой вращалки. А потом можно добавить сервис. Еще в начале нужно крутануть двигатель в нужную сторону програмно без учета датчиков хола. Если датчики аналоговые, то ставлю компоратор на LM339. По такому принципу разгонял двигатель от HDD более 30т. об. Первую программу вообще писал, тока не смейтесь, на бейсике - Баскоме. Потом уже на асемблер переводил. Так быстрей получается. Аналагично запускается двигатель без датчиков хола. Только добовляется схема на компораторах для определения положения ротора. А принцип управления после разгона тот же. И еще. Вращать бесколлекторный двигатель не зная положения ротора не получится. Это не шаговый двигатель.
pavel-pervomaysk
В принципи все понятно , эксперементами я тоже много чего нового узнал для себя с этим двигателем.
Схему доработал , таблицу датчиков записал себе.

Лучше поработать и разобратся самому , чем слизать готовое и непонятное rolleyes.gif . Взял двигатель поменьше мощности , ибо мой 850W 13V , даже под тестами провода от компьютерного АТХ стают мягкие и очень горячие. biggrin.gif .

О результатах отпишусь.
Diusha
Вопрос номер раз. За один оборот сколько раз датчик Холла (любой из них) меняет состояние?
В AVR443 рассмотрен случай, когда у мотора 3 обмотки и 1 магнит (2 полюса); датчик Холла меняет состояние за оборот 2 раза (0->1, 1->0) = 1 период. В этом случае на 1 оборот приходится 1 период управляющих сигналов, и они привязаны к сигналам ДХ. В Вашем случае на 1 оборот д.б. 7*4=28 периодов управляющих сигналов, а вот каждый ДХ, могет оказаться, за оборот дает 7 периодов (14 смен).

Цитата(celladon @ Aug 27 2009, 08:26) *
двигатель тупо устанавливается в каждое из 6 положений и снимается значения датчиков хола для каждого положения. Создается таблица соответствия ... На основе этой таблицы пишется уже рабочая программа. В ней в зависимости от значения датчиков из таблицы берется соответствующая комбинация включения обмоток. Этого достаточно для изготовления просто тупой вращалки.

Для тупой вращалки достаточно, а вот для нетупой, ИМХО, нет.
Комбинация включения обмоток должна соответствовать не тому положению ротора, которое он стремится занять при данной комбинации (т.е. где вращающий момент обращается в 0), а тому, где вращающий момент максимален. Для простейшего случая (3-обмоточный 2-полюсник) это значит с опережением на 90 градусов (по положению ротора) от той таблицы.
celladon
У меня такой двигатель. У него на датчики хола свой магнит с одной парой полюсов. Датчики хола смещены относительно друг друга на 60градусов. Бывает еще на 120. А на роторе две пары полюсов (приклеено 4 магнита). В статоре 9 обмоток, а фаз три (обмотки соеденены по три). Получается 6 комбинаций датчиков хола.


http://www.iit.edu/~ipro342f06/bldcmotor.php
Интересные картинки про BLDC.
pavel-pervomaysk
У меня состояние датчиков холла полностью совпадает с таблицей AVR447 ( Forvard ) , при проходе одного цикла переключения 1 ... 6 двигатель перемещается на 90 градусов , соответственно для получений 1 оборота нужно сделать 4 полных цикла.
max_cnc
Замечание по схеме (хотя возможно Вы его уже устранили). Как заметил AntonSor, Управлять трехфазным мостом шестью сигналами от проца - занятие опасное. При малейшем сбое сквозной ток и привет выходным транзисторам. Я бы организовал инверсию аппаратно, например перед 74HC08 (верхний ключ - прямой сигнал от проца, нижний - через инвертор от того же вывода). При этом от проца нужны всего три сигнала и таблица комутации проще.
Или если двигатель требует при комутации третье (отключенное) состояние для одной из обмоток, то хотя-бы предусмотреть блокировку на логике от совместного включения противофазных ключей.
Сам такого нахлебался, пока соорудил драйвер для ДШИ-200, правда не от контроллера а от LPT.
Побочное явление при этом - жменя жареных IRF640 и IRF9540.
celladon
Немного про BLDC на PIC.

http://www.micropic.es/index.php?option=co...1&Itemid=57
pokos
Цитата(celladon @ Aug 27 2009, 09:26) *
...Вращать бесколлекторный двигатель не зная положения ротора не получится. Это не шаговый двигатель.

Остаётся только удивляться, как же умудряются вращаться шпиндели винтов. И вообще силовые трёхфазные (бесколлекторные, заметим) двигатели безо всяких датчиков. Да ещё внужную сторону вращаются. Хм...
Goodefine
Цитата(pokos @ Sep 14 2009, 15:43) *
Остаётся только удивляться, как же умудряются вращаться шпиндели винтов.... двигатели безо всяких датчиков....

Правда без датчиков? А обмотки на что?...
max_cnc
Можно сделать такой фокус: убираем из бесколлекторника датчики и получем машину принципиально ничем не отличающуюся от шаговика, или еще точнее - синхронную машину. В бесколлекторнике датчики нужны для управления фазами драйвера и обеспечения режима самосинхнронизации, при этом со стороны проводов питания бесколлектроник ведет себя практически как ДПТ (т.е. регулировка скорости производится регулировкой напряжения, оптимальный разгон и т.д.). Если на обмотки дать принудительную последовательность, не связанную с положением якоря, то получим шаговый режим, с его плюсами и минусами. Т.е. все будет крутиться, но стартовать нужно с определенной низкой частоты коммутации (частоты приемистости), при быстром разгоне или перегрузке на валу - потеря синхронизма с остановкой и т.д.
valera_o
В avr444 расписано, как управлять безколлекторником без датчиков. Пару лет назад занимался этим, потом появились дешевые китайские контроллеры - бросил это дело, по деньгам не окупается, разве только из "любви к искусству" wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.