Овощехранилище

преобразователь ток/сопротивление

Потребовалось для картофелехранилища изготовить преобразователь ток/сопротивление и при этом, чтобы преобразование проходило через определенную функцию.  Дело в том, что системой хранения картошкой управляли голландские контроллеры «Агровент», в них зашита технология управления системой хранения.

hranil_1

hranil_2

Заказчик приобрел в начале один контроллер с датчиками, а потом купил еще три но без датчиков. Когда стали проектировать под них оборудование, выяснилось что в качестве датчиков голландцы используют термистор с нелинейной характеристикой, и стандартные термосопротивления с токовым(унифицированным) выходом не подjqlen. Но заказчик хотел использовать стандартные датчики 4-20 Ма, так как у родных датчиков если произойдет обрыв провода и конец провода упадет в гнилую картошку, то контролер что ни будь  да будет показывать так как датчики высоко Омные. Ну и стоимость оригинальных датчиков очень высокая. Решил сделать такую систему:

На каждый контроллер приходиться по тридцать шесть датчиков, так что потребовалось сто восемь таких измерительных каналов.

Микроконтроллер выбрал PIC16F627, через два года, по желанию заказчика, расширил температурный диапазон, пришлось переделать на PIC16F877 так как не хватило памяти. АЦП  десяти разрядное TLС1549, потенциометр AD5231, тоже десяти разрядный на 50 кОм.

hranil_3

По ногам чипа как раз хватало обрабатывать пять температурных канала. Когда предложили этот проект я только освоил PIC16F84 и ассемблер, и благодаря вышедшей в это время книги «Устройства управления роботами» автора Майка Предко, начал изучать HI-TECH PICC LITE, и перешел на более продвинутый PIC16F627. Конечно, используй я сразу PIC16F877, то не стал бы городить дополнительные АЦП, так как в нем имеются встроенные. Да, кстати на схеме не указан источник опорного напряжения, какой здесь я применил уже не помню, помню что был очень точный аж до тысячных после запятой.

Принцип работы устройства.

В токовые петли  4-20 мА от температурных датчиков включены прецизионные резисторы: R2, R4, R6, R8, R10, соединяющие вход с землей –на 220 Ом, в них ток по известному закону преобразуется в напряжение в диапазоне от 0.88 вольт до 4.4 вольта, при опорном напряжении пять вольт   . Далее измеренное значение напряжения оцифровывается и обрабатывается в микроконтроллере по определенной функции и, исходя, из полученного результата изменяется сопротивление цифрового потенциометра, выход которого подключен  вместо оригинального датчика.

Начал я с того что cнял с помощью калибратора характеристику датчика температуры, и получил такую таблицу.

Забил эту таблицу в программу для анализа графиков «Advanced Grapher», на рисунке черный график. Не MatCad конечно, но меня вполне устраивает.

hranil_4

Проведя регрессионный анализ, получил такое полиномиальное уравнение, и его график. На рисунке он красный.

Так как это был мой первый проект в этом компиляторе, и попытка запихать эту функцию в чип не увенчалась успехом. То ли не мог включить плавающую запятую, то ли еще что то, давно было. В общем, промучился недели две, но благодаря этому немного освоил компилятор. В итоге решил пойти другим путем.

В этой же программе для анализа графиков, построил графики для платиновых термосопротивлений с токовым выходом ТСПУ, которые нужно было подключить к контроллерам, а также получил таблицу значений сопротивления для оригинального датчика уже используя  полином, полученный ранее. Перевел полученную таблицу сопротивлений в цифру, которую надо отправлять на потенциометр.

Вот что получилось.

Вся таблица есть в архиве.

Из таблицы видно что при -28°С сопротивление оригинального датчика будет равно 44.449 Ом. С АЦП, к которому подключен датчик с токовым выходом, при этой же температуре -28°, мы получим цифру 384, и чтобы на выходе потенциометра было сопротивление как у оригинального датчика 44.449 Ом, надо послать на него цифру 911, ну и так далее.

Для проверки правильности расчетов собрал два стенда. Один на PIC, на нем можно с кнопок задавать число, которое передается на цифровой потенциометр. Этот стенд я подключал к контроллеру  вместо оригинального датчика и прогонял по всему диапазону, сравнивая по таблице, соответствует или нет отображаемая температура на контроллере и число которое должно подаваться на потенциометр.  Расчеты подтвердились.

Второй стенд использовался для выбора потенциометра для проекта и написан на Делфи. Исходник также находиться в архиве. Потенциометры подключаются к LPTпорту. Софт поддерживает потенциометры DS1267, AD8400.

На момент написания программы, я не умел использовать в СИ полиномы, по этому пошел по простому пути и реализовал через оператор CASE.

switch(j) {

case 10 : i=2       ; break;                //            -25,0

case 11 : i=4       ; break;                //            -24,9

case 12 : i=10     ; break;                //            -24,8

case 13 : i=16     ; break;                //            -24,7

case 14 : i=24     ; break;                //            -24,6

case 15 : i=33     ; break;                //            -24,4

Вот что получилось.

hranil_5

hranil_6

 

Весть проект можно скачать здесь.

проги

Система работает уже много лет, заказчик доволен.

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *