жизнь вносит свои коррективы, вызвали на работу, у меня стоит подстроечник (порядка 200 Ом) к +, терморезистор на землю, со средней точки на атмегу, к сожалению коофициэнты прийдёться Вам считать самому, не могу найти в своей файло помойке, изменения вносяться сюда - int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480),
Gres пишет:
int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480); В данной строке значению solderTCouple присваивается считанные с аналогового, одноимённого порта значение, которое может принимать реальное, числовое значение от 0 до 780, с помощью функции map этот диапазон сжимается до диапазона от 0 до 480, то-есть до пределов возможной температуры. Что то мутно я объяснил, посмотрите в мануале, тут на сайте описание функции map, там очень подробно все описано. http://arduino.ru/Reference/Map
gug пишет:
Читал я то описание, для меня там один матерный язык)))), Вы обьяснили гораздо лучше, и я понял, спасибо!!!!!
Поправьте меня если я не прав. Число 780 это соответсвует 3,8 вольта с выхода операционника, т.е. 780 шагов АЦП по 0.0049 вольта?
т.е первая пара 0, 780 это то что выдаёт на вход атмеги, вторая пара 0, 480 шкала температуры которая отображаеться на индикаторе, я надеюсь понятно написал?
считаеться просто на нужной температуре допустим при комнатной температуре, возьмём 20 градусов, на вх атмеги поступает 2В делишь на 0,0049 получаем 408 а при 250 градусов на вх атмеги поступает 3 вольта делишь на 0,0049 получаешь нужную циферку 612, и того int solderTCouple = map(analogRead(pinSolderTCouple), 408, 612, 20, 250)
Получается с делителем я правильно понял. А про коэфициенты не знал, про них узнал только вчера, перечитывая заново тему и увидя ваш пост) А как считать, тогда не понял.
Сейчас все понятно написали, сегодня вечером поиграюсь. Получается что подстроечник тут не особо нужен, температура подстраивается коефициентами. Лучше, наверное, даже поставить на "+" обычный резистор ом на 200, а подстроечник, ом на 10, поставить последовательно к термистору, чтоб скорректировать разницу термистора в жалах разного происхождения.
У вас фен 24В, блок питания как у автора?
24В фен - "+" вентилятора подключить на вход "+24В", в прошивке не нужно ничего менять!
Если при уменьшениия оборотов вентилятор в фене останавливается, то это беда БП.
На Ютубе Олегу не вы вопрос задавали?
я фен подключил(пока не калибровал)всё работает,единственое очень маленькая регулировка скорости фена(блок как у автора , но я подключал от более мощьного блока(20а) разница не существительная по регулировки.вопрос вроде я задавал,но там есть чел который в прошивке менял значения и был результат только фен на некоторых режимах издовал писк
У меня была беда с феном на таком блоке как у автора, на новом блоке фен регулируется отлично, пробовал подключать и на 24В и на 12В, фен не пищит, а вот новый блок писклявый, но он писчит когда идет нагрев на паялинике.
Собрал Вашу станцию. Лайк однозначно. Была та же проблема, как тут люди пишут, с вентилятором фена на 24В, не регулировались обороты или максимум или вырубался... Полез в инет и накопал вот,что. Почитайте http://arduino.ru/forum/obshchii/shim-ili-kak-vzorvat-mosfet. Вобщем снизил частоту ШИМ. В коде 0х01 заменил на 0х02 и регулировка заработала. Фен правда издает писк в определенных режимах. Подозрение у меня возникло, что полевики IRFZ44 из Китая, имеют разные параметры, одни могут работать на такой частоте другие нет....Наверно из десятка можно выбрать какой будет работать ...не проверял. И с писком этим надо бы определиться...хотя можно и так оставить. Продолжайте творить. Будем следить :)
Пишут некоторые что IRFZ44 сильно греются, у меня холодный, меняют на IRL3705
Ради интереса, подключил снова прошлый блок питания и подпаял на 24В керамику 4мкф (другой не оказалось)
Фен все так же, нормально не регулируется. И как прошлый раз, БП уходил в защиту при подключении паяльника, но тогда оказалось что у меня коротил нагреватель на термопару, теперь нагреватель керамический, но БП с ним тоже уходит в защиту
жизнь вносит свои коррективы, вызвали на работу, у меня стоит подстроечник (порядка 200 Ом) к +, терморезистор на землю, со средней точки на атмегу, к сожалению коофициэнты прийдёться Вам считать самому, не могу найти в своей файло помойке, изменения вносяться сюда - int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480),
т.е первая пара 0, 780 это то что выдаёт на вход атмеги, вторая пара 0, 480 шкала температуры которая отображаеться на индикаторе, я надеюсь понятно написал?
считаеться просто на нужной температуре допустим при комнатной температуре, возьмём 20 градусов, на вх атмеги поступает 2В делишь на 0,0049 получаем 408 а при 250 градусов на вх атмеги поступает 3 вольта делишь на 0,0049 получаешь нужную циферку 612, и того int solderTCouple = map(analogRead(pinSolderTCouple), 408, 612, 20, 250)
Посчитал так:
температура тестера - напряжение - посчитанное значение:
200 - 1.48 - 302
350 - 1.73 - 353
И того получается: int solderTCouple = map(analogRead(pinSolderTCouple), 302, 353, 200, 350);
Значения правдоподобны?
И 114, походу, с готовым фрагментом кода.
Пока не буду это трогать, нужно еще решить проблему с регулировкой скорости вентилятора фена на том блоке питания.
На новом блоке питания вчера пробовал регулировать обороты и заметил что минимальная скорость на которой вентилятор крутится (вентилятор 24В) - это 64%, поток минимальный. Я так понимаю в этой строчке: int displayHotAirCooler = map(analogRead(pinHotAirCoolerIn), 0, 1023, 0, 99); нужно пересчитать минимальное значение для скорости 65%, чтоб оно соответствовало 0% на дисплее.
Вот типа так: int displayHotAirCooler = map(analogRead(pinHotAirCoolerIn), 6, 1023, 0, 99);
победил я фен (блок как у автора)обороты регулируются от 0 до 99 плавно да присутствует маленький писк но можно не обращать внимание всё работает(прошивка 0.5)
У меня первая пара - это то что было на дисплее станции в момент замера тестером, а вторая пара - это то что было на тестере при замере.
Впринципе, смотрю на те цыфры и думаю, зря не сохранил те значения, может можно было бы подстроечником подогнать приблизительно. На последнем варианте не особо близко получается.
И еще, я расширяю диапазон, допустим с 200 до 300, а на станции все равно задается температура от 0 до 480.
Не может быть тут так что я задаю диапазон от 200 до 300, а не сходится результат, так как оно на дисплей его все равно выводит из расчета от 0 до 480?
если честноне помню до конца что и как я точно делал, пол года прошло))), впредедущей строке в коде естьнастройки регулятора температуры там расширено 0, 480, попробуй там ограничь второй парой циферок
друзья, кстати насчет мощности. всё не могу понять. я правильно понимаю, что фен хочет 3А при переменке 220В, т.е. до 660 Ватт мощности ?? и всё это идёт в фен на тоненьких проводках 0.25 мм ?
друзья, кстати насчет мощности. всё не могу понять. я правильно понимаю, что фен хочет 3А при переменке 220В, т.е. до 660 Ватт мощности ?? и всё это идёт в фен на тоненьких проводках 0.25 мм ?
660 Ватт это максимальная мощность, а нагреватель работает несколько секунд непрерывно, а потом только поддержка температуры короткими импульсами. По уму надо бы двойную изоляцию, но киты все упрощают - так дешевле.
победил я фен (блок как у автора)обороты регулируются от 0 до 99 плавно да присутствует маленький писк но можно не обращать внимание всё работает(прошивка 0.5)
Это путем уменьшения частоты ШИМ? У меня тоже так фен на 24 В нормально заработал, но есть писк.
https://yadi.sk/d/2m8kfRCOoT4ia Сделал станцию по этому скетчу. Если температуру фена выставить на максимум 480, то показания термопары останавливаются на 460, и фен начинает бесконтрольно разогреваться((( Подскажите куда копать?
Если выставить температуру фена или паяльника на максимум 480 - на экране пишет Error и продолжает разогревать дальше. Можно это исправить? Боюсь случайно спалить. Я начинающий, и в программировании ноль)))
Если температуру фена выставить на максимум 480, то показания термопары останавливаются на 460, и фен начинает бесконтрольно разогреваться((( Подскажите куда копать?
На данный момент, у вас максимальное значение выходного напряжения ОУ преобразуется в максимальную температуру, т.е.
int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 750, 0, 480);
Значит ОУ у вас выдаёт не 750 отчсётов АЦП, а меньше (к примеру 720). Соотвественно, контроллер "видит", что температура всего 460 градусов и пытается нагреть её дальше, не "понимая", что измерить выше уже не получится. Необходимо настроить заново входной усилитель и уточнить его максимальное значение, при котором выход ОУ уходит в насыщение. Лучше "разогнать" диапазон до 500 град., а ещё лучше (но, конечно, подороже) - применить rail-to-rail ОУ (к примеру AD8551/AD8552 - одиночный и сдвоенный, соответственно) и сделать верхней границей 511 градусов
int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 1023, 0, 511);
В этом случае получится два отсчёта АЦП на градус и будет лучше держать температуру без применения , как у автора, устранения "прыгания" цифр (с допуском аж в 10 град. в обе стороны) и будет запас по измерению.
Цитата:
Если выставить температуру фена или паяльника на максимум 480 - на экране пишет Error и продолжает разогревать дальше.
По идее, у автора, ошибка выводится при измеренной температуре большей или равной 480 град. Если она меньше, то не выводится. У вас же, как вы указывали выше измеряется лишь до 460. Где-то нестыковка...
ЗЫ. Просмотрел исходник автора, в принципе, есть места, где можно улучшить, и, как минимум уменьшить "колбасню" температуры, которую автор "устраняет" программно.
1. При не очень качественных потенциометрах задания температуры или при их износе, лучше считывать значения АЦП несколько раз и делать усреднение.
2. Как я выразился выше, применение более точного ОУ повысит разрешающую способность при измерении до 0.5 град., что даст более быстрый отклик при регулировании, т.к. изменение температуры будет отслеживаться точнее.
3. Изменение схемы входного усилителя на схему с регулировкой смещения и величины обратной связи, позволит "загнать" диапазон измерения в требуемые рамки, с запасом, и обеспечит детектирование обрыва и КЗ в цепи термодатчика.
4. Защиту можно сделать с учётом определения КЗ и обрыва термодатчиков, а также при превышении (можно и при понижении) измереннного значения относительно выставленного, к примеру на 50 град., тогда можно отреагировать и на неисправности цепей термодатчиков, на обрыв в цепи нагревателя и пробой регулирующего элемента. В последнем случае, потребуется доп. реле, иначе нагрузку невозможно будет отключить.
5. Для уменьшения времени отклика системы на возмущения при стабилизации температуры -
а) Убрать delay в конце главного цикла а DigitalWrite и Read-ы заменить на аналоги из CyberLib. Выводить на дисплей через определённые промежутки (не через delay, а через подсчёт миллискунд.)
б) задержку в "регулировании" фена уменьшить со 100 мсек (за это время успевает проскочить 5 периодов) до 10-20 - тогда регулирование вблизи точки стабилизации будет происходить меньшими "порциями", без перерегулирования.
6. Ну и последнее - при отключении фена, делать продувку воздухом, при отключенном нагревателе.
Тут стоит учитывать, что при отключении обдува, температура существенно "подскакивает". К примеру, продули до 50 градусов и отключили. Температура внутри фена будет расти до, примерно, 90 градусов. А до скольки она вырастет, если отключить на 400 и не продувать?
По идее, у автора, ошибка выводится при измеренной температуре большей или равной 480 град. Если она меньше, то не выводится. У вас же, как вы указывали выше измеряется лишь до 460. Где-то нестыковка...
Измерялось до 460 в прошлой прошивке, в прошивке 0,5 меряет до 480. Но при достижении 480 градусов выдает на экран Error и продолжает разогревать дальше. Меня интересует как сделать так, что-бы нагреватель не грел свыше 480. Если я правильно понял, нужно поднять порог измеряемой температуры изменив строчку hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 780, 0, 480);
По поводу продувки фена она есть
if (hotAirTCouple < 85 && digitalRead(pinHotAirButton) == LOW){
Если я правильно понял, нужно поднять порог измеряемой температуры изменив строчку hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 780, 0, 480);
Попробуйте так - отключите термофен от станции и на вход ОУ подайте через резистор в пару десятков килоом напряжение с + питания. Выведите в терминал, что показывает АЦП. К примеру, получится 760. Вот это значение и вводите. Второй параметр (480) исправьте на 500. Тогда у вас будет небольшой запас вверх.
Попробуйте так - отключите термофен от станции и на вход ОУ подайте через резистор в пару десятков килоом напряжение с + питания. Выведите в терминал, что показывает АЦП. К примеру, получится 760. Вот это значение и вводите. Второй параметр (480) исправьте на 500. Тогда у вас будет небольшой запас вверх.
В версии прошивки 0.5 уже исправлено на 750, но все равно на 480 - "Error" и нагрев не прекращаеся.
int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 690, 0, 480);
Вместо 780 поставил 690 и термопара смогла принимать максимальное значение в 525С.
На прошивке v.0.4 без правки этого участка кода, есть шанс сжечь фен. Молодой экспериментатор, установит температуру фена в 480С, фен разогреется до 465С, а это предел захвата температуры термопарой, программный цикл не завершится и нагрев будет продолжатся бесконечно, масса незабываемых впечатлений ему обеспечена :)
В прошивке v.0.4 параметры указаны 750, это по значениям моего фена, максимальное значение превышает 750, фен не может сгореть. А вот в старой прошивке значение было 780.
Так его можно сильно доуменьшаться )) Для термопары, типа К, температуре 500 градусов соответствует значение 19-20 мВ. К примеру, усилитель на ОУ при таком входном напряжении выдаст на выходе 2 вольта - это, примерно, 410 отсчётов АЦП. А программа "думает", что температура ещё низкая и будет жарить фен, пока он не сгорит.
Дело, значит, не только в том, что бы задать значение, при котором выход ОУ уходит в насыщение, но и в усилении самого каскада.
Нужно, что бы усилитель имел такое усиление, которое позволит ему достигать насыщения несколько позже, чем будет достигнута максимальная измеряемая температура.
К примеру, подаём на вход усилителя напряжение, имитируя термопару (можно от батарейки, через подстроечник) и добиваемся, что бы при напряжении чуть выше 20, а то и 21 мВ выходное напряжение ОУ было максимально возможным. Тогда температура от 500 град. и ниже будет попадать в диапазон и программа "сможет увидеть" температуру выше максимальной 480 град.
... Тогда температура от 500 град. и ниже будет попадать в диапазон и программа "сможет увидеть" температуру выше максимальной 480 град.
Я закоментировал строку
119: lcd.print(" Error");
и увеличил вывод до 525:
111: if (solderTCouple < 525) {
установил температуру 480 и программа "видит" - температура растет и останавливается на 480 градусов, но паяльник продолжает греться, не пойму почему не отрабатывает?:
на какие свободные порты и как это написать правильно
На любые цифровые порты, я не знаю, какая у вас *дуина. У вас счас имеется, как минимум 7 порт, да и аналоговые можно использовать как цифровые, если не хватает.
Реле подключаете через транзисторный ключ, а обмотки реле запитываете от 24 вольт питания паяльника через стабилизатор 7812, если реле 12-вольтовые или непосредственно, если реле на 24в.
Управляете через DigitalRead и DigitalWrite. Почитайте тут - http://arduino.ru/Tutorial/DigitalPins
Защиту лучше делать триггерной - если сработала, то вывод в нормальное состояние что бы не происходил самостоятельно - только при повторном включении вручную.
int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 720, 0, 490);
У меня фен адекватно заработал при таких настройках, а паяльник начал дико врать. Выставляю подстроечником на паяльнике 280 при заданной 280. Увеличиваю до 400 - на жале 380. Причем чем дальше тем больше разбег.
Поднял температуру до 480, пришлось повозится. Добавил в скетч вывод в терминал состояния аналогового входа. Далее выставив температуру паяльника на максимум, подстроечным резистором поднял температуру на жале до 505 градусов и записал показания с терминала (у меня получилось 690). Затем отключил питание нагревателя, и зафиксировал температуру на жале при которой показания в терминале упали до нуля (у меня получилось 45 градусов). Полученные значения ввел в скетч int solderTCouple = map(analogRead(pinSolderTCouple), 0, 690, 45, 505);
Ок. Подожду до понедельника.
Я так понимаю, при использовании делителя, ОУ не используете.
Кроме делителя еще нужно в коде менять коефициенты?
жизнь вносит свои коррективы, вызвали на работу, у меня стоит подстроечник (порядка 200 Ом) к +, терморезистор на землю, со средней точки на атмегу, к сожалению коофициэнты прийдёться Вам считать самому, не могу найти в своей файло помойке, изменения вносяться сюда - int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480),
int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480); В данной строке значению solderTCouple присваивается считанные с аналогового, одноимённого порта значение, которое может принимать реальное, числовое значение от 0 до 780, с помощью функции map этот диапазон сжимается до диапазона от 0 до 480, то-есть до пределов возможной температуры. Что то мутно я объяснил, посмотрите в мануале, тут на сайте описание функции map, там очень подробно все описано. http://arduino.ru/Reference/Map
Читал я то описание, для меня там один матерный язык)))), Вы обьяснили гораздо лучше, и я понял, спасибо!!!!!
Поправьте меня если я не прав. Число 780 это соответсвует 3,8 вольта с выхода операционника, т.е. 780 шагов АЦП по 0.0049 вольта?
т.е первая пара 0, 780 это то что выдаёт на вход атмеги, вторая пара 0, 480 шкала температуры которая отображаеться на индикаторе, я надеюсь понятно написал?
считаеться просто на нужной температуре допустим при комнатной температуре, возьмём 20 градусов, на вх атмеги поступает 2В делишь на 0,0049 получаем 408 а при 250 градусов на вх атмеги поступает 3 вольта делишь на 0,0049 получаешь нужную циферку 612, и того int solderTCouple = map(analogRead(pinSolderTCouple), 408, 612, 20, 250)
Ок. Спасибо.
Получается с делителем я правильно понял. А про коэфициенты не знал, про них узнал только вчера, перечитывая заново тему и увидя ваш пост) А как считать, тогда не понял.
Сейчас все понятно написали, сегодня вечером поиграюсь. Получается что подстроечник тут не особо нужен, температура подстраивается коефициентами. Лучше, наверное, даже поставить на "+" обычный резистор ом на 200, а подстроечник, ом на 10, поставить последовательно к термистору, чтоб скорректировать разницу термистора в жалах разного происхождения.
смысла убирать один подстроечник и ставить другой в нижнем плече нету совсем, всё можно сделать и тем что в верхнем плече стоит))
Прошивка автора под 12В фен, с 24В надо подбирать в прошивке диапазон регулировки.
что надо изменить в прошивке для плавной регулировки?мега 328
там принцип тот же что и у паяльника
там принцип тот же что и у паяльника
я просто в прошивках 0 ,если б ткнули носом где что поменять))
У вас фен 24В, блок питания как у автора?
24В фен - "+" вентилятора подключить на вход "+24В", в прошивке не нужно ничего менять!
Если при уменьшениия оборотов вентилятор в фене останавливается, то это беда БП.
На Ютубе Олегу не вы вопрос задавали?
я фен подключил(пока не калибровал)всё работает,единственое очень маленькая регулировка скорости фена(блок как у автора , но я подключал от более мощьного блока(20а) разница не существительная по регулировки.вопрос вроде я задавал,но там есть чел который в прошивке менял значения и был результат только фен на некоторых режимах издовал писк
У меня была беда с феном на таком блоке как у автора, на новом блоке фен регулируется отлично, пробовал подключать и на 24В и на 12В, фен не пищит, а вот новый блок писклявый, но он писчит когда идет нагрев на паялинике.
вот этот товарищ писал:
Собрал Вашу станцию. Лайк однозначно. Была та же проблема, как тут люди пишут, с вентилятором фена на 24В, не регулировались обороты или максимум или вырубался... Полез в инет и накопал вот,что. Почитайте http://arduino.ru/forum/obshchii/shim-ili-kak-vzorvat-mosfet. Вобщем снизил частоту ШИМ. В коде 0х01 заменил на 0х02 и регулировка заработала. Фен правда издает писк в определенных режимах. Подозрение у меня возникло, что полевики IRFZ44 из Китая, имеют разные параметры, одни могут работать на такой частоте другие нет....Наверно из десятка можно выбрать какой будет работать ...не проверял. И с писком этим надо бы определиться...хотя можно и так оставить. Продолжайте творить. Будем следить :)
Пишут некоторые что IRFZ44 сильно греются, у меня холодный, меняют на IRL3705
Ради интереса, подключил снова прошлый блок питания и подпаял на 24В керамику 4мкф (другой не оказалось)
Фен все так же, нормально не регулируется. И как прошлый раз, БП уходил в защиту при подключении паяльника, но тогда оказалось что у меня коротил нагреватель на термопару, теперь нагреватель керамический, но БП с ним тоже уходит в защиту
жизнь вносит свои коррективы, вызвали на работу, у меня стоит подстроечник (порядка 200 Ом) к +, терморезистор на землю, со средней точки на атмегу, к сожалению коофициэнты прийдёться Вам считать самому, не могу найти в своей файло помойке, изменения вносяться сюда - int solderTCouple = map(analogRead(pinSolderTCouple), 0, 780, 0, 480),
т.е первая пара 0, 780 это то что выдаёт на вход атмеги, вторая пара 0, 480 шкала температуры которая отображаеться на индикаторе, я надеюсь понятно написал?
считаеться просто на нужной температуре допустим при комнатной температуре, возьмём 20 градусов, на вх атмеги поступает 2В делишь на 0,0049 получаем 408 а при 250 градусов на вх атмеги поступает 3 вольта делишь на 0,0049 получаешь нужную циферку 612, и того int solderTCouple = map(analogRead(pinSolderTCouple), 408, 612, 20, 250)
Посчитал так:
температура тестера - напряжение - посчитанное значение:
200 - 1.48 - 302
350 - 1.73 - 353
И того получается: int solderTCouple = map(analogRead(pinSolderTCouple), 302, 353, 200, 350);
Значения правдоподобны?
проверь на практике )
но БП с ним тоже уходит в защиту
посмотри 112 и 113 сообщения в теме
И 114, походу, с готовым фрагментом кода.
Пока не буду это трогать, нужно еще решить проблему с регулировкой скорости вентилятора фена на том блоке питания.
На новом блоке питания вчера пробовал регулировать обороты и заметил что минимальная скорость на которой вентилятор крутится (вентилятор 24В) - это 64%, поток минимальный. Я так понимаю в этой строчке: int displayHotAirCooler = map(analogRead(pinHotAirCoolerIn), 0, 1023, 0, 99); нужно пересчитать минимальное значение для скорости 65%, чтоб оно соответствовало 0% на дисплее.
Вот типа так: int displayHotAirCooler = map(analogRead(pinHotAirCoolerIn), 6, 1023, 0, 99);
победил я фен (блок как у автора)обороты регулируются от 0 до 99 плавно да присутствует маленький писк но можно не обращать внимание всё работает(прошивка 0.5)
Чет я не пойму, где я туплю.
Делаю замеры:
Дисплей - напряжение - замер - коэф.
200 - 1.42 - 185 - 290
250 - 1.51 - 220 - 308
300 - 1.58 - 252 - 322
350 - 1.66 - 285 - 339
400 - 1.76 - 327 - 359
В коде изменяю int solderTCouple = map(analogRead(pinSolderTCouple), 290, 361, 185, 330);
Заливаю и делаю замер по новой:
Дисплей - напряжение - замер
200 - 1.40 - 100
250 - 1.52 - 130
300 - 1.63 - 185
350 - 1.74 - 205
400 - 1.85 - 247
Толи я не выспался, толи не пойму...
int solderTCouple = map(analogRead(pinSolderTCouple), 290, 361, 185, 330)
у тебя первая пара писана с 200 до 400 градусов, а на индикатор расширяеться другой диапазан с 185 до 330, чуствуешь разницу?
и слишком уж большую точность тут не получишь
У меня первая пара - это то что было на дисплее станции в момент замера тестером, а вторая пара - это то что было на тестере при замере.
Впринципе, смотрю на те цыфры и думаю, зря не сохранил те значения, может можно было бы подстроечником подогнать приблизительно. На последнем варианте не особо близко получается.
И еще, я расширяю диапазон, допустим с 200 до 300, а на станции все равно задается температура от 0 до 480.
Не может быть тут так что я задаю диапазон от 200 до 300, а не сходится результат, так как оно на дисплей его все равно выводит из расчета от 0 до 480?
если честноне помню до конца что и как я точно делал, пол года прошло))), впредедущей строке в коде естьнастройки регулятора температуры там расширено 0, 480, попробуй там ограничь второй парой циферок
оформил станцию и могу подтвердить что блок питания автора хватает с головой(одновремено запускаю фен и паяльник всё очень хорошо работает)
друзья, кстати насчет мощности. всё не могу понять. я правильно понимаю, что фен хочет 3А при переменке 220В, т.е. до 660 Ватт мощности ?? и всё это идёт в фен на тоненьких проводках 0.25 мм ?
друзья, кстати насчет мощности. всё не могу понять. я правильно понимаю, что фен хочет 3А при переменке 220В, т.е. до 660 Ватт мощности ?? и всё это идёт в фен на тоненьких проводках 0.25 мм ?
660 Ватт это максимальная мощность, а нагреватель работает несколько секунд непрерывно, а потом только поддержка температуры короткими импульсами. По уму надо бы двойную изоляцию, но киты все упрощают - так дешевле.
победил я фен (блок как у автора)обороты регулируются от 0 до 99 плавно да присутствует маленький писк но можно не обращать внимание всё работает(прошивка 0.5)
Это путем уменьшения частоты ШИМ? У меня тоже так фен на 24 В нормально заработал, но есть писк.
TCCR2B = TCCR2B & 0b11111000 | 0x02; // Частота ШИМ 11 и 3
При такой установке и частота ШИМ паяльника изменится? Как это повлияет на его работу?
не знаю пока всё работает
не знаю пока всё работает
А на сколько полевик паяльника греется?
У меня касаешься - гарячий, но палец терпит.
у меня стоят радиаторы + вентилятор(корпус бп) радиатор холодный
https://yadi.sk/d/2m8kfRCOoT4ia Сделал станцию по этому скетчу. Если температуру фена выставить на максимум 480, то показания термопары останавливаются на 460, и фен начинает бесконтрольно разогреваться((( Подскажите куда копать?
Залил скетч ver 0.5
Если выставить температуру фена или паяльника на максимум 480 - на экране пишет Error и продолжает разогревать дальше. Можно это исправить? Боюсь случайно спалить. Я начинающий, и в программировании ноль)))
На данный момент, у вас максимальное значение выходного напряжения ОУ преобразуется в максимальную температуру, т.е.
Значит ОУ у вас выдаёт не 750 отчсётов АЦП, а меньше (к примеру 720). Соотвественно, контроллер "видит", что температура всего 460 градусов и пытается нагреть её дальше, не "понимая", что измерить выше уже не получится. Необходимо настроить заново входной усилитель и уточнить его максимальное значение, при котором выход ОУ уходит в насыщение. Лучше "разогнать" диапазон до 500 град., а ещё лучше (но, конечно, подороже) - применить rail-to-rail ОУ (к примеру AD8551/AD8552 - одиночный и сдвоенный, соответственно) и сделать верхней границей 511 градусов
В этом случае получится два отсчёта АЦП на градус и будет лучше держать температуру без применения , как у автора, устранения "прыгания" цифр (с допуском аж в 10 град. в обе стороны) и будет запас по измерению.
ЗЫ. Просмотрел исходник автора, в принципе, есть места, где можно улучшить, и, как минимум уменьшить "колбасню" температуры, которую автор "устраняет" программно.
1. При не очень качественных потенциометрах задания температуры или при их износе, лучше считывать значения АЦП несколько раз и делать усреднение.
2. Как я выразился выше, применение более точного ОУ повысит разрешающую способность при измерении до 0.5 град., что даст более быстрый отклик при регулировании, т.к. изменение температуры будет отслеживаться точнее.
3. Изменение схемы входного усилителя на схему с регулировкой смещения и величины обратной связи, позволит "загнать" диапазон измерения в требуемые рамки, с запасом, и обеспечит детектирование обрыва и КЗ в цепи термодатчика.
4. Защиту можно сделать с учётом определения КЗ и обрыва термодатчиков, а также при превышении (можно и при понижении) измереннного значения относительно выставленного, к примеру на 50 град., тогда можно отреагировать и на неисправности цепей термодатчиков, на обрыв в цепи нагревателя и пробой регулирующего элемента. В последнем случае, потребуется доп. реле, иначе нагрузку невозможно будет отключить.
5. Для уменьшения времени отклика системы на возмущения при стабилизации температуры -
а) Убрать delay в конце главного цикла а DigitalWrite и Read-ы заменить на аналоги из CyberLib. Выводить на дисплей через определённые промежутки (не через delay, а через подсчёт миллискунд.)
б) задержку в "регулировании" фена уменьшить со 100 мсек (за это время успевает проскочить 5 периодов) до 10-20 - тогда регулирование вблизи точки стабилизации будет происходить меньшими "порциями", без перерегулирования.
6. Ну и последнее - при отключении фена, делать продувку воздухом, при отключенном нагревателе.
Тут стоит учитывать, что при отключении обдува, температура существенно "подскакивает". К примеру, продули до 50 градусов и отключили. Температура внутри фена будет расти до, примерно, 90 градусов. А до скольки она вырастет, если отключить на 400 и не продувать?
Измерялось до 460 в прошлой прошивке, в прошивке 0,5 меряет до 480. Но при достижении 480 градусов выдает на экран Error и продолжает разогревать дальше. Меня интересует как сделать так, что-бы нагреватель не грел свыше 480. Если я правильно понял, нужно поднять порог измеряемой температуры изменив строчку hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 780, 0, 480);
По поводу продувки фена она есть
if (hotAirTCouple < 85 && digitalRead(pinHotAirButton) == LOW){
Попробуйте так - отключите термофен от станции и на вход ОУ подайте через резистор в пару десятков килоом напряжение с + питания. Выведите в терминал, что показывает АЦП. К примеру, получится 760. Вот это значение и вводите. Второй параметр (480) исправьте на 500. Тогда у вас будет небольшой запас вверх.
Это хорошо. Просмотрел я, значит ))
Попробуйте так - отключите термофен от станции и на вход ОУ подайте через резистор в пару десятков килоом напряжение с + питания. Выведите в терминал, что показывает АЦП. К примеру, получится 760. Вот это значение и вводите. Второй параметр (480) исправьте на 500. Тогда у вас будет небольшой запас вверх.
В версии прошивки 0.5 уже исправлено на 750, но все равно на 480 - "Error" и нагрев не прекращаеся.
На ютубе в обсужденни:
Надо попробовать уменьшать параметр 750
Так его можно сильно доуменьшаться )) Для термопары, типа К, температуре 500 градусов соответствует значение 19-20 мВ. К примеру, усилитель на ОУ при таком входном напряжении выдаст на выходе 2 вольта - это, примерно, 410 отсчётов АЦП. А программа "думает", что температура ещё низкая и будет жарить фен, пока он не сгорит.
Дело, значит, не только в том, что бы задать значение, при котором выход ОУ уходит в насыщение, но и в усилении самого каскада.
Нужно, что бы усилитель имел такое усиление, которое позволит ему достигать насыщения несколько позже, чем будет достигнута максимальная измеряемая температура.
К примеру, подаём на вход усилителя напряжение, имитируя термопару (можно от батарейки, через подстроечник) и добиваемся, что бы при напряжении чуть выше 20, а то и 21 мВ выходное напряжение ОУ было максимально возможным. Тогда температура от 500 град. и ниже будет попадать в диапазон и программа "сможет увидеть" температуру выше максимальной 480 град.
... Тогда температура от 500 град. и ниже будет попадать в диапазон и программа "сможет увидеть" температуру выше максимальной 480 град.
Я закоментировал строку
119: lcd.print(" Error");
и увеличил вывод до 525:
111: if (solderTCouple < 525) {
61: if (solderTCouple > 480) {
62: setSolderTemp = 0;
Так а с чего бы ему не греться? Смотрите -
Вы считали с датчика 480, а по условию setSolderTemp обнулится, только если будет больше.
Далее.
Потому и выполняется условие - греть дальше. А дальше не растёт по индикатору, так как измерить выше уже не может.
И закомментируйте пока кусок, где "устраняется прыгание цифр", что бы не мешалось.
Ну так условие вывода ошибки тоже подправить нужно.
Тоже сначала подумал, что нужно, а потом решил не трогать.
Надо еще проверить при отключенных термодатчиках.
Хотя можно 481 поставить. И реле прикрутить.
Хватит 4 градусов "запаса"?
К фену крайне обязательно, а к паяльнику желательно.
У меня прикручено к обоим.
Что бы не было как тут - http://www.youtube.com/watch?v=XwJdYxe_HFQ
К фену крайне обязательно, а к паяльнику желательно.
У меня прикручено к обоим.
Что бы не было как тут - http://www.youtube.com/watch?v=XwJdYxe_HFQ
Угу :)
К обоим! Паяльник $5, а фен $14 ! А пара релюшек $1.27 не считая возможных последствий.
Я только начинаю разбираться в Ардуине, на какие свободные порты и как это написать правильно?
А квартира? А жизнь?
На любые цифровые порты, я не знаю, какая у вас *дуина. У вас счас имеется, как минимум 7 порт, да и аналоговые можно использовать как цифровые, если не хватает.
Реле подключаете через транзисторный ключ, а обмотки реле запитываете от 24 вольт питания паяльника через стабилизатор 7812, если реле 12-вольтовые или непосредственно, если реле на 24в.
Управляете через DigitalRead и DigitalWrite. Почитайте тут - http://arduino.ru/Tutorial/DigitalPins
Защиту лучше делать триггерной - если сработала, то вывод в нормальное состояние что бы не происходил самостоятельно - только при повторном включении вручную.
Я только начинаю разбираться в Ардуине, на какие свободные порты и как это написать правильно?
Гляньте схему http://d-serviss.lv/index.php?mod=pages&pageName=solderingstation и черкните пару строк :)
Я так понимаю сюда:
int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 720, 0, 490);
У меня фен адекватно заработал при таких настройках, а паяльник начал дико врать. Выставляю подстроечником на паяльнике 280 при заданной 280. Увеличиваю до 400 - на жале 380. Причем чем дальше тем больше разбег.
А если вернуть 750?
Сейчас буду пробовать, вчера бросил настройку)))
Так и защиту надо поставить 455 вместо 480
Поднял температуру до 480, пришлось повозится. Добавил в скетч вывод в терминал состояния аналогового входа. Далее выставив температуру паяльника на максимум, подстроечным резистором поднял температуру на жале до 505 градусов и записал показания с терминала (у меня получилось 690). Затем отключил питание нагревателя, и зафиксировал температуру на жале при которой показания в терминале упали до нуля (у меня получилось 45 градусов). Полученные значения ввел в скетч int solderTCouple = map(analogRead(pinSolderTCouple), 0, 690, 45, 505);
Скетч https://yadi.sk/d/cF_Fxq2-omUYD