упоминавшаяся ранее схема во втором приближении к работающей версии, пока проверил с небольшой нагрузкой. но даже так 50Гц вентилятор на частоте 200Гц забавное зрелище. изменение частоты синуса достигается как корректировкой регистров ARR и RCR так и переключением таблиц. трансформатор вспомогательного ип намотан на помехоподавляющем ферритовом колечке снятом с провода питания какого то бп. первичная обмотка распределена равномерно, вторичные каждая в своём секторе. межобмоточная изоляция - толстый фум и малярный скотч поверх него. выпрямительные мостики взяты из сгоревших преобразователей от лампочек. несмотря на их низкочастотность работают приемлемо - мостики на верхние ключи тёплые, общий на нижние горячий но допустимо. столкнулся с тем что новые UC3842 могут быть некачественными, поставил старые выпаянные откуда то - работают нормально и после длительного теста.
https://www.upload.ee/files/13719849/fw ... c.zip.html _____ несложную защиту от превышения тока использующую падение напряжения на ключе видимо можно сделать и с оптронами HCPL, без микросхем 384x. конечно с небольшой доработкой программы.
немного подправил прошивку, включил в ней всякие crc и watchdog_и и попробовал запустить с двигателем номиналом 2,2kW. пока без нагрузки поскольку силовая часть ещё без настоящего радиатора. вроде нормально работает, разгоняется, тормозит, меняет направление вращения. хотя ненагруженный конечно не показатель. выходные фильтры не ставил, подключил напрямую. дроссели можно будет намотать на феррите от твс сложив его рогами наружу или каком нибудь статоре от сгоревшей мясорубки. в качестве выключателя поставил электромеханическое узо 30мА. от помех не срабатывает. кое что ещё не сделано, вроде корректировки уровня шим от напряжения на шине 310V.
векторное f0 не потянет. да и я тоже. хотя с ним хрен был бы существенно толще. но сложнее и дороже.
Почему же? Думаю - запросто. У меня на M4 оно занимает <10% (на 144МГц). На M0 конечно будет поболее (пускай даже в 2 раза из-за более слабой системы команд), но вполне осуществимо. А без векторного управления будет очень нестабильно работать при резких изменениях нагрузки. И будет излишне греть обмотки лишними токами.
это хорошо но реализация векторного управления меня не очень интересует. любопытнее посмотреть как будет работать (и будет ли) нижеприаттаченная схема а также односторонняя модуляция.
это хорошо но реализация векторного управления меня не очень интересует.
А зря, потому как исходя из моего опыта, все эти синусные управления мотором - почти не имеют практического смысла, потому как крайне неэффективны. Разве что в очень узких областях ("вентиляторная" нагрузка). А без FOC-а (векторного управления) и обратной связи по токам и угловому положению, PMSM-двигателем можно и на STM8 крутить. Нормальным ШИМ-ом. Я когда-то крутил на тактовой CPU=16МГц и частоте ШИМ=10кГц. Загрузка CPU правда тогда - по самые гланды, на ассемблере большая часть кода. Годится это только в качестве игрушки - побаловаться и отложить в сторону.
Я когда-то крутил на тактовой CPU=16МГц и частоте ШИМ=10кГц. Загрузка CPU правда тогда - по самые гланды, на ассемблере большая часть кода.
На чистом СИ
Цитата:
В моих тестах на мега168 16МГц, при частоте ШИМ 7,8кГц(128мкс), на расчет табличного синтеза и амплитуды для 6 каналов ШИМ требуется всего 11мкс, с учетом вхождения в прерывания и выхода, грубо, остается еще 100мкс, вагон времени.
Я когда-то крутил на тактовой CPU=16МГц и частоте ШИМ=10кГц. Загрузка CPU правда тогда - по самые гланды, на ассемблере большая часть кода.
На чистом СИ
Цитата:
В моих тестах на мега168 16МГц, при частоте ШИМ 7,8кГц(128мкс), на расчет табличного синтеза и амплитуды для 6 каналов ШИМ требуется всего 11мкс, с учетом вхождения в прерывания и выхода, грубо, остается еще 100мкс, вагон времени.
Ну во-первых: у меня частота ШИМ немного по-больше. Во-вторых: синус я считал не таблицей. На таблицу бы просто памяти не хватило - я делал на самой дешёвой платке с али, на которой был STM8F103 всего с 8КБ флеша. Даже в этом случае у меня при компиляции в режиме debug размер образа был ~7КБ (в release с оптимизацией = ~6КБ). Т.е. - и так еле влезало. Потому и ассемблер пришлось много использовать. На си вполне возможно тоже бы хватило скорости, просто не лезло оно во флешь - IAR не особо качественно оптимизирует для STM8.
ну так это у вас просто какой-то генератор синуса. У меня вообще-то было полноценное управление мотором. С интерактивным управлением пользователем (интерактивный интерфейс под терминалкой, с меню и всякими плюшками), с конфигурированием и заданием разных режимов разгона (с сохранением профилей в EEPROM). Т.е. - полноценная программа управления PMSM-мотором. 1026 байт имхо - даже на одну только таблицу синуса маловато. Только если на какую-то очень грубую. У меня опять-же точность расчёта синуса была около 16 бит. Так что сравнение совершенно некорректное.
К тому же - 6 байт ОЗУ? Правда что-ли? И все переменные и стек в 6 байт влезли. Ну-ну....
PS: Если брать только генератор синуса, то он у меня был размером где-то 200 байт кода.
Я когда-то крутил на тактовой CPU=16МГц и частоте ШИМ=10кГц.
Блин, я то думал, что речь шла о том что бы просто покрутить. А покрутить и тестового кода хватит: 3 таблицы размером по 128 точек 6 каналов ШИМ 2 переменные, одна изменение частоты, вторая изменение амплитуды +пару флагов на то, что бы в главном цикле можно было что-то изменить
На тестовое покрутить хватит.
jcxz писал(а):
точность расчёта синуса была около 16 бит
Какой смысл от такой точности? Ваша точность упирается в следующее 10кГцШИМ/128точек таблицы=78,125Гц формируемый синус Число 128 на 3 нацело не делится, значит выберите, к примеру 126. 10кГц/126=79,365Гц. Это идеальный синус, хотите 16 бит, хотите 8 бит, без разницы, все равно на выходе ШИМ и очень много шума. Для синуса 25Гц, у вас будет 10кГц/25Гц=400 точек таблицы, ближайшее число для идеального 3фазного синуса это 399 точек таблицы. А для синуса 400Гц, 10кГц/400Гц=25 точек таблицы.
А теперь попробуйте, хотя бы в экселе, выдернуть 25 точек синуса из 128 битной таблицы и сравнить с посчитанным синусом для 25 точек, циферки-то одинаковы будут, банально, но факт.
Коэффициент гармоник для ступенчатой функции не зависит от количества точек таблицы, единственное что меняется, это дискретность таблицы, градусов, и думаю, что ШИМ 8 бит против 16 бит сыграет тут большую роль.
Какой смысл от такой точности? Ваша точность упирается в следующее 10кГцШИМ/128точек таблицы=78,125Гц формируемый синус
Причём тут "таблицы"? Ещё раз: у меня не используются таблицы. От слова "совсем". Поэтому ничего не упирается. И частота у меня меняется плавно, а не как у вас с таблицей - скачками. А потому возможен плавный разгон двигателя.
Из дальнейших рассуждений вообще ничего не понял... Вроде должно быть понятно априори, что ваша таблица в 128 значений имеет точность 7 бит (по аргументу), у меня =16 бит. Разница очевидна - как между небом и землёй. Таймеры у STM8 - 16 битные, так что ничего никуда не "упирается". У вас управление - грубое, у меня - кратно точнее. Двигатель крутить можно вообще без синуса - вся разница в качестве. Вот и вся разница.
таблица в 128 значений имеет точность 7 бит (по аргументу), у меня =16 бит
если у вас брать таблицу в 16 бит, это у вас 65536 точек что ли? Тогда при чем тут
jcxz писал(а):
Таймеры у STM8 - 16 битные
У вас ШИМ 10кГц, туда физически нельзя запихать более 10000 точек.
jcxz писал(а):
И частота у меня меняется плавно, а не как у вас с таблицей - скачками.
А это не верно. Не скачками а линейно:
Цитата:
Пусть мне нужно генерировать частоту 50Гц, учитывая, что основную процедуру таймер исполняет 7812 раз в секунду 65536 / (7812 / 50Гц) = 419 65536 / (7812 / 50,25Гц) = 422 65536 / (7812 / 50,5Гц) = 424 65536 / (7812 / 50,75Гц) = 426 65536 / (7812 / 51Гц) = 428
Точность установки данного метода ~0,125Гц
А если мало таблицы в 128 точек, ни вопрос, можно и 256 точек, 512 точек, 1024 точек. А если вам мало 8 битного ШИМ, то, как вы уже сказали, таймеры у STM - 16 битные, ну 16 битный ШИМ - это физически не возможно, но думаю можно и 9 битный ШИМ, и 10 битный ШИМ, ну 12 бит ШИМ это уже перебор будет.
Тогда при чем тут [quote="jcxz"]Таймеры у STM8 - 16 битные
Это был ответ на ваше что моя точность там куда-то упирается. Поделите частоту тактирования таймера на 10кГц - вот такую дискретность позволяют обеспечить таймеры.
Не скачками а линейно: Пусть мне нужно генерировать частоту 50Гц, учитывая, что основную процедуру таймер исполняет 7812 раз в секунду 65536 / (7812 / 50Гц) = 419 65536 / (7812 / 50,25Гц) = 422 65536 / (7812 / 50,5Гц) = 424 65536 / (7812 / 50,75Гц) = 426 65536 / (7812 / 51Гц) = 428
А это что если не скачки? Это очень грубая установка частоты. Кроме того - а если двигатель крутится не на 50 Гц? А скажем на 1Гц? Тогда при вашей таблице на 128 значений на период синуса у вас будут скачки углового положения ротора = 360/128=~2.8. Почти 3 градуса! Это уже не плавное кручение, а дёрганье. А на бОльших оборотах также будет идти вибрация и гудение. Да и обороты у вас невозможно менять плавно - частота тоже меняется только скачками. Даже просто если нужно точно выставить частоту вращения - то тоже невозможно, можно только грубо.
PS: Не понимаю о чём вы спорите? Вроде само должно быть само собой очевидным, что вычисления с точностью 16 бит однозначно точнее чем 7 бит. Зачем спорить с очевидным? И зачем вообще спорить? Я вроде вашего мнения не спрашивал как мне реализовывать и вам не указываю как делать: если кому-то нравится ездить на квадратных колёсах - это его дело. Значит тряска его не волнует. Ну пускай не квадратных, а 128-угольных. А я привык делать качественно, а не халтурить....
что вычисления с точностью 16 бит однозначно точнее чем 7 бит.
И все таки мне не понятно, откуда взялись 16 бит и 7 бит?
jcxz писал(а):
Поделите частоту тактирования таймера на 10кГц - вот такую дискретность позволяют обеспечить таймеры.
но что бы получить 16 битный ШИМ, если конечно речь о этих 16 битах идет, то по вашей формуле: FFFF*10кГц = 655МГц? Может что-то опять не так?
jcxz писал(а):
Ну пускай не квадратных, а 128-угольных.
Раз таблицу не используете - значит просчитываешь синус на лету (не которые тут уже пытались просчитывать синус быстрее 4 пня в месте с атлоном, а один да же умудрился за 30 тактов), по другому синус не получить.
jcxz писал(а):
360/128=~2.8
Не нравится? ШИМ 8192Гц, табличка размером в 8192, 360/8192=~0,04, это была шутка, но вполне реализуема.
jcxz писал(а):
А это что если не скачки?
NCO модуль есть только в PIC, таймер это делитель, 2 4 8 16 и т.п.
Регистры CCRx таймера обновляются только в определенный момент времени, это если буферизирование включено, идеально получится только так: 3Гц 9 33 ... 9999, при всем желании, сколько не потей красиво тут не получится, всегда будет ошибка либо там, либо сям.
И не надо тут врать, что у вас скачков нету. Для доказательства, код в студию.
Я же сказал - это шутка, но, к примеру, на F100 с размером флеша 128кБат вполне реализуем.
jcxz писал(а):
Есть конечно.
Значит скачки есть, куда уж без них.
jcxz писал(а):
Только у меня они размером = 360/65536 градусов, а не 360/128. Почувствуйте разницу!
Матом загнуть что ли?
Регистры CCRx таймера обновляются только в определенный момент времени, это если буферизация включена. ШИМ у вас 10000Гц, а это значит что обновление регистров CCRx таймера возможно только 10000 раз, другого не дано. А вы пытаетесь туда затрамбовать 65536 отсчетов. Максиму что таймер возьмет 65536/10000 = 6,5536 , то есть каждый 6,5536 отсчет из ваших 65536 отсчетов, остальное время у вас процессор попусту просто высчитывает ни кому ненужные отсчеты. Я взял первые 256 точек вашей таблицы или ваших расчетов, посчитанных в екселеСпойлервот они, это для 8 битного ШИМ
Для формирования синуса 78,125Гц требуется всего, ШИМ 10кГц, 10000/78,125=128, ровно 128 точек моей таблицы, мне так удобно посчитать и сравнить, Ну а теперь смотриСпойлер
Можно было бы обойтись всего тремя таблицами и тремя строчками кода, а вы высшую математику сюда приплели.
Еще раз, коэффициент гармоник для ступенчатой функции не зависит от количества точек таблицы, единственное что меняется, это дискретность таблицы, градусов. Чисто на физическом уровне нельзя в трамбовать 65536 отсчетов в таймер, который способен принять всего 10000 отсчетов, и то в определенный момент времени.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения