Сергей Борщ 143 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 3 часа назад, MPetrovich сказал: Или вместо 31250 Вы предлагаете определить: #define F_PWM 31250 ? Предлагаю #define PWM_TICKS 256 #define F_PWM ((F_CPU) / PWM_TICKS) Но даже ваш вариант с F_PWM значительно повысил бы читаемость. 3 часа назад, MPetrovich сказал: Я на осциллографе ПЕРИОД измеряю. Он поверенный, развёртка точная. Частоту я вижу на экране, но это результат 1/Т. Погрешность измерения периода какая? Насколько точно вы можете совместить линию с сигналом? И контроллер у вас от чего тактируется? От внешнего кварца или внутреннего RC, у которого точность +- трамвайная остановка и который для частоты, отличной от 1 МГц нужно вручную подстраивать записью константы (которую надо сначала вычитать программатором из сигнатуры) в регистр OSCCAL? 3 часа назад, MPetrovich сказал: Длина таблицы 32 или 36. Я так понимаю, что чем длиннее таблица, тем меньше раз повторяется каждое значение при одинаковом шаге аккумулятора. По формуле подсчёта частоты выходит, что длина таблицы на частоту не влияет. Но так ли это я не уверен... Ничего не понимаю. Как не влияет? Вот полная формула подсчета: F = step * F_PWM / (table_size * 2^N). Для таблицы в 32 ячейки индекс занимает 5 бит в 16-битном фазовом аккумуляторе, 11 бит остается на дробную часть. Отсюда получается step * 8000000 / 256 / (32 * 2^11) = ваша формула step * 31250 / 65536. Для размера таблицы в 36 ячеек и 16-битном аккумуляторе индекс будет занимать уже не 5, а 6 бит и 10 бит остается на дробную часть. Формула будет step * 8000000 / 256 / (36 * 2^10) и фазовый аккумулятор должен считать от 0 до 36*2^10-1, т.е. до 36863 (или от 36863 до нуля, что дает более короткий код). 2 часа назад, MPetrovich сказал: Я тут подумал, может для таблицы в 36 значений вычислить другой размер фазового аккумулятора? Скажем такой: 36*1024=36864 Обязательно, иначе просто работать не будет. И еще вычесть единичку. 2 часа назад, MPetrovich сказал: Только надо аккумулятор во такой сделать: 36*2048=73728 Хозяин - барин, вы выделили 11 бит на дробную часть. Но ваш аккумулятор уже не влезает в 16 бит, под него надо выделять 32-битную переменную, все вычисления становятся 32-битными и уже с точки зрения вычислений нет никакой разницы, считать для 36 * 2^11 - 1 (73727) или для 36*2^(32-6) - 1 = 2415919103, только в последнем случае разрешение по частоте получается гораздо лучше. 2 часа назад, MPetrovich сказал: Нет, не вариант. Искажается форма синуса на отрицательной полуволне. Что-то делаете неправильно. Показывайте код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 31 минуту назад, Сергей Борщ сказал: Погрешность измерения периода какая? Насколько точно вы можете совместить линию с сигналом? Кстати, а один период ШИМ сколько получается по вашему осциллографу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 1 hour ago, Сергей Борщ said: Кстати, а один период ШИМ сколько получается по вашему осциллографу? Частоту ШИМ я померил сначала на осциллографе, а уж потом подсчитал в цифрах через тактовую частоту))) Так что точно меряет осциллограф, главное картинку развернуть пошире. Ну, на глаз погрешность процентов до трёх-пяти примерно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба давно не заглядывал а тута всё закипело , на знаю потянет мега128 стока вычислений ? я сижу на XMEGA разогнанный до 48 мгц. , все самодельщики колхозят таблицу и на произвольное число точек , но не я , и заводят прерывание на число точек , я вам скину проги куда я подглядывал , открывается студией 5 , если найду 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба потом ещо накидаю если найду AVR1636 - Firmware.rar AVR Configurable Three Phase Fan.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 (изменено) · Жалоба В 03.08.2023 в 10:58, MPetrovich сказал: Не смог пока придумать приемлемый вариант переключения ШИМ-синуса между верхними и нижними ключами в нижние ключи я закидываю максимальное число на весь период и получаю BLDC период Изменено 4 августа, 2023 пользователем Oleg.normalniy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 42 minutes ago, Oleg.normalniy said: потом ещо накидаю если найду AVR1636 - Firmware.rar 402.93 kB · 3 downloads AVR Configurable Three Phase Fan.rar 246.32 kB · 2 downloads Спасибо, покурим эти исходники))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба вот интересный сайт и кино не моё https://microchipdeveloper.com/mct5001:zsm-viewer 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 14 minutes ago, Oleg.normalniy said: в нижние ключи я закидываю максимальное число на весь период и получаю BLDC период Нижние ключи у Вас открыты всего полпериода. Я имею в виду алгоритм на 180гр. Я на нем остановил свой выбор. В принципе, я уже накидал прогу. Теперь только "доработать напильником" немножко осталось и с индикацией разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба В 02.08.2023 в 13:18, Сергей Борщ сказал: Во всяком случае синус на выходе дает такой же правильной дорогой идёте товарисчи 4 минуты назад, MPetrovich сказал: Нижние ключи у Вас открыты всего полпериода. Я имею в виду алгоритм на 180гр всё верно но есть но , есть режим ШИМ-а две стороны , тама поиграться с нижним ключом , как в блдс не получиться ДВЕ СТОРОНЫ.logicdata Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба народ переходите на XMEGA , плюшки , разгон , если верить DATA-е , до 128 мгц. , система событий это почти полноценный второй проц , ацп пошустрей и много чего 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 26 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Делюсь кодом формирования техфазной векторной ШИМ, упростил и удалил излишние для начала сложности. На вход подаётся заданный вектор напряжения в осях альфа-бетта, можете крутить его как хотите, самое простое это uX = A*cos(phi), uY = A*sin(phi). void pm_voltage(pmc_t *pm, float uX, float uY) { float uA, uB, uC, uMIN, uMAX, uDC; int xA, xB, xC; uX /= pm->quick_Udc; uY /= pm->quick_Udc; uA = uX; uB = - .5f * uX + .8660254f * uY; uC = - .5f * uX - .8660254f * uY; if (uA < uB) { uMIN = (uC < uA) ? uC : uA; uMAX = (uB > uC) ? uB : uC; } else { uMIN = (uC < uB) ? uC : uB; uMAX = (uA > uC) ? uA : uC; } uDC = uMAX - uMIN; if (uDC > 1.f) { uDC = 1.f / uDC; uA *= uDC; uB *= uDC; uC *= uDC; uMIN *= uDC; uMAX *= uDC; } if (pm->config_VSI_ZERO == PM_VSI_GND) { uDC = 0.f - uMIN; } else if (pm->config_VSI_ZERO == PM_VSI_CENTER) { uDC = .5f - (uMAX + uMIN) * .5f; } uA += uDC; uB += uDC; uC += uDC; xA = (int) (pm->dc_resolution * uA); xB = (int) (pm->dc_resolution * uB); xC = (int) (pm->dc_resolution * uC); pm->proc_set_DC(xA, xB, xC); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба у меня нет таблицы , вернее она есть но она меняется по вашим хотелкам ( опция U и L ) , основная формула U/F=const. то есть напряжение делим на 50 гц. и получаем const. на 1 гц , а дальше const x F (частота) и раскидываем в массиве для каждой частоты (обороты) , дальше беру из массива 1 число соответствуешей частоты (обороты) и прогоняю по другому уравнению на 24 точки и закидываю в другой массив 2 , и как только F +1 , беру другое число из массива 1 и опять прогоняю по уравнению и в массив 2 , а из массива 2 закидываю в таймеры , пока трудно понять но я вам помогу и если вы раскроете мой секрет , всё должно только между нами а лучше Вам самим придумать свой алгоритм , а то народ будет спрашивать кто у кого списал ? 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg.normalniy 30 4 августа, 2023 Опубликовано 4 августа, 2023 (изменено) · Жалоба а теперь о сложном , на самом деле у меня другая формула U + (ваши хотелки по опции U)/ F (только 50гц)=const. и в массив 1 по const. x F (частота до 50 гц. свыше 50-100 гц. другое уравнение) , дальше переменная L только для малых оборотов , и с повышением F переменная L декремент , и дальше я заметил что примерно от 15 до 25 гц. идет провал мощности и тогда я завел две переменные которые следят сами за собой на понижение и повышение числа , и корректируют число и только потом число попадает на уравнение 24 точки , а дальше вы все знаете Изменено 4 августа, 2023 пользователем Oleg.normalniy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 5 августа, 2023 Опубликовано 5 августа, 2023 · Жалоба Модератор: Oleg.normalniy, освежите знания правил форума. Нецензурная и грубая лексика тут запрещена и требование высказываться грамматически правильно там тоже прописано. Ваши нарушающие правила сообщения скрыты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться