Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Регулятор напряжения и тока на Arduino Pro Mini

Форум самогонщиков Автоматика
1 2 3 4 5 ... 57 2
m16 Модератор Тамбов 1.9K 1K
Отв.20  17 Февр. 16, 19:43
Может будет кому интересно...
ЗЫ у меня MEGA2560hed1n, 17 Февр. 16, 17:02
ради интереса посмотрел.  ужаснулся. без обид. 

по сути. АЦП запускаем по тикам от TIMER2 . зачем?  если немного покурить шит на применяемый контроллер , то можно увидеть что один из режимов работы АЦП  - Free Running mode.  это означает режим непрерывного преобразования.
adc.png
Adc. Регулятор напряжения и тока на Arduino Pro Mini. Автоматика.


как это работает :
- приходит по INT0 zero-cross,  запускаем  АЦП в режиме Free Running mode с разрешёнными прерываниями от АЦП ( бит ADIE ) . грянуло  прерывание от АЦП- как только мы считаем из него данные он атоматом запустится на следующее преобразование.  в течение двух полупериодов складываем квадраты значений в один котёл одновременно инкрементируя счётчик прерываний (позже он потребуется для подсчёта среднеквадратичного).

-приходит второй INT0 zero-cross - мы его игнорируем ( а АЦП продолжает колбасить) .

- по третьему INT0 zero-cross  останавливаем АЦП . достаём из котла сумму квадратов, делим на произведение счётчика прерываний (количества отсчётов АЦП ) и масштабирующего коэффициента из полученного извлекаем кв корень.

для более точных измерений нужно пропустить через АЦП несколько перидов сетевого напряжения (тока).
в аттаче книга на русском по атмелам, читайте  и не забывате - плавучка это зло
atЫmel.pdf 2.5 Мб
сообщения удалены (3)
m16 Модератор Тамбов 1.9K 1K
Отв.21  17 Февр. 16, 20:58
по прерываниям - у авров нет приоритета прерываний в общепринятом смысле. есть приоритет исключительно на момент возникновения прерывания. "моментный" приоритет прерываний отражён  в таблице векторов и это нужно учитывать если ты пользуешь прерывания от нескольких источников. приоритеты приходится раздавать вручную.
sevpro Доктор наук Worldwide 769 281
Отв.22  17 Февр. 16, 22:11
для того чтобы предсказать выходное достаточно получить амплитудное значение и знать угол отсечки, т.е. тогда совсем непонятно для чего все эти танцы вокруг расчета среднеквадратичного значения.gari, 17 Февр. 16, 19:55
Вы осциллографом когда-нибудь форму напряжения в сети смотрели? С тех пор как человечество плотно пересело на импульсные блоки питания в сети такой срач творится, который синусоидой язык не поворачивается назвать. Причем эта помойка изменяет свою форму абсолютно непредсказуемо от времени суток. Именно поэтому сколько-нибудь точное понимание того, какая мощность пойдет в нагрузку может дать только интегральный способ измерения среднеквадратического значения напряжения.
сообщения удалены (7)
m16 Модератор Тамбов 1.9K 1K
Отв.23  17 Февр. 16, 23:10, через 60 мин
датчик тока вроде ACS712 попроще то будетdee, 17 Февр. 16, 22:52
упростить схемотехнику можно измеряя напряжение сети напрямую без гальванической развязки, соответственно проц питать через конденсатор-стабилитрон-ldo. а развязку сделать по уарту  на ADUM1201

dee, топикстартер определился с концепцией, давай не будем ему мешать закончить начатое.
сообщения удалены (7)
m16 Модератор Тамбов 1.9K 1K
Отв.24  18 Февр. 16, 08:09
А есть схема такая? Ткните, если не сложно.RRRomaNNN, 17 Февр. 16, 23:27
вот так сделано в РМ2. напряжение сети подаётся на вход ацп с делителя  r7-r8. при такой схеме измерения обсчитывается только положительная полуволна. нужно добавлять либо смещение либо выпрямитель.
rm2.png
Rm2. Регулятор напряжения и тока на Arduino Pro Mini. Автоматика.
sevpro Доктор наук Worldwide 769 281
Отв.25  18 Февр. 16, 08:35, через 27 мин
m16, по блоку питания на Вашей схеме пару советов: D2 заменить на стабилитрон, а D3, соответственно, выбросить; 0,15мкф для С2 очень мало 0,33, а лучше 0,47,  R9 увеличить, иначе его функции защиты диодов теряются. А так, все нормально.
И это, 5 ватт для R9 это сильно дохрена. В вашем случае на нем рассеивается от силы 0,125 Вт при 50 мА потребления PIC-ом или AVR вместе с обвязкой.
RRRomaNNN Студент Москва 25 1
Отв.26  18 Февр. 16, 08:54, через 19 мин
Переформулирую мысль. Существует ли схема без трансформатора, которая может заменить данную?

Регулятор напряжения и тока на Arduino Pro Mini
Регулятор напряжения и тока на Arduino Pro Mini. Автоматика.
sevpro Доктор наук Worldwide 769 281
Отв.27  18 Февр. 16, 09:19, через 25 мин
Существует ли схема без трансформатора, которая может заменить данную?RRRomaNNN, 18 Февр. 16, 08:54
уберите из схемы трансформатор, R32 увеличте до 680 ком, а R3 увеличте до 10 ком. Все остальное оставьте на своих местах. R32 не менее 0,5 Вт
сообщения удалены (7)
m16 Модератор Тамбов 1.9K 1K
Отв.28  18 Февр. 16, 16:42
посчитанное напряжение почему-то начинает сильно колбаситьhed1n, 18 Февр. 16, 16:02
максимальная тактовая  ацп - 200кгц. при делителе 128 - 125кгц 192 измерения на период сетевого (20мс), при делителе 64 - 250кгц перебор, поэтому и колбасит. в буке что я выкладывал есть про это.
количество измерений на период можно увеличить заменив кварц на плате . кварц- 12,8 мгц  делитель-64 тактовая ацп 200кгц (максимально допустимая)  307 измерений на 20мс.

*****************************************************************************************************
в аттаче таблица для прикидки фазового регулятора:  модуля счёта таймера и режима работы АЦП.
требуется ввести  только тактовую частоту процика.
сообщения удалены (8)
sevpro Доктор наук Worldwide 769 281
Отв.29  18 Февр. 16, 21:18
Почему РМ-2 еще никого не тряхонуло?RRRomaNNN, 18 Февр. 16, 21:02
Потому что РМ-2 изолированное устройство само в себе: подключается только к сети и элементу управления (симистр). Если начать подключать неизолированные датчики, другие исполняющие элементы помимо ТЭНа, вероятность поражения током многократно возрастает.
Посмотрите эту тему [Стабилизированный регулятор мощности с внешним управлением]
может что-то для себя почерпнете
hed1n Студент Ижевск 32 5
Отв.30  18 Февр. 16, 21:19, через 2 мин
в аттаче таблица для прикидки фазового регулятора:  модуля счёта таймера и режима работы АЦП.m16, 18 Февр. 16, 16:42
т.е. я правильно понимаю, что измерение надо вести на протяжении обоих полуволн, а потом взять среднее арифметическое? И при cpu 16MHz, ток 50Hz частоте преобразования 16 - нужно сделать не менее 1538 измерений?
m16 Модератор Тамбов 1.9K 1K
Отв.31  18 Февр. 16, 21:53, через 34 мин
т.е. я правильно понимаю, что измерение надо вести на протяжении обоих полуволн, а потом взять среднее арифметическое?hed1n, 18 Февр. 16, 21:19
преобразование нужно вести на чётном количестве полуволн или на N-ом количестве периодов а потом
достаём из котла сумму квадратов, делим на произведение счётчика прерываний (количества отсчётов АЦП ) и масштабирующего коэффициента из полученного извлекаем кв корень.m16, 17 Февр. 16, 19:43
перечитай мой пост
И при cpu 16MHz, ток 50Hz частоте преобразования 16 - нужно сделать не менее 1538 измерений?hed1n, 18 Февр. 16, 21:19
16 - это коэффициент предделителя АЦП а частота АЦП будет = 1000кгц что в 5-ть раз выше допустимой. в таблице примечание есть :
частота тактирования  АЦП  Fclk_adc,khz  не длжна превышать 200кГц

т.е.  для частоты проца 16мгц  в пределах нормы доступна лишь одна частота преобразования - 125кгц
сообщения удалены (4)
hed1n Студент Ижевск 32 5
Отв.32  19 Февр. 16, 11:44
при проходе через "0" первый раз включил

 
 case 0:
          sbi(ADCSRA, ADIE);
          sbi(ADCSRA, ADSC);

...
третий раз выключил
   case 2:
         cbi(ADCSRA, ADSC);
         cbi(ADCSRA, ADIE);
         sqrtUsum = g_nSumSqr_AC / g_nIdx;          //получаем среднеквадратичное
         g_nReal_AC = (int)(sqrt(sqrtUsum)*100);    //корень из среднеквадратичного  

сообщения удалены (4)
ys1797 Доцент Санкт-Петербург 1K 338
Отв.33  19 Февр. 16, 16:23
режим непрерывного преобразования АЦП работает на 100% , проверено на себе. будем пиписками меряться или код покажешь?m16, 18 Февр. 16, 20:12

Где-то это было в теме msg31. Я сначала радовался, как все само замечательно вызывается по готовности, пока не задействовал второй аналоговый вход.
Мультиплексор там ужасно тормозной, как оказалось, и влияние входов друг на друга оказалось значительным.
Поэтому перешел на обычный опрос с защитным интервалом при переходе на считывание с другова ввода.
m16 Модератор Тамбов 1.9K 1K
Отв.34  19 Февр. 16, 16:40, через 18 мин
мультиплексор говоришь, а делал ты  согласно рекомендациям?
ADMUX Register is changed in this period, the user cannot tell if the next conversion is based
on the old or the new settings. ADMUX can be safely updated in the following ways:
1. When ADATE or ADEN is cleared.
2. During conversion, minimum one ADC clock cycle after the trigger event.
3. After a conversion, before the Interrupt Flag used as trigger source is cleared.
When updating ADMUX in one of these conditions, the new settings will affect the next ADC
сообщение удалено
RRRomaNNN Студент Москва 25 1
Отв.35  21 Февр. 16, 11:50
Подскажите пожалуйста, имея описание регистра ADMUX
Регулятор напряжения и тока на Arduino Pro Mini
Регулятор напряжения и тока на Arduino Pro Mini. Автоматика.

можно настроить его присваиванием соответствующего значения.
ADMUX = 01000001
Однако в программе это делается иначе
ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << MUX2) | (0 << MUX1) | (1 << MUX0)
И вот я никак не пойму зачем здесь побитовый сдвиг и побитовое или.
sebra Куратор Республика Коми 146 85
Отв.36  21 Февр. 16, 11:59, через 9 мин
И вот я никак не пойму зачем здесь побитовый сдвиг и побитовое или.RRRomaNNN, 21 Февр. 16, 11:50

Мне так было проще визуально выполнять конфигурацию регистра. Не более того.
сообщение удалено
sebra Куратор Республика Коми 146 85
Отв.37  21 Февр. 16, 12:24, через 26 мин
да, так более наглядно, пытался вникнуть в смысл этих сдвигов - не получается...RRRomaNNN, 21 Февр. 16, 12:01

Погугли, информации более чем достаточно http://www.atmega8.ru/wiki/view/doc.20.html
сообщения удалены (11)
Chatterbox Специалист Калуга 123 60
Отв.38  22 Февр. 16, 18:52
Попалась любопытная библиотека. CyberLib. Ускоряет работу с портами ввода вывода и ацп. По испытаниям до 20 раз. Тут пример многоканального димера с использованием этой библиотеки. Да пусть простит топиктсартер если не совсем в тему.
http://www.cyber-place.ru/showthread.php?p=3371#post3371
сообщение удалено
hed1n Студент Ижевск 32 5
Отв.39  25 Февр. 16, 17:06
Добавил пропуск полупериодов по Брезенхэму. Работает, но у меня в коде вышло

  if (g_bUseBr)
  {
    Error += dY;
    if (Error *2 >= dX)
    {
      Error -= dX;
      cbi(PORTE, 3);        // OFF ножку 3 порта E (pin 5)
      b_NextZero = true;    // почему - то при "RISING", выключении и нагрузке через симистор надо один пропустить
    }
    else
    {
      sbi(PORTE, 3);        //ON ножку 3 порта E (pin 5)
    }

Вопрос это нормально, или у меня с платой что-то не так?
сообщения удалены (4)