С 23 февраля
Форум самогонщиков Сайт Барахолка С 23 февраля

Аппаратная платформа Arduino для автоматизации наших процессов

Форум Оборудование Автоматика
1 ... 60 61 62 63 63
Sonologist Профессор Москва 2112 703
Отв.1240  16 Мая 19, 09:58
Друзья, кто петрит в математике, растолкуйте мне про вот какую проблему, пожалуйста. Играюсь с Ардуиной на предмет создания стабилизатора мощности. Прислали мне табличку зависимости времени открытия триака от процента мощности, подаваемой в ТЭН. Сунул ее в Эксель с целью вывести формулу зависимости. Там - как обычно: диаграмма->линия трэнда (полиномиал)->вывести формулу. Подставляю ее в столбец "D" и получаю какую-то хрень. В математике я совсем не силён, очевидно, что хрень из этого и проистекает. Но что я сделал неправильно? Заранее спасибо!
Zaderjka.xls 29.5 Кб
m16 Модератор Тамбов 1835 990
Отв.1241  16 Мая 19, 11:18
вот тебе формула
rms.png
Rms. Аппаратная платформа Arduino для автоматизации наших процессов. Автоматика. Оборудование.

    спич в том что расчёт по этой формуле займёт у процессора много времени но это не проблема. я , когда строил свой РМ, по этой формуле построил таблицу зависимости выходного напряжения  РМ с шагом в 1 вольт от угла открытия триака. результат  оказался плачевный - в диапазоне  80-200в  напряжение на тэне  поддерживалось с точностью 1-8в. естественно меня это не утроило , долго ковырялся, перепроверял пока не сунул  щуп осциллографа в сеть. нет там синуса, точнее изуродованный  синус. в этом как раз  и  крылась  причина хреновой  работы  РМ. эта  формула  справедлива  для  чистого синуса, а в сети мы  имеем то что  имеем.
    в  результате  реализовал  следящий  алгоритм [сообщение #12691149]  , напряжение  на тэнах  поддерживается  с точностью 1в , трёхфазный  РМ  пашет третий год.
 
Sonologist Профессор Москва 2112 703
Отв.1242  16 Мая 19, 12:52
Вот как раз из-за "драной" синусоиды в сети мне померещилось, что данная таблица поможет хоть как-то приблизиться к желаемому результату без лишних пересчетов градусов  в радианы и отрезки времени: все уже дано и можно напрямую оперировать с micros(). Однако попытка вывести формулу в экселе потерпела неудачу. В принципе, можно тем же свитч-кэйс перебрать сотню позиций и сделать нужный пересчет, просто показалось, что с формулой получится изящней. Касательно обратной связи - думаю не изгаляться с многократыми измерениями с последующим пересчетом в среднеквадратичное значение. На мой взгляд проще на ТЭН повесить или LTC196x (реальное напряжение) или сразу ADE7754ARZ (реальная мощность) и от их показаний плясать - дальше арифметика уже простая (главное отловить дельту между детектором нуля и самим нулем). Или я тут что-то опять напутал?
m16 Модератор Тамбов 1835 990
Отв.1243  16 Мая 19, 13:27, через 36 мин
В принципе, можно тем же свитч-кэйс перебрать сотню позиций и сделать нужный пересчет, просто показалось, что с формулой получится изящней.Sonologist, 16 Мая 19, 12:52
время от времени кривизна синусоиды  в сети  меняется , и какой  формулой это можно описать?
изящно это двадесятка строк на асме - и весь регулятор

Скрытый текст
//*****************************************************************************//
// вычисление напряжения стабилизации
// if U_ctrl = U_rms  TOP_T0 = TOP_T0
// if U_ctrl < U_rms  TOP_T0 = TOP_T0 + step_fase
// if U_ctrl > U_rms  TOP_T0 = TOP_T0 - step_fase
//*****************************************************************************//
      sbrc      psw, m_pw_zero   // nriac not onn if power < 5%
      rjmp   ml2
.........................................
      dec      D0l
      cp      D0l, U_rms   //  E0 - ctrl  B0 - rms
                  //  U_ctrl - U_rms

      breq   equal         //  U_ctrl = U_rms
      brcc   ctrl_over
.........................................
ctrl_under:   adi_w      DELTA, step_fase   //  U_ctrl < U_rms

      cp_w      DELTA, Z

      breq   equal
      brcs   equal

      mov_w      DELTA, Z

      rjmp   equal
.........................................
ctrl_over:   subi_w      DELTA, step_fase   //  U_ctrl > U_rms
      tst_w      DELTA

      breq   equal
      brpl   equal

      clr_w      DELTA   
.......................
equal:      mov      tmpA, U_rms
      sub      tmpA, U_ctrl

      brmi   neg_delta
      cpi      tmpA, 10
.......................
positiv_delta:   brcs   error_not
.......................
error_yes:   error_on
//      rjmp   ml2
//*****************************************************************************//


На мой взгляд проще на ТЭН повесить или LTC196x (реальное напряжение) или сразу ADE7754ARZ (реальная мощность) и от их показаний плясатьSonologist, 16 Мая 19, 12:52
можно конечно и так, но у меня одна tiny13a  со всем этим справляется
Sonologist Профессор Москва 2112 703
Отв.1244  16 Мая 19, 14:04, через 37 мин
Про формулу, безуспешно пытающуюся описать деформированную синусоиду - понятно. Речь шла о другом: есть таблица (доля мощности и время открытия триака), хотел найти формулу зависимости второго от первого. Дальше - простая арифметика. Но эксель выдал белиберду.
За код спасибо, но в нем не разобраться... ассемблер для меня - совершенно черный ящик. Даже не знаю, как к нему подходить. Можно ли повторить то же самое на "недобитом" ардуиновском С? Или скетч выйдет намного длиннее и неизящнее? "Рожа" - как я понимаю, - это "D"?
Tomat7 Магистр Черноморская губерния 203 119
Отв.1245  16 Мая 19, 14:34, через 31 мин
Играюсь с Ардуиной на предмет создания стабилизатора мощностиSonologist, 16 Мая 19, 09:58
Чо там играться, тема изъедена вдоль и поперек - [Регулятор напряжения и тока на Arduino Pro Mini]
Бери да делай.
Sonologist Профессор Москва 2112 703
Отв.1246  16 Мая 19, 15:02, через 28 мин
Чо там играться, тема изъедена вдоль и поперекTomat7, 16 Мая 19, 14:34
Неужели пришло в голову, что я это не читал? И почему обязательно надо брать да делать? Есть желание сделать самому. Криминал?
m16 Модератор Тамбов 1835 990
Отв.1247  16 Мая 19, 15:06, через 5 мин
делать не обязательно, а почитать чтобы на грабли не наступать оно того стоит.
Tomat7 Магистр Черноморская губерния 203 119
Отв.1248  16 Мая 19, 15:16, через 10 мин
Неужели пришло в голову, что я это не читал?Sonologist, 16 Мая 19, 15:02
Хмм... Неоптимальность расчета по таблице в той теме обсуждалась несколько месяцев и единогласно была отвергнута.
Хочется пройти по "своим" граблям?  ;D  Знакомо...  ;)
Sonologist Профессор Москва 2112 703
Отв.1249  16 Мая 19, 15:19, через 4 мин
почитать чтобы на грабли не наступатьm16, 16 Мая 19, 15:06
Да уж по второму кругу пошел Улыбающийся К сожалению, не все ухватываю, ибо не спец. А разобраться хочется.
Gurrd Специалист Курган 122 131
Отв.1250  21 Мая 19, 14:29
Подставляю ее в столбец "D" и получаю какую-то хрень. В математике я совсем не силён, очевидно, что хрень из этого и проистекает. Но что я сделал неправильно?Sonologist, 16 Мая 19, 09:58
В математике тоже не очень силен, поэтому может чего-то недопонял... Но в экселе можно увеличить точность (в смысле разрядность) коэффициентов полинома.
Выставив 16 знаков после запятой, твоя формула превращается в "y = 0,0000000000000002x6 - 0,0000045736282693x5 + 0,0011434070609377x4 - 0,1121341871353250x3 + 5,3860574789918600x2 - 192,2446563592120000x + 9 446,8272127805000000". Точность значительно возрастает.
Правда для ардуины это не очень подходит, т.к. у нее точность 6 или 7 знаков после запятой. Могу ошибаться, ибо не очень (или "очень не" ) ардуинщик)))
surami56 Специалист СПб 130 48
Отв.1251  21 Мая 19, 20:06
Правда для ардуины это не очень подходит, т.к. у нее точность 6 или 7 знаков после запятой.Gurrd, 21 Мая 19, 14:29
Есть и 32 разрядные данные.
Типы данных в Ардуино:
boolean (8 бит) - простое логическое true/false (правда/ложь)
byte (8 бит) - unsigned число в диапазоне от 0-255
char (8 бит) - signed число в диапазоне от -128 до 127. В некоторых случаях компилятор будет интерпретировать этот тип данных как символ, что может привести к неожиданным результатам.
unsigned char (8 бит) - то же что и ‘byte’; для ясности кода рекомендуется вместо этого типа данных использовать ‘byte’.
word (16 бит) - unsigned число в диапазоне от 0 до 65535
unsigned int (16 бит)- то же, что и ‘word’. Рекомендуется заменять типом данных ‘word’ для сокращения кода и ясности
int (16 бит) - signed число в диапазоне от -32768 до 32767. Один из самых распространенных типов данных, который очень часто используется для объявления переменных в скетчах-примерах для Arduino, встроенных в Arduino IDE
unsigned long (32 бита) - unsigned число в диапазоне от 0-4,294,967,295. Чаще всего этот тип данных используется для хранения результатов функции millis( ), которая возвращает количество миллисекунд, на протяжении которого работал ваш код.
long (32 бита) - signed число в диапазоне от -2,147,483,648 до 2,147,483,647
float (32 бита) - signed число в диапазоне от -3.4028235E38 до 3.4028235E38.
Gurrd Специалист Курган 122 131
Отв.1252  22 Мая 19, 08:30
Есть и 32 разрядные данные.surami56, 21 Мая 19, 20:06
Дело не в разрядности (кол-во бит), а в точности (кол-во знаков после запятой).
Вот про точность ардуины (мысля, не моя а копипаст):
Точность дробных чисел типа float составляет 6-7 десятичных знаков. Здесь имеется ввиду общее количество цифр, а не количество знаков после запятой. В отличие от других платформ, где более высокой точности можно добиться за счет использования типа double (до 15 знаков), в Ардуино тип double имеет такую же размерность, как и float.
m16 Модератор Тамбов 1835 990
Отв.1253  22 Мая 19, 10:04
ерундой занимаетесь товарищи, в целочисленке  считать нужно , в целочисленке.
Sonologist Профессор Москва 2112 703
Отв.1254  24 Мая 19, 17:54
Короче, народ мне помог справиться. Формула не понадобилась. Программа ([Маленький скетч для управления триаком Ардуиной.]) исправно и быстро работает с таблицей. Как будет выглядеть в железе - посмотрим: до него руки никак не дойдут Грустный.
PS: Кстати, работа исключительно с целочисленкой.