Новичок
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
|
Попробовал собрать пару амперметров. Выяснилось, что требуется тщательно подбирать ОУ - не с каждым экземпляром удается устранить положительное напряжение на выходе при нулевом токе через ТТ и добиться более-менее равномерной характеристики. На реальной активной нагрузке (типа нагреватель, утюг и т.д.) получил достаточную точность где-то +/- 0,5А. Тестил на нагрузках 500, 1000, 1200, 2000 Вт. Из-за недостатка программерского опыта не смог устранить некоторое "плавание" показаний тока вокруг некой средней точки - например показания контрольного мультиметра 2,51А, а показания моего девайса периодически колеблются в пределах 2,23 - 2,76А.
По-поводу ОУ. Для моделирования в Протеусе лучше всего подходит AD8572, а вот с AD823, AD8512 ничего не получается вообще - отказываются работать в качестве выпрямителя. Попробовать собрать на них в железе возможности нет. antonydublin Я пробовал Ваш пример перевести на CVAVR - что-то никак не получается. Видимо не понимаю до конца Ваш замысел. Пробовал считывать раз в 100мс данные с АЦП при помощи таймера, а затем в основном цикле выводить на индикацию - не работает. Поэтому пока оставил код программы как и было раньше. В схеме Протеуса R21 и R22 по 39к. В реальном железе эти резисторы должны быть 68к - видимо это косяки Протеуса - плоховато он аналоговые схемы моделирует. Два встречно-параллельных светодиода - это двухцветный светодиод. При перегрузке выше 35А начинает попеременно мигать цветами. Кнопкой выбираем режим амперметра - среднеквадратичные показания или средневыпрямленные. Вот схема и архив с файлом Протеуса и прошивкой. |
||
Оценка
|
Специалист
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
|
Цитата:
... не смог устранить некоторое "плавание" показаний тока вокруг некой средней точки - например показания контрольного мультиметра 2,51А, а показания моего девайса периодически колеблются в пределах 2,23 - 2,76А.
Цитата:
... видимо это косяки Протеуса - плоховато он аналоговые схемы моделирует.
Цитата:
Я пробовал Ваш пример перевести на CVAVR - что-то никак не получается. Видимо не понимаю до конца Ваш замысел. Пробовал считывать раз в 100мс данные с АЦП... - не работает.
Вообще, стоит использовать лабораторный генератор и осциллограф при отладке схемы. Вы будете уверены в том, что на входе усилителя, что на выходе, и какие показания должны быть на конструируемом приборе. А затем можно подключать датчики. Иначе сложно судить о достоверности результатов.
Последний раз редактировалось antonydublin; 07.09.2015 в 20:59.
|
||
Оценка
|
Новичок
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
|
antonydublin
Я наверное неправильно выразился по поводу 100мс по таймеру. По моим предположениям в течении 100мс накапливаются данные в переменную по формуле value=value+(adc_data*adc_data) , где adc_data это данные ADCW. При частоте АЦП 62,500 kHz делается где-то 480 выборок. Далее вычисляем indication = (sqrt(value/adc_count)), где adc_count это количество выборок. Затем по истечении интервала 100мс значение indication выводим на индикатор. Возвращаясь к теме с ТТ, подключенному к ОУ со смещением на 1/2 питания. Если за Aref принять напряжение питания, то работает следующий код, по крайней мере в Протеусе (за основу взял свой старый код). void sampleADC() // работа АЦП { delay_us(10); ADCSRA |= (1<<ADSC); // запуск АЦП while(!(ADCSRA & (1<<ADIF))); // ждём окончания конвертирования ADCSRA |=(1<<ADIF); // сбрасываем флаг записью 1 adc_count++; // увеличиваем счетчик счётчик количества измерений на 1 if (ADCW<=511) { M = 511-ADCW; } else { M = ADCW-511; }; value = (value + (M*M)); // вычисляем сумму квадратов и записываем в value if (adc_count==480) // если произведено 480 измерений ( ~200мс ) { indication = (sqrt(value/adc_count))*11; // вычисляем среднеквадратичное значение Iporog = indication%10000; I++; // увеличиваем счетчик обновления индикатора if (I>=10) { if (Iporog>=1000) // если показания больше 10 Ампер { count3 = indication%10000/1000; // 1-й разряд - десятки Ампер count2 = indication%1000/100; // 2-Й разряд - единицы Ампер count1 = indication%100/10; // 3-й разряд - десятые доли Ампера } else { count3 = indication%1000/100; // 1-й разряд - единицы Ампер count2 = indication%100/10; // 2-Й разряд - десятые доли Ампера count1 = indication%10/1; // 3-й разряд - сотые доли Ампера }; I=0; }; }; if (adc_count>480) // если произведено более 480 измерений ( ~200мс ) { value = 0; // обнуляем переменную максимального значения напряжения adc_count = 0; // обнуляем счётчик количества измерений }; } Так вот моделируется эта моя писанина отлично, но вот эти строки даже для меня как начинающего писать программы режет глаз: if (ADCW<=511) { M = 511-ADCW; } else { M = ADCW-511; }; Просьба, подскажите плз как это "правильно" пишется. Я графически на бумаге понимаю как эти строчки работают и что именно они выполняют (что-то типа двухполупериодного выпрямителя, если такое сравнение уместно), но на грамотный язык CVAVR оформить не могу - не хватает опыта. |
||
Оценка
|
Знаток
Регистрация: 12.10.2009
Адрес: Тольятти
Сообщений: 231
Репутация: 86
|
Евгений, напрасно ты проигнорировал мое замечание относительно нагрузки для токового трансформатора. Он должен быть нагружен максимально, иначе получается фильтр высоких частот, которых в промышленной сети предостаточно.
Прыгают показания, скорее всего, из-за биений между частотой сети и частотой измерений. Ведь никакого ФНЧ в системе нет - ни аппаратного, ни программного. Для устранения этого явления можно сделать принудительную синхронизацию. Перед началом серии измерений нужно дождаться фронта сигнала при переходе через 0 (например, из минуса в плюс). Тогда серия ляжет на одно и то же место в сигнале и будет одинаковым, даже если конец серии не совпадает с точкой перехода через 0. |
||
Оценка
|
Знаток
Регистрация: 12.10.2009
Адрес: Тольятти
Сообщений: 231
Репутация: 86
|
Проверил схему в симуляторе - и ничего не понял. Напрасно ты не описал идею, как задумано, как оно должно работать! Схема на ОУ вроде бы выпрямляет входное напряжение, так зачем это делать еще раз программно, но уже от средней точки в 511 единиц?? Ведь средняя точка тогда придется куда-то на середину напряжения этого полупериода. Зачем там подается какое-то отрицательное смещение? Ничего не понимаю. Давай-ка дальше сам, дружище...
|
||
Оценка
|
Новичок
Регистрация: 13.02.2015
Адрес: Тула
Сообщений: 13
Репутация: 10
|
iev91
Так ведь ТТ нагружен на резистор 220 Ом согласно даташиту. Про мое сообщение об ОУ со смещением на 1/2 питания и с куском кода про 511 - это к той схеме, с которой я начинал эту тему. А с принудительной синхронизацией попробую, спасибо за подсказку. |
||
Оценка
|
Специалист
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
|
Цитата:
|
||
Оценка
|
Специалист
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
|
Продолжая тему амперметра. Сегодня в руки попался Амперметр АМ-2, но не похожий на тот, что на сайте производителя. Может подделка, а может ранняя модель. Заявленной точности 1% соответствует, правда поверял клещами Unit UT231. Мне помнится, именно такую точность хотел получить ТС. Правда, на шильдике заявлено "индикатор тока", а не контрольный прибор или, тем более, измеритель тока.
Я не поленился и заглянул внутрь АМ-2. В пристёжке схема и фотографии. Хоть я и торопился, но вряд ли ошибся в схеме, она простая до нельзя. ТТ + PIC16F676. Трансформатор тока намотан явно вручную проводом диаметром 0,1...0,14 (изоляцию снимать не стал, а точнее через лакоткань не определишь). Витков много, в навал. Кольцо ТТ судя по скруглённым кромкам или альсифер, или импортный феррит. Сопротивление обмотки 142 Ома. Может, ТС будет интересно, а судя по количеству просмотров темы не только ему. Тем не менее, конструкция рабочая, можно повторять. Только реализовать программную часть. |
||
Оценка
|
Обратная связь РадиоЛоцман Вверх |