Муфты электромонтажные от производителя Fucon

Амперметр переменного тока на ATmega8

Страница 2 из 4
Новичок
 
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
 
25.08.2015 17:36 #11
lllll
Почитал отзывы по датчикам, в частности Allegro ACS712, они очень чувствительны к внешним магнитным полям. Свою конструкцию предполагается использовать в электрическом щитке, где куча силовых проводов. Вряд ли он будет работать корректно. И потом, я посмотрел на эти датчики, и мне не понятно, как такой миниатюрный чип может пропустить через себя 30 Ампер (ACS712ELCTR-30A-T). Сомнения берут.
Оценка
Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов.
Гуру
 
Регистрация: 08.05.2006
Адрес: москва
Сообщений: 8,268
Репутация: 2207
2,193 1,125
40 83
 
25.08.2015 18:33 #12
EvgenyVK
как такой миниатюрный чип может пропустить через себя 30 Ампер
И зря сомневаетесь. Ток идёт не через ЧИП, а через металлическое основание. На нём устаеовлен сам ЧИП через диэлектрик.
В отношении чуствительности к внешним маг. полям - в завершённом исполнеии СЕНСОР помещается в магнитный экран (железную коробульку) и получаем ДАТЧИК.
Последний раз редактировалось lllll; 25.08.2015 в 18:45.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
26.08.2015 02:09 #13
Я считаю, что lllll зря устраивает одиссею по Саргассову морю датчиков.
Холл конечно хорошо - сами пользуемся кольцами Honeywell с чувствительным элементом в разрезе. И стандартный шунт никто не отменял. Но мне кажется, что тут как раз тот случай, когда можно заставить работать изначально задуманный амперметр.

Сопротивление трансформатора тока действительно стремятся сделать минимальным. Вместе с тем, типичные значения коэффициентов трансформации 1:1000, 1:2000 (по току) и т.д. И витков во вторичной обмотке может быть очень много. А значит, и сопротивление её может быть не доли ома, а единицы и десятки Ом. Не знаю, как устроен ASM-030. Если это обычный трансформатор тока и график в даташите соответствует действующему значению напряжения, то, судя по максимуму сигнала 70мВ (40А) на нагрузке 220Ом, он имеет очень большой коэффициент трансформации. Хотя сымитировать нагрузку 30-40 ампер не так сложно, возможно, точности Вашего мультиметра не хватает, чтобы "увидеть" сигнал десятки милливольт на вторичной обмотке трансформатора без усиления.

EvgenyVK, я первоначально не вникал в Вашу схему. Вместе с тем, отчасти dvz прав. Конденсатор С4 стоит убрать - синусоида с выхода ОУ имеет уровень нуля 2,5В, причём эта постоянная составляющая важна. О чём Вы правильно выразились "отсчет значений будет производиться от искусственно созданной "земли". R3 в общем тоже лишний, хотя не мешало бы подфильтровать сигнал керамикой 10-100нФ после R3 - получится RC фильтр. И тут у меня создалось впечатление, что Вы немного неверно понимаете, что именно происходит с сигналом 0-70мВ на выходе усилителя. Предположим, КУ=10, ток 40А. Тогда при положительной полуволне в максимуме амплитуды на АЦП будет 2,5 + 0,07*1,41*10 = 3,5В. При отрицательной полуволне в минимуме амплитуды будет 2,5 - 0,07*1,41*10 = 1,5В (тут несущественно, инвертирующий усилитель или нет, считаем знак сигнала условным). При переходе сетевого напряжения через ноль на АЦП будет 2,5В. Предположим, что синус в сети чистый, неискажённый. Остаётся из вольтметра постоянного напряжения, который у Вас работает, вычитанием "нуля", введением масштабного коэффициента и небольшой постобработкой данных сделать амперметр.

И вот тут, видимо, возникли Ваши затруднения 1) с ADLAR, почему я и рекомендовал не выставлять этот бит, а также 2) усреднением и 3) масштабированием. По первому - понятно, что Вы хотите "автоматически" вычесть 2,5 вольта путём отбрасывания двух последний разрядов в ущерб точности, сдвинув результат преобразования влево, считав только ADCH в знаковое целое. Так почему же Вы считываете ADCW. Плюс ко всему - не так шумят младшие разряды, как о них говорят. Жалко терять два бита.

По второму – правомерно ли, суммируя в абсолютно произвольные моменты времени произвольные точки данных (на графике синусоиды), получить характерное значение тока (напряжения) после усреднения. Если Ваш АЦП тактируется частотой 62500Гц, то выходит, что на замер 1 точки уйдёт 1/(62500/13)=0,2 мс, на 480 точек уйдёт минимум 100мс, т.е. грубо говоря, 5 периодов синуса частотой 50Гц. Причём (это важно) – плотность измерений от точки к точке не будет равномерной, ведь микроконтроллер занят ещё чем-то (на 480 точек может уйти и 200мс), а оцифровка напряжения без аппаратного таймера или обработчика прерываний не обеспечивает пресловутую равномерную дискретизацию. Так что можно лишь догадываться, сколько раз при таком усреднении в нарастающую сумму попадут максимумы, нули, и сколько раз будут суммированы действительно "характерные" точки хотя бы одного периода. И как потом быть с усреднением. А главное – нужно понимать разницу между средним значением тока (напряжения) за период, равным нулю, и действующим значением. Вы, конечно, можете надеяться на "стабильность" временных интервалов между действиями МК, но если у Вас в программе присутствуют if().. else() со своей внутренней арифметикой, то "фаза" Ваших измерений поплывёт. Моё мнение – так делать нельзя.

Третий пункт не менее важен, чем равномерная дискретизация. Нужно точно знать КУ схемы усилителя, благо Вы исследовали её свойства по постоянному току потенциометром. Нужно точно знать величину искусственного нуля, поскольку даже собрав делитель R21, R18 на прецизионных резисторах, после ОУ средняя точка может немного сместиться. А главное – если Вы претендуете на построение даже не измерительного, а контрольного прибора, не стоит использовать в качестве Aref напряжение питания. Дело в том, что если Вы питаете схему от стабилизатора 7805 или ему подобного, при его прогреве напряжение плывёт, причём существенно. К тому же динамическая индикация не может пройти незамеченной мимо аналоговой части МК. Поэтому не стоит экономить, лучше воспользоваться хотя бы недорогим ИОН LM4040, LM336 или им подобным.

Кратко резюмирую. Если интерес к прибору в Вас не угас, попробуйте следующее. Во-первых, уберите С4. Во-вторых, не выставляйте бит ADLAR, частоту тактирования АЦП выберите 500кГц (предделитель на 8) - о точности пока речи нет, главное получить мало-мальски достоверные измерения. В третьих, заведите хотя бы таймер, и по таймеру вызывайте ADC_read() с приблизительно следующей структурой (заранее извиняюсь за огрехи в быстром наброске кода, думаю реализация будет понятна):

Код:
volatile float rms_mas[20] = {};    //20 значений для среднеквадратичного напряжения за период 
volatile int next_rms = 0;    // Фаза не имеет значения
volatile char rms_ready = 0x00;
volatile float rms_middle = 0;    // Переменная усреднения по 10 значениям
volatile char rms_delay = 0x00;

int ADC_read()    // Знаковый или беззнаковый тип - не существенно
{
    int ADC_temp = 0;
    // Делаем преобразование 4 раза для увеличения разрядности АЦП до 11 бит.
    // Наращивание разрядности (oversampling) можно считать своеобразным фильтром
    for (int i=0; i<4; i++)
    {
        ADCSRA |= _BV(ADSC);				
        while(ADCSRA & (1<<ADSC));	
        ADC_temp = ADC_temp + ADCW;
    }
	
    //Увеличиваем разрядность
    ADC_temp = (ADC_temp >> 1);

    return ADC_temp;
}

ISR(TIMER1_OVF_vect)    // Частота тактирования 1МГц
{
    TCNT1 = 64536;    // 1000 раз в секунду, ручной перезапуск
    // Потом оптимизируете на свое усмотрение, скажем режим CTC
    // Измерения должны идти абсолютно плотно, rms_ready - флаг состояния
    // rms_ready=0x01 говорит о том , что ещё не накоплено 20 измерений
    // Да-да, пока что и 20 точек на один период синуса хватит, 
    // чтобы получить приемлемую точность по току

    if(rms_ready == 0x00)
    {	
        rms_mas[next_rms] = adc_res_value*ADC_read() – 2.5;    // Offset = 2.5V
        next_rms++;    // Глобальный индекс массива
    }

    if(next_rms == 20)
    {
        next_rms = 0;
        rms_ready = 0x01;	
    }
}

while(1)
{
    // Вот тут как раз вычисляется среднее среднеквадратичного, простите за тавтологию
    if(rms_ready == 0x01)
    {
        rms_middle = rms_middle + rms_computation(rms_mas);
        rms_ready = 0x00;    //Посчитали и вернули флаг
        rms_delay++;

        if(rms_delay == 0x08)    //Усреднение по восьми значениям
        {
            rms_delay = 0x00;
            rms_middle = rms_middle/8;    // Вот оно, усреднение
			
            if(rms_middle > MAX_current)
                fill_abnormal_voltage();    // Перегрузка !
            else
                fill_voltage(rms_middle);    // Вывод на индикацию
						
            rms_middle = 0;
        }
    }
}

// И самая главная, но не самая изящная функция
float rms_computation(float *mas)
{
    float rms_value = 0;    //Посчитанное значение напряжения (тока)
    for(int i = 0; i < 20; i++)
    {
        rms_value = rms_value + mas[i]*mas[i];
        mas[i] = 0;
    }
    
    return(KOEFF*sqrt(rms_value*0.05));    //Шаг дискретизации 1мс (сеть 50Гц), 0.001*50=0.05
    // KOEFF – масштабный коэффициент
}
Мелкие подробности с инициализацией я опустил, думаю по комментариям понятно. Такой код конечно не оптимален, хотя бы из-за обилия арифметики с плавающей точкой. Но он понятен, я постарался структурно сохранить образ и подобие того шаблона, что Вы привели в начале.

Если возьмётесь доработать такой сценарий, а в датчике тока по-прежнему уверенности нет – сымитируйте его. Если нет лабораторного генератора, возьмите маломощный трансформатор, скажем 220/9 (из блока питания), нагрузите его на делитель, одним плечом которого поставьте потенциометр. Вообще же, существует много способов подать на вход усилителя 50Гц синусоиду 10-70мВ.
Последний раз редактировалось antonydublin; 26.08.2015 в 02:29.
Оценка
Новичок
 
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
 
26.08.2015 17:57 #14
antonydublin
Огромное спасибо за столь развернутый ответ! Вы правильно пишите, по-поводу замеров АЦП переменного напряжения. Действительно, неизвестно сколько замеров приходится на положительную волну, а сколько на отрицательную. Если предположить, что замеры происходят строго через одинаковые промежутки времени относительно искусственой точки отсчета в половину напряжения питания и бит ADLAR выставлен в 1, то разумно предположить, что результат будет равен 0. Ну, по крайней мере, я это себе так представляю. Однако Протеус отлично симулирует, правда показания десятых долей периодически меняются в небольших пределах в обе стороны. Это как раз и говорит о том, что замеры происходят не строго периодически. С другой стороны, Протеус нормально симулирует работу цифровых устройств, а вот с аналоговыми у него как-то не очень получается. Кстати, я пробовал считывать только ADCH, теряя при этом 2 младших бита - показания выводятся без десятых долей. А вот при считывании обеих регистров ADCW, симуляция идет нормально. Теперь про ОУ. Вчера решил подключить потенциометр параллельно резисторам, задающим половину питания на входе. Поймать точку 0 в показаниях крайне трудно и она постоянно плавает. Причем, если включаешь нагрузку (через ТТ течет ток), показания индикатора начинают уменьшаться! Скорее всего затея с ОУ со средней точкой не имеет простого схемотехнического решения - на точность показаний будет влиять и температура среды, и параметры конкретного экземпляра ОУ, и стабильность напряжения питания. Простая схемотехника требуется для того, чтобы засунуть всю схему, включая источник питания на LNK306 и ТТ в 2-х местный корпус на ДИН-рейку. Кстати, огромное спасибо Вам за написание кода программы. В ближайшее время попробую адаптировать его под CVAVR - к сожалению AVRStudio я так и неосвоил. Честно говоря, не столько есть необходимость в амперметрах, сколько хочется грамотно решить задачу, хотя бы в теории. До этого я собирал амперметры на ТТ применяя двухполупериодный выпрямитель на сдвоенном ОУ (вот ссылка на расчет выпрямителя - http://www.rlocman.ru/shem/schematics.html?di=56324 ). Придется вернуться к этой схеме. Но у нее есть, на мой взгляд, несколько недостатков. Первое - сильное влияние применяемых ОУ на конечный результат измерения. Я применял AD8542AS. Второе - присутствие постоянного напряжения на выходе примерно 100-150 мВ. Как от него избавиться - я не знаю. Третье - в зависимости от уровня входного сигнала, выходной сигнал имеет разное значение амплитуды положительной и отрицательной полуволн, и это несмотря на тщательный подбор резисторов R4 и R5 на схеме по ссылке. Соответственно, повторяемость схемы некудышняя - приходится подолгу подбирать коэффициент, устраняющий погрешность показаний на минимальных токах, в формуле для расчета значений этого самого тока. Наверное есть смысл поковыряться с этой схемой, а не изобретать велосипед на одном ОУ.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
26.08.2015 19:10 #15
Интересную Вы подняли тему - прецизионные двухполупериодные выпрямители на ОУ. Та схема, на которую Вы ссылаетесь, при однополярном питании не со всяким усилителем будет работать. Загляните в даташит к AD823 (стр. 17), а также к AD8510/AD8512/AD8513 (стр. 16). Если говорить просто, то применяемые усилители (питание 0, 5В) должны допускать по входам сигнал ниже минусового питания - тут ниже нуля вольт. Т.е. сохранять свои рабочие характеристики, от входного сопротивления до полосы пропускания (при единичном усилении). И вот подобрать такой усилитель с достаточным входным "диапазоном" в отрицательную сторону довольно сложно (за приемлемые деньги). К тому же, при уменьшении напряжения на входе (в отрицательную сторону от нуля питания) ниже некоторого порога всё отчетливее проявляются искажения сигнала на выходе выпрямителя, как то неравенство амплитуд полуволн.

Тут могу посоветовать использовать дешёвые и доступные усилители компании Microchip семейства MCP, в частности MCP602. На практике, они допускают при однополярном питании провал входного сигнала до -300 мВ с сохранением передаточной (частотной) характеристики. Конечно, в зависимости от партии микросхем, искажения начинают проявляться при выпрямлении двухполярных сигналов с амплитудой отрицательной полуволны ниже -250мВ (+-50мВ). И хоть топология многих "обычных" усилителей позволяет находится в линейной области и при более низких напряжениях, но ввиду присутствия во многих из них защитных диодов (clampers) диапазон напряжений невелик. Но зато стоят эти усилители копейки. А искажениями часто можно пренебречь. Аналогично, некоторые LMV358 как бы "разрешают" использовать их в этих целях с более скромным диапазоном сигнала +-50-100мВ.

Мне не понятны Ваши сомнения по поводу искусственной средней точки. Если Вам субъективно не нравится схема на одном ОУ, используйте инструментальный усилитель. Его можно собрать на двух/трёх ОУ, или взять готовый, вроде AD620 или более дешёвого AD623.
Изображения
Тип файла: jpg Temp.jpg (33.6 Кб, 0 просмотров)
Вложения
Тип файла: pdf AD823.pdf (405.2 Кб, 0 просмотров)
Тип файла: pdf AD8510_8512_8513.pdf (428.8 Кб, 0 просмотров)
Тип файла: pdf MCP602.pdf (611.6 Кб, 0 просмотров)
Последний раз редактировалось Admin; 28.02.2016 в 19:44.
Оценка
Новичок
 
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
 
26.08.2015 20:13 #16
antonydublin
Согласен, что применение AD8542 совсем не лучший вариант, но на тот момент эти ОУ стоили совсем недорого и покупал я их "прицепом" - на всякий случай. Уже после решил на них попробовать собрать амперметр. Два амперметра работают почти уже год, показания конечно имеют большую погрешность, получились, так сказать, "показометры". Еще два собраны в корпусах на ДИН-рейку и ждут своего часа. Но вот, то что это прежде всего "показометры" и побудило меня повторно ими заняться. Судя по даташиту, под мои задачи подходит AD8512 и AD823. К тому же в даташите есть примеры двухполупериодных выпрямителей. Только вот AD8512 однополярное питание требует 10В. Осталось только найти эти ОУ за приемлемую цену, либо попробовать предложенную Вами схему на МСР602 и LMV358. Опять же, если смогу купить их.
Оценка
Новичок
 
Регистрация: 20.11.2012
Сообщений: 43
Репутация: 25
15 0
0 0
 
27.08.2015 09:34 #17
специально протеус поставил - вот вам примерчик. Землю транса сразу смещаем в центр диапазона АЦП, (этим же делителем определяем и VREF в 2 раза больше). Сигнал с транса перегоняем в рамки -0.5*VREF +0.5*VREF, в результате суммирования получим 0-VREF. Операционник выкидываем - вход меги имеет сопротивление порядка сотни килоом - и при таком размахе ничего усиливать особо не придется, для пущей уверенности, что ничего не сгорит - можно стабилитрон 5в1 на ногу ADC0 поставить. Считать можно по размаху показаний АЦП (если предположить что получим чистую синусоиду), но правильнее посчитать интеграл функции (площадь под графиком - <время между самплами>*<среднее значение между двумя самплами>) - особенно актуально для импульсной нагрузки - не знаю на какой частоте происходит насыщение магнитопровода, но как то пытался замерять после правда выпрямления диод+кондер, так киловаттный утюг вызывал в разы меньшие показания, чем 20ваттная сберегайка. На комплексной нагрузке возможно и сглаживается - у меня была цель в контроллере 8ми релейного модуля умного дома смотреть потребление на каждый выход.
Изображения
Тип файла: jpg p1.JPG (135.1 Кб, 0 просмотров)
Вложения
Тип файла: rar SAMPLE.rar (109.9 Кб, 0 просмотров)
Последний раз редактировалось dvz; 27.08.2015 в 10:49.
Оценка
Знаток
 
Аватар для iev91
 
Регистрация: 12.10.2009
Адрес: Тольятти
Сообщений: 231
Репутация: 86
74 10
1 0
 
27.08.2015 18:30 #18
Трансформатор тока в идеале должен быть нагружен на КЗ, иначе он проявляет дифференцирующие св-ва. В реале можно нагрузить на минимальное сопротивление, которое дает десятки-сотни миливольт, которые затем аккуратно усилить и измерить. Самодельный тр-р тока я нагружал на 20 Ом, он был маленький, провод тонкий, и витков много (несколько сотен).

Где в программе происходит выпрямление, я не стал копаться, извини. Но описание проекта надо начинать с принципа работы, а не с деталей реализации идеи - идею-то сквозь подробности не видно, она только у тебя в голове.

Если задаться целью, можно успеть измерить за пол-периода сети 10-20 раз (этого достаточно), программно выпрямить, возвести в квадрат, усреднить (см.Хоровиц-Хилл Цифровые нерекурсивные фильтры) и извлечь квадратный корень. Тогда будет RMS значение тока, т.е. истинное. Не знаю, успеет ли все это плавающая математика на Си. 3-байтная вроде бы как раз успевает.

Если в середине шкалы значения опять идут с 0, то очевидно, что где-то потерян старший бит.
Оценка
Знаток
 
Аватар для iev91
 
Регистрация: 12.10.2009
Адрес: Тольятти
Сообщений: 231
Репутация: 86
74 10
1 0
 
28.08.2015 08:59 #19
Еще раз просмотрел код. Похоже, выпрямления переменного тока нет вовсе? Т.е., берутся сколько-то выборок АЦП, складываются, делятся на число выборок, и всё? Тогда это - вольтметр постоянного напряжения на входе. Переменное он может показать только случайно, если частота дискретизации окажется в целочисленном отношении с частотой входного сигнала. В общем случае он должен показать 0. Чтобы превратить его в измеритель переменного сигнала, надо сделать примерно так:
Код:
sred = 0;
for(i=0; i<16; i++) {
s = izmerit(); if(s>512) s -= 512; else s = 512-s; sred += s;
} sred /= 16;
Вообще удивительно, что у тебя симулятор что-то показывает. Попробуй изменить частоту генератора на доли Гц и понаблюдай.
Оценка
Новичок
 
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
 
30.08.2015 10:16 #20
Всем спасибо за ответы. Чем больше пытаюсь вникнуть в суть проблемы, тем больше убеждаюсь в правильности своего первого варианта амперметра на выпрямителе на ОУ. В Протеусе добавил отрицательное смещение на выход ОУ для установки 0 при отсутствии тока. Как только позволит время - попробую в "железе".
iev91
По поводу вычислений значений тока - вычислять среднее посредством суммирования значений АЦП и делением на количество выборок - это был первоначальный не совсем удачный вариант. Это действительно годится для вольтметра постоянного напряжения.
Сейчас работает такой код:
adc_count++; // увеличиваем счетчик количества измерений на 1
M = ADCW; // записываем в М результат преобразования АЦП
value = (value + (M*M)); // вычисляем сумму квадратов
indication = ((sqrt(value/adc_count))*5/9); // вычисляем среднеквадратичное значение, умножаем на коэффициент и выводим на индикацию

Вот файл Протеуса и прошивка:
Изображения
Тип файла: jpg scheme.jpg (519.8 Кб, 0 просмотров)
Вложения
Тип файла: 7z AMP.7z (62.6 Кб, 0 просмотров)
Оценка
Ответ
Страница 2 из 4
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 15:09.
Обратная связь РадиоЛоцман Вверх