А вы пытаетесь туда затрамбовать 65536 отсчетов. Максиму что таймер возьмет 65536/10000 = 6,5536
Ничего не понятно... Что такое "65536/10000"? Причём тут оно. Зачем что-то куда-то "трамбовать"? Складывается впечатление что вы не понимаете как работает ШИМ....
Еще раз, коэффициент гармоник для ступенчатой функции не зависит от количества точек таблицы, единственное что меняется, это дискретность таблицы, градусов.
Так по сколько градусов будут скачки вашей синусоиды по таблице размером 128 отсчётов? Разницу между скачками 360/128 градусов (у вас) и 360/65536 градусов (у меня) понимаете? Если для вас нет разницы между ними?
Объясни мне, не понимающему, как в таймер, принимающий 10000 отсчетов, запихать 65536 отсчетов
Нет, не смогу. Так как не знаю ни что такое "таймер принимающий 10000 отсчётов", ни что такое эти "отсчёты" и зачем они нужны для генерации синусоиды? Вроде любой вменяемый человек должен знать, что синусоида генерится по формуле y=sin(x); где x - угол изменяющийся со скоростью генерируемого синуса. И вызывается эта функция с частотой ШИМа. У меня угол (x) имеет точность = 16 бит. Результат sin(x) - тоже 16 бит. Отсюда и качество генерируемой синусоиды.
Компания SUNCO выпускает такие компоненты, как Si- и SiCFET-транзисторы, дискретные IGBT и IGBT-модули, SiC-диоды, диодные мосты, диоды Шоттки, TVS-диоды, TVS-тиристоры и многое другое, являясь одним из крупнейших в мире производителей дискретных полупроводниковых компонентов с полным циклом производства и продаж. Продукция компании применяется ведущими мировыми производителями. В статье можно ознакомиться с ассортиментом продукции.
Вы похоже не понимаете что такое ШИМ, что такое "частота ШИМ-а". Советую почитать специальную литературу.
А вот так генерится синусоида с хорошей точностью по частоте и с максимально возможной точностью по амплитуде (для данного ШИМ-таймера). Без всяких таблиц и прочей чуши:
Примерно так у меня и реализовано. Частоту можно менять плавно, амплитуду - тоже. Никаких дёрганий и вибраций на любой скорости вращения. Естественно - это только псевдокод. В реале у меня он оптимизирован (вычисляется не один сэмпл за раз, а массив сэмплов; из которого потом ISR ШИМ-а пихает значения в регистры сравнения таймера). И вычисления все оптимизированы под STM8. И в реале у меня F_SIN - не константа, а также может плавно меняться, для плавного разгона/торможения. Точнее - плавно меняется производная от неё величина - PHASE_STEP.
Опубликованы материалы вебинара, посвященного пленочным конденсаторам компании Hongfa, на котором была представлена текущая линейка и модельный ряд продукции этого направления, включая новые, недавно вышедшие серии.
На вебинаре были приведены актуальные примеры применения пленочных конденсаторов Hongfa в источниках питания, зарядных станциях для электротранспорта, преобразователях частоты, фотоэлектрических преобразователях и ветрогенераторах.
Период таймера ШИМ составляет 16000000/10000 = 1600 Было бы 1023 я бы сказал что 10 битный ШИМ, 2048 - 11 битный ШИМ, 1600 - что-то между 10 и 11 бит. Но всяко ШИМ не 16 бит. Отсюда следует что в регистр ARR таймера должно быть записано PERIOD_TIM.
Что далее: синус мне не удалось посчитать и сравнить, скорее всего используется компилятор с++, так как sin(x) принимает тип float. Остается загадкой
Код:
//Sinus. {x} == angle[rad] / PI * 2^15
хотя возврат
Код:
//return: {-2^15+1...+2^15-1} == {-1...+1}
и что это
Код:
s16 Sine(s16 x) { ... }
возможно какая-то таблица создается на этапе компиляции. Одним словом...
и вот же зараза какая, да же с десятичными знаками циферка в циферку совпадает.Просто, ради интереса, какой компилятор используется и сколько полностью код выполняется?
VladislavS, это частный случай, на каких-то кратных частотах. Этот друг полином считает, сразу бы сказал, только что точнее будетСпойлер слева на право: библиотечная функция avr-gcc, таблица в 65536 точек, 128 и 256 для сравнения, и последнее fix полином. Время выполнения на какой-то частоте МК, не важно. 16 и 32 это числа сумматора на частоте 50 Гц.и с другой стороны, а как насчет такого фикса?Спойлер
Было бы 1023 я бы сказал что 10 битный ШИМ, 2048 - 11 битный ШИМ, 1600 - что-то между 10 и 11 бит. Но всяко ШИМ не 16 бит.
И что? Главное - синус считается с точностью 16 бит. А фаза (угол) - вообще с точностью 32 бита. Это и даёт точность выходного сигнала по частоте и уровню.
скорее всего используется компилятор с++, так как sin(x) принимает тип float.
Вы исходники си-шные читать умеете? Где вы там видите sin(float ...)? Вы видите там объявление функции Sine()? Как она объявлена и комментарий к ней прочитали? Там совершенно явно указаны типы аргумента и результата функции. Перечитйте ещё раз. Кроме того - ранее я уже писал что большая часть кода - на ассемблере. Тот исходник, что я привел - псевдокод, иллюстрирующий алгоритм вычислений (так как если даже си тут похоже мало кто понимает, то ассемблер STM8 боюсь вообще никто не сможет понять ). В реальности код этот у меня написан на ассемблере.
возможно какая-то таблица создается на этапе компиляции.
Да уж.... похоже неизлечимый случай.... У вас какая-то зацикленность на таблицах. 4-й раз повторяю: Я НЕ ИСПОЛЬЗОВАЛ ТАБЛИЦ. Никаких.
Вспоминайте школьный курс математики и вычисление функций при помощи полиномов. Синус прекрасно аппроксимируется полиномом 7-го порядка. Ещё раз: совершенно без таблиц! И с точностью лучше 16 бит.
и вот же зараза какая, да же с десятичными знаками циферка в циферку совпадает.
Теперь возьмите квадрат, измерьте его от 1-го угла до 3-го, а потом от 2-го до 4-го. Результаты совпали? Совпали. Получили = X. Теперь возьмите окружность диаметром = X, измерьте её диаметр. Равен X. Вот же зараза - и у квадрата тоже по всем сделанным измерениям получили X! Означает ли это, что квадрат полностью аналогичен окружности? Означает ли это, что если колёса сделать квадратными, то телега будет ездить так же, как на круглых? Вот это примерно то же самое, что вы сделали.
Просто, ради интереса, какой компилятор используется и сколько полностью код выполняется?
Компилятор - IAR (на 8К он даже бесплатен, старые его версии), 2-й вопрос - неясен. Очевидно, что код выполняется от момента включения контроллера до его выключения.
У меня комповый бесперебоник есть с полиномом 3-го порядка.
jcxz писал(а):
Очевидно, что код выполняется от момента включения контроллера до его выключения.
Имелось ввиду сколько времени тратится на расчет одной точки. Я привел пример 16,25us.
Но вы забыли одно, dds-синтез таит в себе один минус, и чем частота ШИМ ниже, тем этот минус больше становится. Но это, в принципе, не важно.
Для частотных приводов ШИМ лежит в районе 4кГц, а "восмикрут", который уже куча людей собрало и продемонстрировало, использует таблицу всего в 18 точек.
Вашим способом довольно трудно получить Спойлертакого рода формы сигнала не нравится таблица в 128 точек, и есть куча флеш памяти, используйте таблицу в 256 точек, 512 точек, до хоть в 32кБайта, и с любым разрешением ШИМ, хоть 8 бит, хоть 10 бит, хоть ваши 1600.
PS. Тут в одном проекте, для вывода на ws2812, использовали таблицу в 2048 байт, и не че, хотя можно было бы и на лету рассчитывать, сэкономили бы 2 кило флеша и + потратили бы насколько лишних десятков тактов.
Имелось ввиду сколько времени тратится на расчет одной точки. Я привел пример 16,25us.
Железа готового под рукой нет, а вручную считать лень. Но думаю у меня конечно значительно больше загрузка CPU. Если не изменяет память, то загрузка CPU при работе мотора была 80-90%. Правда это суммарно - туда ещё работа с UART-ами входит и пр., но львиная доля это конечно генерация синусоид.
Вашим способом довольно трудно получить такого рода формы сигнала
На STM8? Так красный - это же обычная синусоида. Она у меня как раз и получается. Синий - похож на векторную модуляцию. Тоже непонятно почему "трудно получить"? На STM8 я его не реализовывал, а на Cortex-M как раз с помощью той же sine() и получаю. Причём для него нужно ещё меньше - всего 2 вызова sine() на квант, а не 3 (как в синусной модуляции), правда с дополнительной математикой. И опять - без таблиц! Причём на Cortex-M у меня в коде 2 варианта работы векторного модулятора: 1)табличный; 2)с использованием 2-х sine(). И 2-й всего примерно на 0.5%-1% больше грузит CPU, чем 1-й (144МГц, ШИМ=10кГц). Всего то... Остальные графики не узнаю кто это.
вариант частотника на базе stm8s003. энкодер пока подключен напрямую, защита от кз ещё не работает (потому что до конца не собрано) и не проверялась (возможно с 817_ми оптронами быстродействие будет недостаточно, надо ещё сделать защиту по скорости изменения напряжения на шине 310V). в этот раз собрал выпрямители вспомогательного ип из диодов 1N4148, не так компактно зато совсем не греются. регулирование частоты сделано примерно так же как и в прошлых конструкциях - переключение таблиц + манипуляции с регистрами ARR и RCR. в качестве эксперимента введена компенсация дедтайма и напряжения на шине DC_310.
подключил к схеме на stm8 однофазный конденсаторный двигатель с двумя одинаковыми обмотками (от дренажного насоса). потеря момента заметна но не очень велика, обороты регулируются, реверс работает. а вот ещё один конденсаторный двигатель с разными обмотками хотя и регулируется но совсем не тянет.
"надо ещё сделать защиту по скорости изменения напряжения на шине 310V"
Просто феноменально крутая идея. Кстати, сам думал о защите силовой части во время отладки с помощью электронного предохранителя на IGBT в цепи +310В. Как Вы думаете насчет этого? По сути, такой предохранитель можно устанавливать временно в процессе отладки, а управлять им классическим трансформатором тока.
Добавлено after 31 minute 7 seconds: А это не хотите попробовать.
Если X1 (в схеме) управлять микросхемой PFC то получиться стабилизатор тока. А тиристоры можно переключать с частотой 0-400 Гц всего. Преимущество в том, что шина постоянного тока стабилизирует именно ток, двигатель возьмет столько ЭДС сколько ему нужно и вычислять V/F просто не нужно как и вычислять синус его вычислит сам двигатель когда будет крутиться. Переключай себе тиристоры неспешно и всего то. Для выключения тиристоров ток от X1 PFC можно временно прервать на 63 мкс.
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
раньше может и да, а теперь не удивлюсь если stm8s003 стоит сопоставимо с какой нибудь RPi или ESP32.
Astrahard писал(а):
Просто феноменально крутая идея.
если не ошибаюсь у "восьмикрута" защита от кз по такому принципу работает.
Astrahard писал(а):
с помощью электронного предохранителя на IGBT в цепи +310В.
если до конденсаторов то бесполезно, если после то конфликтует с необходимостью иметь конденсаторы поближе. плюс потери на предохранителе. и не защищает от замыкания на корпус.
Astrahard писал(а):
А это не хотите попробовать.
Вы эту схему несколько лет назад предложили насколько я помню. неужто за столько времени не попробовали её собрать?
Я ее собрал в Микрокапе. А насчет предохранителя на IGBT, то конечно после конденсатора. А после IGBT предохранителя конденсатор 20-50нФ*630В. Маленький конденсатор не сожжет транзисторы потому, что его энергия как раз соответствует пределу терпимости MOSFET (IGBT) в режиме КЗ.
Таким образом можно сделать частотник вовсе без микроконтроллера.
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
Я понял что говорил Dimon456!!! В случае с stm8 имеем частоту тактирования 16МГц. Частоту ШИМ желаем 10кГц. Отсюда следует что счетчик будет считать до 16000000/10000 = 1600. Таким образом в ШИМ регистр счетчика можно запихнуть значения от 1 до 1600 (может от 0 до 1599 к этому придираться не стоит). ШИМ будет генерироваться с точностью 1/1600. И не более. В счетчик не засунешь 15.45, а только 15. Отсюда следует что проводить вычисления с точностью более 1/1600 можно, но бесполезно. Тогда и считать синус с точностью 16бит не требуется, ибо все равно придется округлять до точности в 1/1600 в конце. Можно считать с меньшей точностью. Как минимум можно не считать полином 7 степени, а взять степень поменьше. Ну или вообще использовать таблицу и DDS. Я профан в приводе, поэтому не могу сказать куда можно использовать освободившееся время процессора.
p.s. Для stm32f0 имеем 48МГц и при 10кГц ШИМ будем иметь максимальное значение счетчика уже 4800 и точность в 1/4800 соответственно. Можно еще прикинуть неточности от пульсации напряжения после конденсатора и выпрямителя. После этого 0.1% точности в шиме покажутся идеалом.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения