Re: Стабилизированный регулятор на базе Arduino с управлением через UART
kvic, спасибо, понял. Придут детали с Али, попробую собрать. Опыта нет, а руки чешутся.
Форум самогонщиков, винокуров, виноделов, пивоваров, бондарей и очень хороших людей |
Alco Distillers → Электронное оборудование → Стабилизированный регулятор на базе Arduino с управлением через UART
с 81 по 100 из 845
kvic, спасибо, понял. Придут детали с Али, попробую собрать. Опыта нет, а руки чешутся.
и в итоге имеем примерно 380 выборок за полупериод.
Корень из 380 приблизительно 19, так что точность можно предполагать в районе 0,07 вольта.
Но это не точность, а шаг квантования, наверное.
Хотел бы уточнить метод измерения напряжения на нагрузке, я так понял среднеквадратичное (RMS), то есть 380 раз за полупериод берется выборка возводится в квадрат, затем все выборки суммируются, делятся на количество выборок, и вычисляется корень квадратный
Александр Волков, совершенно верно.
Так, как на приведённой формуле.
Так, как на приведённой формуле.
тогда еще 2 вопроса
1. При 380 выборках за полупериод 0,01 мСек выборки следуют через 26 мкСек. Позволяет нет время преобразования на контроллере обеспечивать такую частоту, вроде бы в даташите на этот контроллер стоит 112 мкСек, или вы повышали скорость в ущерб разрешения.
2. RMS при 360 выборках разрешением 1 в. и 220 вольтах на выходе дает сумму квадратов 17409780 единиц, среднее число в квадрате 48361 единиц, вопрос по функции извлечения квадратного корня из этого числа
Александр Волков,
по п.1 - просто увеличил частоту выборок.
В процессе экспериментов менял разрядность.
И при 8 и при 10 разрядах точность регулирования примерно одинаковая.
Т.к. в младших разрядах в основном шум.
Если вопрос по поводу линейности преобразования, то нам же нужно не получить некое точное число,
а поддерживать некоторую величину на заданном значении.
по п.2 - не совсем понял вопрос, если по быстродействию, то вполне хватает.
по п.1 - просто увеличил частоту выборок. В процессе экспериментов менял разрядность.
Просто я тоже занимался измерением RMS контроллером, правда я работаю с PIC, но суть не в том, даже при непрерывном преобразовании ADC, время на преобразование на многих контроллерах достаточно велико для скорости 380 (26 мкСек) выборок за полупериод, связано это с зарядом разрядом конденсатора и количеством разрядов.
А так как на ATMEGA328P заявлено 112 мкСек поэтому и вопрос
по п.2 - не совсем понял вопрос, если по быстродействию, то вполне хватает.
Нет не быстродействие, мне интересна функция извлечения корня на ассемблере
функция извлечения корня на ассемблере
Функцию писал не я, нашёл на просторах интернета.
А именно:
https://radiokot.ru/forum/viewtopic.php … 71#p779071
Там она называется CalcSquareRoot.asm
Ассемблер для avr.
Перед использованием проверял разными входными значениями.
Соответствует.
Функцию писал не я, нашёл на просторах интернета.
Почему спрашивал, я пишу на си и функция соответственно такая есть, и если применять ее по окончании периода, все в норме.
Но у меня есть мысль считать не по окончанию полупериода а во время. То есть заменить симистор IGBT модулем(есть у меня парочка таких 100А 600В) и открывать сразу при начале полупериода и после каждой выборки высчитывать RMS как только значение напряжения сравнялось с заданным закрывать модуль.
Так вот, возвести в квадрат, суммировать с предыдущим значением, а потом разделить на количество прошедших выборок, ни каких проблем, каждая операция по одному такту, а вот извлечь корень для последующего сравнения, это уже функция и занимает время.
Так вот какая у меня родилась мысль, например необходимо держать напряжение 100 В, мы берем и 100 возводим в квадрат и храним в переменной, и полученный результат после возведения, суммирования и деления сравниваем с этим значением, а корень квадратный в этом случае не извлекаем. Не знаю може что и получится
Извлечение корня занимает 35 мкс, для предлагаемого алгоритма это очень долго.
необходимо держать напряжение 100 В, мы берем и 100 возводим в квадрат и храним в переменной, и полученный результат после возведения, суммирования и деления сравниваем с этим значением, а корень квадратный в этом случае не извлекаем.
Видимо так будет лучше.
Правда тут ещё деление затесалось.
Его тоже неплохо ликвидировать.
Например, 100^2 = U/n преобразовать в (100^2)*n = U,
где U - сумма квадратов, n - число отсчетов, 100 - необходимое напряжение.
Т.е. предлагаю сравнивать две переменные.
В одну каждый отсчет суммировать квадрат необходимого напряжения,
в другую - суммировать квадраты измеренных величин.
И по итогу сравнения выносить решение на включение/выключение силового ключа.
-----------
Единственно, гложут сомнения насчет способности контроллера обеспечить требуемое быстродействие.
Ведь на пике (в районе пи/4 периода) сетевого напряжения (сеть 220в 50 гц) задержка в 10 мкс добавит лишние 0.69 вольта к заказанному напряжению.
Извлечение корня занимает 35 мкс, для предлагаемого алгоритма это очень долго.
На си это будет еще дольше
Т.е. предлагаю сравнивать две переменные. В одну каждый отсчет суммировать квадрат необходимого напряжения, в другую - суммировать квадраты измеренных величин.
Да наверное можно и так
Единственно, гложут сомнения насчет способности контроллера обеспечить требуемое быстродействие.
Ведь на пике (в районе пи/4 периода) сетевого напряжения (сеть 220в 50 гц) задержка в 10 мкс добавит лишние 0.69 вольта к заказанному напряжению.
Пока не попробуешь не узнаешь, а на пике напруга даже больше 311 В
Пока не попробуешь не узнаешь
Это точно.
Даже если будет добавка, но не рандомная, то фиг бы с ней.
kvic, доброго времени суток
Пришли запчасти и плата с Китая, всё спаял, прошил ардуину. Почти работает. Руки не с того места. Стоп и разгон работают как положено, а стабилизация ни фига. До 20 вольт нормально, даже диод загорается, а выше лампочка на нагрузке вспыхивает и гаснет. Индикатор не работает, мерял вольтметром. Куда копать подскажите пожалуйста. Резисторы проверил, они в норме....
kvic, прошивал через usb. Прога avrdude 3.2, только вместо usbasp выбрал встроенный программатор в меню, фьюзы как у вас сделал на картинке. Сначала стер всё, написал кристалл чист, потом нажал программирование, прошивка зашла.. Программатор заказал, ещё не пришёл, решил так, видимо зря...
Фьюзы отдельно шьются?
вместо usbasp выбрал встроенный программатор
А это как ?
У меня тоже 3.2, но такого я там не обнаружил.
Может используется встроенный в ардуину загрузчик ?
С ним работать, думаю, не будет.
Хотя не экспериментировал.
Руки не дошли.
---
Если есть ещё одна ардуина, то она легко перешивается в программатор.
В Arduino IDE вроде как есть.
Фьюзы отдельно шьются?
Нет, они шьются автоматически.
В настройках можно изменить.
kvic, да встроенный загрузчик, не помню как называется mkl на конце, выбираешь тип программатора вместо usbasp
Александр63, видимо такой вариант прошивки не корректен.
Судя по https://tsibrov.blogspot.com/2018/07/ar … s-isp.html
загрузчик не может изменить Fuse-биты и Lock-биты (в отличие от программаторов)
В логику загрузчика не вникал, но похоже встроенный загрузчик для прошивки не годится.
Видимо он занимает какие-то ресурсы, используемые прошивкой.
kvic, а может обвес не рабочий? Завтра ещё раз всё проверю. Сам симистор или оптопара? Их можно проверить как нибудь?
встроенный загрузчик для прошивки не годится.
2 КБ встроенный загрузчик занимает в памяти. На ютубе один американский дядька сказал. Значит жду программатор и не дергаюсь пока.
Отрицательный результат тоже опыт, чтобы другие на эти грабли не наступили. Спасибо большое за помощь
Александр63, вряд ли.
Симистор и оптопара исправны.
Иначе не было бы работы в режимах разгон/стоп.
Это программная проблема.
Я тут по быстрому погуглил на эту тему.
И:
Вы не сможете (по крайней мере, просто) отключить библиотеку последовательной коммуникации, используемую по умолчанию, чтобы использовать TX и RX прерывания, независимо от того, была она запущена, или нет;
Подпрограмма обслуживания прерывания по переполнению таймера запускается через каждые 16000 циклов в фоновом режиме. Это сделано для работы функций millis() и micros(), даже когда они не используются;
Отсюда предположение, что программы обслуживания последовательного порта и прерывания по таймеру конфликтуют с ними же, но зашитыми в загрузчик.
Вывод - прошивать внешним программатором с предварительным полным стиранием.
2 КБ встроенный загрузчик занимает в памяти
Это ладно, там свободного места ещё не то что вагон с тележкой, а целый товарный состав запихнуть можно.
жду программатор и не дергаюсь пока.
Либо, если есть вторая ардуина, сделать программатор из неё.
Либо, если есть вторая ардуина, сделать программатор из неё.
Есть. Заказывал как раз 2 штуки. Попробую погуглить по теме. Спасибо!
с 81 по 100 из 845