воскресенье, 7 июня 2015 г.

Муфельная печь для обжига керамики на микроконтроллере Arduino

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

Со слов заказчика: Нет, оно у меня конечно работает, но как то все не аккуратненько и много проводов и болтается на стенке, а я вот видел у (вставить любое имя) так красиво, экранчик и короче хочу тоже так, ты же там что-то паяешь, почему не сделал мне до сих пор.... бла бла бла.

Дано: Самодельный муфель, выполненный в корпусе старой газовой плиты. Обложен внутри легковесным, тугоплавким кирпичом. В кирпиче прорези для укладки спирали. Спиралей две. Нихром 1.8мм. Диаметр спирали приблизительно 10мм. Сопротивлений спиралей 10 Ом. Длину не знаю, считайте сами. На стене висит блок "УПРАВЛЕНИЯ".
Блок состоит из советского пускателя, маломощного реле управления этим пускателем. Прибора для измерения и контроля температуры. Обе спирали подключены через мощные диоды (1 на каждую).

Термопара в печи рассчитана всего на 600 градусов и как она меряет температуру выше допустимой одному богу известно......

Почему спирали две и почему через диоды: Со слов "заказчика", тот кто это все делал, что-то там городил, крутил, вертел, хотел сделать регулятор но потом забил и осталось как-то так и работает и ладно. Еще в процессе обжига отец иногда отключал 1 из спиралей для каких то своих шаманских целей. Также на блоке управления присутствовал мощный тиристор на 80А 1200В но он не подключен и видимо предназначался для той самой "не рожденной" плавной регулировки.


За дело:

Под рукой много микроконтроллеров Arduino, поэтому делать будем на нем. В последствии перейдем на младшего брата ATtiny и его вполне хватит для такой плевой задачи.
Термопару берем хромель-алюмелиевую, по буржуйски она называется тип "К".
Усилитель термопары на микросхеме MX31855. Есть готовые модули для Arduino. В будущем соберу усилитель термопары на операционном усилителе, этот модуль слишком точный и "жирный" для такой задачи. Точность 0.25 градуса. Корекция температуры холодного спая и прочие плюшки- будем удешевлять :)
Силовая часть - твердотельное реле Fotek SSR-40 da.
Твердотельное реле представляет собой симистор с обвязкой, которая включает и выключает его в момент перехода через 0. Таким образом мы не допускаем помех в сети при подключении и отключении нагрузки. По закону за помехи вроде как даже наказывают, но на практике всем ...... отчасти поэтому у нас мигают в доме лампочки и горит холодильник :)

Любой симистор греется, даже если вы заложите десятикратный запас по мощности. Дело в том что на его переходе падает порядка 1.5 вольт. Умножаем это на силу тока, проходящего через него и получаем ТЕПЛО. Это тепло необходимо как то отвести от твердотельного реле. Для этого я использовал компьютерный куллер с радиатором от какого-то старого 4 пентиума.

UPDATE:С твердотельным реле ничего не вышло. Проблема здесь заключается как раз в том, что спирали подключены через диоды. Твердотельное реле содержит в себе симистор и контроль перехода через ноль, и не способно отключиться из-за того что перехода через 0 не наступает (напряжение выпрямлено диодом). Купил в замен советского пускателя более современный и менее габаритный (КМЭ2510)  и буду собирать все на нем. Диоды выкинуть из схемы нельзя, потому что заказчик упертый и не хочет ничего перематывать и менять. Весь в меня, отец как никак :)
Если у вас диодов нет, то все вышеописанное вполне применимо.

Кому нужна печатка и код - пишите в комментарии.
P.S. PID регулятор решил исключить из кода, потому что инертность печки не высокая, и при отключении спиралей температура начинает падать сразу. А для "грязного" обжига выдерживать температуру в единицы градусов нет смысла. Если в наличии нет модуля MX31855, то можно переделать на операционном усилителе, пишите может мне будет не облом...

вторник, 28 апреля 2015 г.

ЛАБОРАТОРНЫЙ БЛОК ПИТАНИЯ. (часть 2. Паяльная станция.)


Начнем с паяльника. В первой части был описан паяльник, купленный для разработки блока.
Пришло вдохновение и я занялся его тестами. Во-первых, через ардуино был подключен паяльник к блоку питания через MOSFET тразистор IRFZ44n. За основу я взял эту статью. Схему прикладывать не буду, так-как никаких изменений в схеме подключения самого паяльнике нет.

Отладка проводится следующим образом: с компьютера приходит значение в диапазоне от 0 до 255 (в ардуино 8 битный PWM), задающее время открытия транзистора. Тестер с термопарой отображает температуру. Надо сказать, что данный полевой транзистор не совсем подходит для этого, так как полное его открытие происходит где-то при 12в. и теоретически 5в ардуино может и не хватить, тогда транзистор будет греться. Однако в даташите указано, что при 4.5в транзистор открывается и способен пропускать токи до 10А (всего по даташиту 44А).
Наш паяльник имеет мощность 50W при 24В, что в среднем дает максимальное потребление всего в 2А. Для уверенности я "потыкал" осциллографом на сток и затвор и увидел четкий квадрат без завалов. Частота на PWM всего 500Гц.
Итак - данный транзистор вполне подходит для наших задач, не требует драйвера и греться не должен. В результате тестов он теплый. Единственное, что при начальном включении "на холодную" транзистор греется, так-как сопротивление холодного паяльника всего около 50 Ом.

Далее нужно откалибровать установку. Примотав термопару замеряем и записываем соотношение температуры паяльника и скважность ШИМ. Это долго, неудобно и нужно постоянно усреднять значения... В итоге решил автоматизировать процесс.

В наличии имеется модуль усилителя термопары на микросхеме MX31855. Модуль имеет SPI интерфейс, библиотеку для программирования, встроенный термодатчик окружающей среды для компенсации температуры холодного спая.
Термопару подключаем через него к ардуино. К ней же подключаем паяльник и через резистивный делитель - терморезистор встроенный в паяльник. (у меня резистор на 290кОм). Значение с делителя заводим на аналоговый вход ардуино.

Далее следует говнокод упрощенный скетч вывода значений со всей этой конструкции:

#include "SPI.h"
#include "Wire.h"
#include "Adafruit_MAX31855.h"


// Инициализация контроллера термопары
// DO=3 , CS=4, CLK  5
Adafruit_MAX31855 thermocouple(5, 4, 3);
double tS = thermocouple.readInternal();
String myString;

const int SolderPin = 9;      // затвор MOSFET
int sensorPin = A0;           // резистивный делитель терморезистора
int _PWM_ = 0;
double sensorValue  = 0;
double all_sens = 0;
double all_tT = 0;
double tT = 0;
int iteration = 1000;        // количество итераций
int badit=0;


void setup()
{
  Serial.begin(9600);
  pinMode(SolderPin, OUTPUT);
}

void loop()
{
  all_sens = 0;
  all_tT = 0;
  badit=0;

  analogWrite(SolderPin, _PWM_);

  // проверяем подключен ли контроллер термопары
  if(thermocouple.readInternal() == 0)
  {
    Serial.print("no termosensor\n");
  }
    // проверяем подключена ли термопара
  if(thermocouple.readCelsius() == 0)
  {
    Serial.print("no thermocouple\n");
  }


/*
  if (Serial.available())
  {
    _PWM_ = Serial.parseInt();

  }
*/
  // считываем в цикле значения температуры паяльника и сопротивления терморезистора
  for(int i=0;i<iteration;i++)
  {
      sensorValue = analogRead(sensorPin);
      all_sens += sensorValue;
      tT = thermocouple.readCelsius();
      // Библиотека работы с термопарой возвращает NAN при ошибке
      myString = String(tT);
      if(myString != " NAN")
      {
        all_tT += tT;
      }
      else
      {
        // Увеличим счетчик ошибок измерения температуры
        badit++;
      }
  }
  // Выводим значение на экран
  Serial.print("TT: ");
// Делим сумму замеров на количество итераций минус ошибки для получений среднего
  Serial.print(all_tT / (iteration-badit));         
  double house_temp = thermocouple.readInternal();
  Serial.print("  TH: ");
  Serial.print(house_temp);
  Serial.print("  TR: ");
// Делим сумму замеров на количество итераций для получений среднего
  Serial.print(all_sens / iteration);       
  Serial.print("  PWM:");
  Serial.print(_PWM_);
  Serial.print("  IT:");
  Serial.print(iteration-badit);
  Serial.print("\n");

  // Ограничим значение PWM для того чтобы не сжечь паяльник
  // В моем случае 80 вполне хватило для разогрева паяльника до 400 градусов
  if(_PWM_ > 80)
  {
    while(true)
    {
    }
  }

  _PWM_++;
}

По результатам тестирования получаем таблицу зависимости сопротивления терморезистора от температуры паяльника. И используем эти значения для дальнейшей регулировки и индикации.

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

Всем удачи в экспериментах....


Дополнение: В качестве силового транзистора, решено использовать транзистор от компьютерного блока питания, снят с дежурки. Во-первых он Logic Level, то-есть полностью открывается при логической единице, во-вторых у меня куча убитых блоков, почему бы не брать его оттуда. Я использую 45N03LT (30 В 45А)

среда, 15 апреля 2015 г.

Ремонт УФ лампы




Поймал странный глюк на ультрафиолетовой лампе. Все началось с того, что она перестала включаться по таймеру. Разобрал, и обнаружил короткое замыкание на питании таймера. Причиной тому был пробитый стабилитрон. Не мудрено, потому-что конденсаторный блок питания, коим она оборудована, нельзя включать без нагрузки, а когда тумблер установлен в положение "ТАЙМЕР" но сама кнопка таймера не нажата - нагрузка отсутствует и стабилитрон вынужден рассеивать всю мощность БП на себе.

Стабилитрона под рукой не было и пришлось его просто выкинуть. Когда он вновь был установлен начались "чудеса на виражах". Лампа то включалась по таймеру, то нет. Нужно было переключить тумблер в нейтральное положение или в положение "всегда включена". потом вернуть на таймер и запустить его снова.

Со временем ситуация лишь ухудшалась. Терпению пришел конец. Перерисовав схему таймера выяснил что он включен по классической схеме:









(рис. 1)


Детали на рисунке несколько отличаются по номиналам но в целом все один в один.

Сначала я избавился от конденсаторного блока питания, и поставил обычный трансформатор. Ситуация не изменилась. Затем я заменил времязадающий (на схеме С1) и фильтрующий конденсаторы (на схеме не указан, стоит параллельно батарее G1). Это тоже ничего не изменило.

В конце концов ничего не оставалось, как заменить саму микросхему и о чудо......

Удачи в ремонте!

UPDATE:
Лампа отложена в запас, а взамен куплена LED+CCFL - жена довольна и к старой возвращаться не хочет. Для тех кто будет смотреть в сторону такой новомодной лампы, не ведитесь на рекламные слоганы. Лампа типа ТАКОЙ не соответствует надписи 36w - это лишь ее название, призванное вводить в заблуждение девочек.  Реальная ее мощность 24 Ватт. Спираль CCFL 12 Ватт и 12 светодиодов по 1 Ватт. Аналогичная ситуация и в подобных лампах с надписью 48W - тоже рекламный ход. К слову сказать в моей лампе блок питания 3А 12В и очень легкий и хлипкий, не разбирал еще но уверен что долго он не проживет.
Может кому то будет полезно, хорошее видео по ремонту аналогичной: ССЫЛКА



воскресенье, 29 марта 2015 г.

ЛАБОРАТОРНЫЙ БЛОК ПИТАНИЯ. (часть 1. Мечтательная.)

Задача: Создание лабораторного блока "питания" с блек-джеком и плюхам.

Изначально все началось с того, что я приобрел бормашину типа DREMEL, но ЛУЧШЕ.
Было куплено 2 комплекта, себе и отцу. Я решил себе блок питания сделать самостоятельно, не люблю я трансформаторы китайские а отец сказал "пока ты все это сделаешь я умру, я куплю комплект" - вот что из этого вышло (коментарий пользователя с ником Alastar Duke Verne)

В итоге мне прислали аж 2 блока и извинения, и вообще, редкий человек заботящийся о своих клиентах. "Респект ему и уважуха"

Вернемся к нашим баранам. Я решил что импульсный блок питания я куплю у китайцев. Регулировку оборотов делать было лень на такие токи (кушает и 10 ампер эта машинка если диск болгарочный поставить и придавить и больше съест если дать...) и я купил готовый DC-DC Step down.  15A 3-32V по заверениям китайцев. Перепутав полярность на входе он успешно сдох. И я снова заказал новый, паять по прежнему было лень. Потом уже я разошелся, насмотрелся, начитался, и понял что я и сам бы такой собрал, но что сделанно то сделанно. Заказан новый DC-DC на этот наз 12А 08-28V с регулировкой напряжения и тока(см ниже).

Потом я понял что мое советское ЛУДИЛО пригодно только для терморектального криптоанализа и начал засматриваться на паяльную станцию, сначала без индикации, потом с ней, а потом и фен вроде нужен и. СТОП думаю. БП ЕСТЬ, контролеры есть. Надо делать.
Паяльник и фен заказал тут. Хорошие цены, море отзывов, очень быстро шлют.



Функционал :

Напряжение регулируемое в диапазоне 0-30V
Ток до 10А с возможностью ограниченя по току.
Защиты, термоконтроль, софтстарт, принудителный обдув, бла бла бла все как у людей.

Встроенная паяльная станция (фен, паяльник)
Встроенные маломощные БП на стандартные напряжения типа 3.3, 5, 12, .... там видно будет.
Генератор сигналов типа пила, синус, прямоугольник.....сигналов из космоса, и нейронных сигналов.
Встроенная розетка с симисторной регулировкой мощности (паяльник, лампочка, утюг, дрель, .......... вибратор в конце концов)
USB для сопряжения с PC + софт для PC с полным управлением и мониторингом всех плюшек.
Li-ion Charger - ибо есть в наличии спец микруха - чё б не ткнуть внутрь!
Экран само собой для вывода всей этой инфы
Дырка разъем для подключения тестера через БП в комп (см. пост выше)

В наличии:

Корпус от советского усилителя АМФИТОН (Уже разобрал. Нет, не жалко)
Источник питания: Китайский блок питания для светодиодных лент 24в(+-10%) 12а.
Микроконтроллер - ATMEGA328, ATtiny8, ATtiny13 (а скорее всего ARDUINO NANO)
LCD Экран
20х4 - думаю хватит, хотя функционала многовато, может изменится выбор.
DC-DC Buck понижающий преобразователь 0.8 - 28 (возможно этим ограничимся и изменим диапазон регулировок в ТЗ)
Подстроечники заменю на цифровые резисторы типа MCP41050 (50кОм) + Энкодеры (хочется мне щелкать). Цифровые резисторы имеют 256 ступеней, получим 28v -0.8v / 256 = 0,10625v на 1 щелчок энкодера. И по току 10 / 256 = 0,03А на щелчок. Для начала хватит. (можно поставить 2 резистора, тем самым увеличив точность, но для сельской местности...........)
Фен, Паяльник.
Датчики тока на ACS712

Возможные модификации:

Есть в наличии IR2153, MOSFET IRFZ44 - возможно соберу BUCK на них.
Есть LM2596-adj - возможно они пойдут на выход дополнительных клемм не регулируемого питания на распространенные напряжения питания 1.2, 1.8, 3.3, 5, 12 вольт, а возможно эти питания будут реализованы кнопками пресетами.
Может быть какую то простую прозвонку добавлю. Иногда тестер слишком умен для простой прозвонки.



Отчего столько всего в 1 корпусе? Не надежно, не транспортируемо, низкая отказоустойчивость из-за "все в одном"..............
Во-первых, экономия места на рабочем столе. Я не "паяльщик", я "компьютерщик" и все это хобби и "чтобы отвлечься иногда". Отсюда следует не предназначенный для полноценной лаборатории стол и окружающее пространство. Все рабочее место занято 3 большими мониторами и тыкать между ними кучу коробочек глупо, а один универсальный "шайтан-ящик" с кучей возможностей встал бы под монитором и не мешал.
Во-вторых, в выбранном корпусе куча места. Блок питания занимает 1/4 часть, а ресурсы надо использовать рационально.


Пока все, ждем всех деталей. Пока верчу все части на макетках, примеряюсь к корпусу. Читаю матчасть.

To be продолжение.......

пятница, 6 марта 2015 г.

Мультиметр UNI-T 61e

Приобрел мультиметр UNI-T 61e. Прочитал статью про модификацию: http://we.easyelectronics.ru/ACE/dorabotka-napilnikom-multimetra-ut61e.html

Хотел заказать микросхему FT232RL, но вспомнил, что у меня есть Arduino Nano v3, который и так имеет эту микросхему.

Отрезал DB-9, подключил к Arduino следующим образом:

Зеленый и Желтый к земле (GND)
Оранжевый к питанию (+5v)
Коричневый к 13 пину
Белый - не используется.

Залил в ардуино скетч:

#include <SoftwareSerial.h>

// 3й параметр (true) означает инвертирование сигнала

SoftwareSerial mySerial(13, 12,true);
void setup()
{

  Serial.begin(19200);


  mySerial.begin(19200);
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

И Все заработало :) Заказ отменен, китайцы не довольны!


P.S. Планирую разбирать и дорабатывать дальше.
Возможно выведу контактную группу на разъем для подключения к тестеру и увеличив число проводов вынесу описанный в вышеупомянутой статье функционал на внешний микроконтроллер. Жаль "софтварную" подсветку не "запилить" :)

To be continued....