МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Система управления синхронным многофазным электрод

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4947

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Уважаемые форумчане!
Требуется помощь в реализации на EPM240 устройства, которое описано ниже.
Должен признать, что не плохо разбираясь в электронике, почти не умею программировать (в активе несколько поделок на Атмеловских камнях, написанных на АСМе), и абсолютно не знаком с ПЛИСами. Разумеется, речь не идет о том, чтобы кто-то сделал за меня эту работу. Работать буду сам, и готов к любым трудностям.
Но освоить новую область знаний за короткое время даже на среднем уровне, чтобы решить такую задачу, не реально...
Поэтому буду благодарен за любые подсказки, которые помогут избежать больших потерь времени и сил.
И заранее прошу сильно не пинать за ошибки, которых у меня наверняка будет не мало.

Постараюсь конкретизировать желаемое.

Задача: разработка системы управления специализированным синхронным электродвигателем.

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

Основные параметры двигателя:
1) Режим рабочих оборотов - 35 об/мин, 50 об/мин. Необходима возможность оперативной регулировки рабочих оборотов в пределах +/-10% от базовых значений.
2) Режим старт/стоп, для разгона и остановки ротора в течение заданного времени (не более 5 сек).
3) Схема статорных обмоток - 8-фазная звезда, с питанием фазных обмоток от полумостов с раздельным управлением верхними и нижними ключами по каждой фазе.

Система управления должна:
1) Обеспечить выбор базовой скорости (35/50 об/мин).

2) При подаче команды "Старт" автоматически определить положение ротора относительно статора (точность позиционирования - 1/16 углового деления полюсов ротора), и перейти в режим "Разгон".

3) Режим разгона - при этом на двигатель подается максимальное фазное напряжение, и задействуется до пяти фазных обмоток в каждый момент времени (для получения максимального крутящего момента двигателя). В этом режиме форма фазного напряжения - импульсная, двуполярная (питание от полумостов), без ШИМ. Повышенная мощность в этом режиме требуется для преодоления инерции маховика значительной массы.

4) При достижении заданных базовых оборотов двигатель переводится в рабочий режим, при котором фазное напряжение снижается в несколько раз, а напряжение в каждый момент подается только на одну или две фазные обмотки (аналог полушагового режима у шаговых моторов). Дополнительное снижение подводимой мощности в рабочем режиме обеспечивается ШИМом фазных напряжений.
Требование снижения фазного напряжения вытекает из особенности синхронных электромоторов, у которых ротор имеет свойство "осциллировать" в точке максимального сцепления магнитный полей статора и ротора, что отрицательно сказывается на стабильности угловой скорости. Это явление наиболее выражено на максимальной мощности двигателя, точнее - при минимальной нагрузке.
Для уменьшения подобных колебаний, и максимальной мгновенной стабилизации угловой скорости, к двигателю должна подводиться минимальная электрическая мощность, которая позволит поддерживать синхронный режим работы (на грани срыва синхронизации). При этом ротор, отставая от поля статора на угол до 1/2 угла зубцового деления, продолжает вращаться синхронно с полем статора. В рассматриваемой конструкции механическая мощность в рабочем режиме затрачивается только на потери трения в узле вращения, следовательно, подводимая электрическая мощность не должна намного превышать мощность механических потерь на трение.
Расчетное соотношение подводимой мощности в режиме разгона к мощности в рабочем режиме примерно 1000:1.

5) Система управления должна постоянно отслеживать отставание механической фазы ротора (по сигнал одного из датчиков Холла) от электрической фазы тока в определенной статорной обмотке. При значительном отставании фазы ротора от фазы статора (на грани срыва синхронизации) система увеличивает подводимую мощность изменением скважности ШИМ, при набегании фазы ротора, мощность снижается.

6) Перестройка скорости в требуемых пределах - дискретная, с шагом примерно в 0,5% от базовой скорости в ту, или другую сторону.

7) При подаче команды "Стоп" двигатель переводится в режим торможения, и должен быть остановлен за время, не превышающее время разгона. В этом режиме на него также подается повышенное фазное напряжение без ШИМ.

8) Это уже явно из области "хотелок" - реализовать все функции управления двигателем по wi-fi, используя в качестве дистанционного пульта, допустим смартфон на андроиде.

Исходя из перечисленных выше условий и требований, очевидно, что система управления является, по сути, автоматом второго рода (если память не изменяет - автомат Мура) - с системой обратной связи по отклонению фазы ротора, и сам Бог велел реализовать ее не на микроконтроллере, а на ПЛИСке.

В настоящее время изготавливается прообраз устройства на ATMTGA162 и дискретах.
К сожалению, из-за сложностей конструкции мотора пришлось значительно увеличить количество внешних дискретных элементов, только стандартной логики в выходных драйверах, питающих фазные обмотки, около десятка корпусов.
Вот и созрело решение заменить всю эту разномастицу на один корпус Альтеры. Взялся читать литературу, до которой смог дотянуться, не вставая с кресла, но ее оказалось не достаточно даже для того, чтобы уверенно стартовать.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4953

Написал длинный ответ, настолько длинный, что сессия закончилась и он потерялся.

В общем, отвечу коротко. А что если информацию с датчиков Холла как-то интерпретировать, чтобы получить на выходе адрес ПЗУ, в котором будут храниться сигналы для ШИМ. В таком случае задача сводится именно к анализу датчиков, остальная реализация тривиальна - код ШИМа для ПЛИС легко найти в Сети. Заранее на компьютере просчитать необходимые константы и загнать их во внутреннюю память ПЛИС с помощью соответствующей мегафункции Quartus'а. Т.е. таблицы для режимов Старт, Работа и Останов. И две копии таблиц для режимов 35 и 50 об/мин. И две дополнительные таблицы для перехода между 35 и 50 об/мин.

Не уверен, но мне кажется что основную работу можно свести к анализу датчиков.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4955

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Абсолютно верно. Все интерпретации сигналов Хлопчиков Далла уже сделаны, и таблицы составлены. Вы ошиблись только в одном - табличные решения применимы только в режимах Старт/Стоп. В рабочем режиме, в принципе, ничего делать не нужно, синхрон он и есть синхрон. Раскрутили ротор, а дальше он следует за полем, как на веревочке. С одним уточнением - система должна регулировать длину этой веревочки (время запаздывания). А здесь таблица не поможет - нужно отслеживать реальные факторы, влияющие на механические потери в системе. А они инвариантны.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4956

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Хотелось бы начать с конца - с описания модуля выходных сумматоров "для замеса" исходных сигналов. Для несинхронной логики (на примитивах 3&) их всего три для каждой фазы - собственно сигнал каждой фазы (меандр со сдвигом на 45 градусов относительно предыдущего), сигнал ШИМ (общий для всех фаз) и сигнал четности (для каждого полупериода), который раздается попарно на верхние и нижние ключи полумостов, коммутирующих фазы.
Таких модулей должно быть 16 - по два на каждую фазу. Итого - 16 примитивов 3& плюс один примитив инвертор сигнала четности.
Можно в Квартусе нарисовать схему выходных сумматоров из примитивов прямо в файле верхнего уровня, но она будет просто загромождать общую схему элементарными компонентами и большим количеством входных и выходных проводников (я пока не понял, как присваивать многоразрядным шинам наименование для каждого отдельного провода).
А можно описать все это в Верилоге, примерно так (если я правильно усвоил первый урок):
module OutDrv (
	input wire clock, // сигнал клока для синхронной логики
        input wire PWM, // сигнал ШИМ
        input wire Chet, // сигнал четности
	input wire In_F, // сигнал фазы 
	output wire Hi_Key, // сигнал на верхний ключ полумоста
	output wire Low_Key // сигнал на нижний ключ полумоста
	);

always @ (posedge clock) begin
	Hi_Key <= In_Fase & PWM & Chet;
	Low_Key <= In_Fase & PWM & ~Chet; //для этого выхода сигнал четности инвертируется
end

endmodule

Можно так же "по детски" дописать сюда драйверы и для остальных 7 полумостов, при этом увеличится число проводов (wire) хотя я знаю, что можно объединить однотипные фазные сигналы в шины, но как это сделать пока не понял. Точнее, не разобрался, как в описании "вытаскивать" конкретный провод из шины.
И сразу вопрос: когда имеет смысл присваивать выходному сигналу наименование "wire", а когда - "reg"?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4958

имхо EPM240 для Вашей задачи маловат,
лучше реализовать на FPGA туда влезет и софт ядро, реалезующее Ваш алгоритм, и какие-то дополнительные вещи
софт ядро AVR есть на сайте OpenCores

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4960

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Исхожу из реальных технических возможностей - 100-ногую микросхему QFTP из серии Max II еще возможно распаять "на коленке", а вот что-то более серьезное вряд ли... К тому же, если не хватит места в EPM240, есть EPM570 в таком же корпусе.
Я думаю, что нет большого смысла толкать ядро АВР в Альтеру для решения моей задачи. В реалтайм придется делать только сравнение двух переменных для вычисления разности фаз. Но это уже даже не следующий этап работы, а ...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4970

Ну, запаять 144 ногую микросхему не намного сложнее чем 100, а использование FPGA дает два явных
преимущества - не нужно думать о ресурсах (поместится или нет?) и возможность отладки (сигналтап)
На вашем месте я бы начал реализовывыть на каком-то уже готовом девките.
По поводу "wire" или "reg" я сам ничего не понимаю, иногда вообще ничего не пишу. Но в вашем конкретном случае нужен "reg".

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4971

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Я не правильно понял Alvich - подумал, что речь идет о FBGA, а не о FPGA.
У меня уже заказана такая плата: EPM240-Core-Board-ALTERA-MAX-II-FPGA. Надеюсь, что приедет в январе.

Весь день воюю с QII - компилятор выдает сообщение:
Error (275065): Can't find mapping for node in block of type PWM of instance "inst1"
Error (275065): Can't find mapping for node in block of type Out_DrvF of instance "inst"
Error (12153): Can't elaborate top-level user hierarchy

В проекте три файла. Но в окне иерархии созданные "под себя" два блока (файлы *.v), похоже, позиционированы как файлы топ-уровня (не сдвинуты вправо по отношению к первому файлу проекта *. bdf). Может такое быть? И как это исправить? В учебной литературе на могу найти подсказку, как решить проблему.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4977

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Подскажите пожалуйста, как решить такую задачу:

Есть 8-битная шина данных, с числом возможных комбинаций 16, из которых 8 основных (допустим, одна из комбинаций такая - 10010011) и 8 инверсных относительно основных (инверсная к приведенной в качестве примера - 01101100).
Требуется определить какая из 16 входных комбинаций установлена в данный момент (рандомно), и в зависимости от того, какая комбинация на входе, включить на выходную 8-разрядную шину другую комбинацию, число которых также 8 основных + 8 инверсных.
Анализ состояния входной шины проводить при каждом изменении на входе. При возникновении на входе не штатной комбинации, на выходе сохранять последнюю правильную комбинацию. И входные, и выходные комбинации табличные, с однозначным соответствием вход : выход.

Понимаю, что нужно в цикле сравнивать на компараторе состояние входной шины с набором констант, но как это реализовать в ПЛИС не могу догнать.

Заранее благодарю.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 2 года 11 мес. назад #4978

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Изучите Верилог, не нужно в схематике делать. Синтаксис арифметических выражений - как в Си. Например:
q <= 
d==c1 ? q1 :
d==c2 ? q2 :
...
d==c16 ? q16 : q;
Квартус сам таблицу сделает.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.
Время создания страницы: 0.205 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Проекты пользователей Система управления синхронным многофазным электрод