Являясь мастером по ремонту цифровой техники и ноутбуков, появилась острая необходимость в Инфракрасной(ИК) паяльной станции, но так как готовые комплекты стоят у нас в Украине непомерно дорого, то было вынесено на обсуждение два варианта:1)Собрать с нуля 2)Собрать из блоков. Я выбрал второй вариант, так как он менее затратный по времени и деньгам, и в тот же день мною был преобретен, нижний преднагреватель плат AOYUE Int 883. Как по мне, дешево и сердито, и в принципе для моих задач самое оно. Но в процессе работы были выявлены недостатки и «баги» и было принято решение по устранению и модернизации.
Под катом много фото, цель статьи показать как легким способом можно связывать сложные устройства с пк и автоматизировать процесс.
Трафик! Много фотоматериала!

Начнем с обзора самого преднагревателя.

AOYUE Int 883


Первичное описание позаимствовал тут, так как в принципе повторять одно и тоже нет смысла
Корпус добротный, сделан из не тонкого металла (в основном железо, передняя панель — алюминий, отражатели тоже алюминиевые), не прогибается, не скрипит, качество обработки и покраски хорошее, снизу и сбоку имеются вентиляционные отверстия. Снизу четыре резиновых ножки, «клиренс» — около 2 см, т.е. греть стол он точно не будет. Сетка между кварцевым нагревателем и рабочей зоны алюминиевая, с двумя поперечными удерживающими стальными «струнами» — это плохо, т.к. ее будет выгибать и пучить, что и продемонстрировалось в работе. Спереди распологается регулятор температуры, гнездо для подключения внешних термопар и выключатель питания, сзади — шнур питания и предохранитель.

Далее, нагреватель. Нагреватель из кварцевых трубок, мощностью 1,5 кВт (чего вполне достаточно), размер нагревателя 260х295 (то что заявлено в характеристиках — это поле сетки). Такой размер подойдет для больших плат, в том числе и полноразмерных декстопов. Отражатель алюминиевый, крепится на алюминиевых же скобах к дну нагревателя, тепла вниз и по бокам выделяется не много, корпус лишь чуть нагревается.


Средство управления — ПИД регулятор с 3 режимами работы и 3 термопары: внутренняя на нагревателе и две внешних на гибком шланге.
0 режим позволяет устанавливать температуру по внутреннему датчику (400 максимальная), при этом 2 внешние термопары могут служить для мониторинга (в процессе работы можно посмотреть их данные).
1 режим устанавливает температуру по обратной связи с внешней термопарой, при этом термодатчик можно разместить, скажем, на/под плату. Остальные датчики — мониторинг.
2 режим — работа по термопрофилю, термопрофиль всего навсего один, но с 6 шагами. Не очень понятно такое решение разработчиков — лучше бы сделали 2 термопрофиля по 3 шага. Максимальная длительность каждого шага — 200 сек, температура 250. Т.е. общая длительность термопрофиля может составлять 20 мин, этого достаточно для всех задач.
Работа ПИД-а мне не очень понравилась, в целом, для целей преднагрева вполне подойдет, но могло бы быть и лучше. Есть огрехи в регулировании температуры, например если задавать большую скорость нагрева, то возникает «перерегулирование», возможно связанное и с инерционностью нагревателей (что странно, вроде бы кварц лучше керамики в этом плане, но по крайней мере с простейшим ПИД-ом моя станция на керамике работала лучше).
Внешние термодатчики выполнены в виде гибких металлических шлангов, из конца шланга торчит провод с сплавом. С одной стороны удобно, гибкие шланги позволяют без проблем крепить датчик на плату, с другой стороны, недоработка в виде торчащего провода. Еще не понравилось то, что гнездо датчиков спереди, иногда мешаются.

Изначально термостол показывал температуру в «попугаях». На плате регулятора есть подстроечники для каждого датчика. Так что проблем с калибровкой не должно возникнуть.
Качество пайки и монтажа электроники вполне сносное (для Китая), симисторы (их два, BTA20) расположены на алюминиевом радиаторе (термопаста присутствует) большой площади, к тому же обдуваемого вентилятором. Электроника отгорожена от нагревателя алюминиевым экраном.



Стол-держатель плат. Собственно, помимо большой площади нагрева, это еще одно преимущество нагревателя, т.к. пока не видел ни одного дешевого нагревателя с приличным столом-держателем плат.
Столик сделан вполне неплохо, качество изготовления не вызывает особых вопросов, сделано просто и эффективно. Помимо двух основных пластин-дежателей, имеются нижние «саппорты» с болтами и гайками, препятствующие провисанию платы во время нагрева, а так-же 4 зацепа с основных пластин. Последние удобно использовать для крепления маленьких плат, к примеру видеокарт. Конструкция нижних держателей не совсем удобная, но вполне действующая. Минус — болты расчитаны под отверстия десктопных плат, т.е. в отверстия ноутбучных не полезут. С другой стороны, никто не мешает класть плату прямо на болты, либо купить нужные и поменять.


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

Постановка задачи


1)Полная переделка блока управления, а именно: выбрасываем старый блок управления в помойку, собираем свой блок с возможностью мониторинга и управления с пк.
2)Собрать также управляемый с пк блок верхнего нагрева
3)Добиться идеального и нормального отображения температуры

Реализация


Так как времени мало, и нужно помимо всего работать и использовать ИК станцию, то прерывать ее работу на критичное время не допустимо, потому мною были выбраны самые простейшие варианты.
1)На макетной плате был собран блок управления нижним нагревателем и верхним а также сбор данных с датчиков и интерфейс обмена данными с пк.
2)В качестве начинки микроконтроллеров и быстрой отладки применяется бутлоадер Arduino
3)В качестве по управления на пк, был выбран язык Visual Basic .NET

Блок управления, сх��ма, тестовый(отладочный) вариант

Начнем со схемы. Снизу представлена схема тестового блока, для отладки.
Состоит она из двух микроконтроллеров Atmega8 и Atmega 168. Первый МК выполняет роль преобразователя USB — RSR232. Второй МК будет исполнительным блоком. К ниму пока что для тестовой отладки припаян простейший терморезистор.

Конечный результат

После того как соберете блок, обо МК нужно прошить
Прошивка для Atmega8 и фьюзы
Прошивка для Atmega 168 береться из папки с Arduino IDE arduino\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex
Фьюзы для прошивки LOW: 0xff HIGH: 0xdd
Если будут трудности с прошивкой, распишу поподробнее.
После сборки и прошивки, наша плата должна идеально работать в Arduino IDE и зовется она там «Arduino Diecimila or Duemilanove w/ ATmega168».
Если у вас все заработало, то прошьем наш тестовый скетч для сбора показаний термопары
int temperatura;
void setup()
{
Serial.begin(115200);
}
void loop()
{
char ler = 'n';
if(Serial.available()>0)
{
ler=Serial.read();
}
if(ler=='a')
{
delay(10);
temperatura = analogRead(0);
temperatura = (5* temperatura * 100)/1024;
Serial.print(temperatura);
}
}

С платами пока что закончили. И приступим к написанию ПО для ПК.

Программа отображения данных термопары

Я писал в Visual Studio 2010 на языке Visual Basic .NET потому что мне так проще.
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ports As String() = SerialPort1.GetPortNames()
Dim port As String
For Each port In ports
ComboBox1.Items.Add(port)
Next port
End Sub

Private Sub ConnectToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectToolStripMenuItem.Click
SerialPort1.BaudRate = 115200
SerialPort1.DataBits = 8
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.PortName = ComboBox1.Text
Try
SerialPort1.Open()
Timer1.Start()

Catch ex As Exception

End Try
End Sub

Private Sub DisconnectToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisconnectToolStripMenuItem.Click
Try
Timer1.Stop()
SerialPort1.Close()

Catch ex As Exception

End Try
End Sub

Private Sub RefreshPortsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RefreshPortsToolStripMenuItem.Click
ComboBox1.Items.Clear()
Dim ports As String() = SerialPort1.GetPortNames()
Dim port As String
For Each port In ports
ComboBox1.Items.Add(port)
Next port
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
SerialPort1.Write("a")
System.Threading.Thread.Sleep(250)
Dim i As Integer = SerialPort1.ReadExisting
Chart1.Series("Series1").Points.AddY(i)
Label1.Text = "Temperatura actual" + i.ToString()
Catch ex As Exception

End Try
End Sub

Private Sub Chart1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Chart1.Click

End Sub
End Class


Данная программа при подключении к плате, будет выводить показание термопары в виде графика(зачем? в следующей части).
Выглядит вот так


На данный момент все. Это только вводная часть и все развитие продолжиться в следующей части.
Буду рад ответить на любые вопросы