Например TDA7294

Форум РадиоКот • Просмотр темы - Цифровая паяльная станция своими руками.(V 2.0)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вс июл 13, 2025 01:27:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7414 ]     ... , , , 153, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Ср июл 13, 2011 21:02:26 
Родился

Зарегистрирован: Ср июн 29, 2011 20:09:59
Сообщений: 19
Рейтинг сообщения: 0
У пирометра в настройках есть коэффициент отражения поверхности (был у того, что я игрался), а из-за него показания очень отличаются, причём как выставить его точно не ясно.
имхо: игрушка это просто...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Ср июл 13, 2011 22:22:53 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
kt840 писал(а):
Т.е замеры проводить при заданой температуре 100,150,200 и т.д. НА КОНЦЕ ЖАЛА и после СО СНЯТЫМ ЖАЛОМ НА ТЕРПОПАРЕ только без помощи пирометра не обойтись. И вывести поправочные коэффициенты. Может это как-то решит проблему?


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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Ср июл 13, 2011 23:01:12 
Опытный кот
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт мар 06, 2009 18:22:23
Сообщений: 702
Рейтинг сообщения: 0
Ничегонеработает
Не проще ли просто откалибровать станцию ориентируясь по реальной температуре жала, а не по напряжению встроенной термопары? Серьёзная ошибка будет только на теплоёмких полигонах. Как компенсировать эту ошибку я не представляю,- когда по напр. внутренней термопары- мощности можно сделать вывод, что паяется крупный объект- возможно пайка уже осталась позади. Слишком высокая инерционность получается.

Gelios
В том то и дело, что большинство ширпотребных пирометров имеют фиксированный коэффициент, а:
•Металлы белого цвета. Имеют очень маленький коэффициент излучения в диапазоне от 8 до14 мкм, и поэтому их температуру трудно измерять. Для измерений требуется применение покрытий, увеличивающих излучательную способность, например: краска, масляная пленка.Желательно измерять контактным термометром.
•Оксиды металлов. В данной группе не существует постоянных показателей. Коэффициент излучения находится между 0.3 и 0.9 мкм и он сильно зависит от длины волны.Для точного определения температуры необходимо выбрать коэффициент излучения объекта. Его можно определить посредством сравнительного измерения контактным термометром (т.е. меняя коэффицент излучения, заложенный в пирометр, можно выбрать такой, когда измерения пирометра будут совпадать с измерениями контактного терометра). В противном случае можно применять покрытия с определенным уровнем излучательной способности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Чт июл 14, 2011 11:27:01 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Volly писал(а):
Не проще ли просто откалибровать станцию ориентируясь по реальной температуре жала, а не по напряжению встроенной термопары?


Такая возможность есть даже в существующей версии: для измерителя температуры с помощью сервисной программы задается любое значение Shift и Gain, которые потом запоминаются в EEPROM. Можно переделать интерфейс, чтобы вместо этого вводить две точки в градусах. Но это не суть. По идее, надо калибровать при среднестатистической теплоотдаче, которая имеет место в процессе пайки. Но тогда наблюдается дикий перегрев на простое.

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


Консультировался по этому вопросу в НИИ прикладных физических проблем. Сказали, что на основе тепловой модели сделать это можно. А если я не могу составить модель, значит - дурак.


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Чт июл 14, 2011 15:56:54 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт апр 05, 2011 15:39:55
Сообщений: 196
Откуда: Красноярск
Рейтинг сообщения: 0
Ребята , я ведь предложил только идею - вывести коэффициент с помощью которого можно было бы не устранить , так хотя бы свести к
минимуму те конструктивные недостатки которые присущи большинству моделей паяльников.Ну не хочет промышленность ни забугорная ,
ни тем более наша подойти к изготовлению паяльников с научной точки.
Как и чем замерить температуру вопрос не основной , а основной - какова вероятность что идя в данном направлении
можно улучшить эту(я думаю многие согласятся) и так уже великолепную констукцию.
А метод измерения может быть достаточно простым : медная проволока например или другой метал изменяющий сопротивление при нагреве
одноу и той же длины на жале и на нагревателе. И не обязательно мерить температуру , подойдет любая относительная величина.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт июл 15, 2011 00:00:05 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
kt840 писал(а):
Ребята , я ведь предложил только идею - вывести коэффициент с помощью которого можно было бы не устранить , так хотя бы свести к минимуму те конструктивные недостатки которые присущи большинству моделей паяльников.


Вот и я за то. Вы хотите предложить что-то конкретное?

kt840 писал(а):
идея в данном направлении можно улучшить эту (я думаю многие согласятся) и так уже великолепную конструкцию.


Соглашусь. Но меня не поддержит Volly. Конструкция лукеевских пальников - великолепна (с точки зрения цена/качество). Но нам лень приложить мозги, как их правильно использовать.

kt840 писал(а):
А метод измерения может быть достаточно простым : медная проволока например или другой металл изменяющий сопротивление при нагреве


Зачем какая-то проволока? Есть термопары, которые выдают конкретное напряжение для конкретной разницы температур спаев.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт июл 15, 2011 05:10:56 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт апр 05, 2011 15:39:55
Сообщений: 196
Откуда: Красноярск
Рейтинг сообщения: 0
Ничегонеработает

Да я и предложил конкретно , куда уж конкретнее : на основе разности температур вводить программно поправку или
коэффициент(назовите как хотите) .
Насчет проволки - для примера (что можно использовать ЛЮБЫЕ ОТНОСИТЕЛЬНЫЕ ВЕЛИЧИНЫ для измерений).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт июл 15, 2011 08:27:26 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
kt840 писал(а):
Да я и предложил конкретно , куда уж конкретнее : на основе разности температур вводить программно поправку или коэффициент(назовите как хотите) .


В сотый раз уже отвечаю: если ввести тупую поправку температуры при пайке, то при простое будет дикий перегрев. Лужение жала слезет. Тут надо что-то умнее. У нас в руках есть данные о потребляемой нагревателем мощности и показания встроенной термопары. На основе этих величин нужно сформировать поправку в уставку ПИД.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт июл 15, 2011 12:34:43 
Опытный кот
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт мар 06, 2009 18:22:23
Сообщений: 702
Рейтинг сообщения: 0
Я же предлагал простой вариант:
Переодически прекращать нагрев и замерять время за которое термопара остынет на некоторую величину. Чем больше температурная разница между термопарой и жалом- тем быстрее термопара будет остывать. На основании этого делаем поправку. Ах да, за точку отсчёта берём реальную температуру термопары, на уровне заданной.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт июл 15, 2011 19:34:05 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт апр 05, 2011 15:39:55
Сообщений: 196
Откуда: Красноярск
Рейтинг сообщения: 0
Браво Volly !
Примерно это я и имел ввиду , только коряво мысли изложил .
А перегрева ,да такого при котором полуда облезет ,думаю не случится , потому как если разница температур жала
до начала пайки и в конце ее вряд ли составит несколько десятков градусов , если конечно не елозить по полигонам
десять минут. Только за точку отсчета мне кажется правильнее брать всеж-таки реальную температуру жала.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт авг 12, 2011 22:52:59 
Открыл глаза

Зарегистрирован: Вт апр 20, 2010 16:45:32
Сообщений: 64
Рейтинг сообщения: 0
Если поставить трансформатор на 18 вольт, после диодного моста и конденсаторов будет около 24 вольт, то под нагрузкой напряжение не будет просаживаться?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Сб авг 13, 2011 14:31:28 
Друг Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 1121
Зарегистрирован: Пт ноя 27, 2009 18:12:27
Сообщений: 4625
Откуда: Черкассы, UA
Рейтинг сообщения: 0
jeniok писал(а):
Если поставить трансформатор на 18 вольт, после диодного моста и конденсаторов будет около 24 вольт, то под нагрузкой напряжение не будет просаживаться?

Просаживаться будет, а вот насколько, зависит от:
1. мощности трансформатора
2. емкости сглаживающего конденсатора
3. мощности нагрузки

_________________
Изображение

В мире нет вредных веществ, в мире есть вредные количества © Д.И.Менделеев
Когда на форуме переходят на "Вы", в реальной жизни уже давно бьют морду © автор неизвестен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Вс авг 14, 2011 12:25:50 
Открыл глаза

Зарегистрирован: Вт апр 20, 2010 16:45:32
Сообщений: 64
Рейтинг сообщения: 0
[s]Есть ли в теме где-то распиновка семисегментного индикатора?
У меня индикатор вот такой
http://www.e-voron.dp.ua/catalog/013076[/s]

Извините, уже не надо, сам разобрался


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пн авг 15, 2011 21:21:22 
Открыл глаза

Зарегистрирован: Вт апр 20, 2010 16:45:32
Сообщений: 64
Рейтинг сообщения: 0
Подскажите пожалуйста, что изображено еще на рисунке кроме резистора на 10 ком?
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Вт авг 16, 2011 09:32:58 
Друг Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 1121
Зарегистрирован: Пт ноя 27, 2009 18:12:27
Сообщений: 4625
Откуда: Черкассы, UA
Рейтинг сообщения: 0
Посмотри по схеме, что подключено к 1 и 2 выводам микросхемы. Или ссылку на схему выложи.
Первое, что приходит на ум, это DIP-переключатель. Но смущает то, что они включены последовательно. Так что только схема даст ответ.

_________________
Изображение

В мире нет вредных веществ, в мире есть вредные количества © Д.И.Менделеев
Когда на форуме переходят на "Вы", в реальной жизни уже давно бьют морду © автор неизвестен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Вт авг 16, 2011 18:18:37 
Открыл глаза

Зарегистрирован: Вт апр 20, 2010 16:45:32
Сообщений: 64
Рейтинг сообщения: 0
Там по схеме оказались переменный резистор на 100к и резюк на 60к.
Просто для меня нестандартные обозначения непонятные, я еще зеленый.

Схему собрал полностью. Пока что тестировал, подав напряжение только на контроллер. Вроде все работает. Загорается на индикаторе надпись "Off" , при нажатии на кнопку, пишет "Err" так как паяльника нету.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Вт авг 16, 2011 18:42:06 
Опытный кот
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт мар 06, 2009 18:22:23
Сообщений: 702
Рейтинг сообщения: 0
jeniok, по той станции, что Вы собираете, есть отдельная ветка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Чт авг 25, 2011 22:05:24 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пт июл 09, 2010 21:37:23
Сообщений: 274
Откуда: Саратов
Рейтинг сообщения: 0
Хочу сделать паяльную станцию только полностью переделать под свои детали.
И никак не могу въехать как в этой станции переводят измеренное напряжение в температуру. Ведь АЦП 10 битный. Минус два младших бита на помехи а 2 в 8 =255. А регулировка температуры от 100 до 400. Если кто знает алгоритм от измерения напряжения с термопары до перевода в температуру поделитесь пожалуйста.

_________________
В каждом из нас спит гений и бодрствует идиот


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт авг 26, 2011 11:10:58 
Опытный кот
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт мар 06, 2009 18:22:23
Сообщений: 702
Рейтинг сообщения: 0
MerK
Вроде ответ и так очевиден,- никаких 2 битов на помехи. Результат преобразования и есть показание температуры. Возможно делённый на 2 (сдвинутый на 1 бит), или (и) умноженный на какой-нибудь коэффициент для программной поправки показаний.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Цифровая паяльная станция своими руками.(V 2.0)
СообщениеДобавлено: Пт авг 26, 2011 11:21:21 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
MerK писал(а):
Если кто знает алгоритм от измерения напряжения с термопары до перевода в температуру поделитесь пожалуйста.


Делюсь своим алгоритмом:

Код:
//----------

//DSS-90
//Модуль измерения температуры

//Для измерения температуры используется термопара K-типа,
//подключенная ко входу АЦП ADC6.
//Используется внешний источник опорного напряжения типа
//TL431 с напряжением 2.5 В.
//Отсчеты АЦП производятся с интервалом T_SYS, при измерении
//напряжения термопары берется FIR_N отсчетов, которые поступают
//на усредняющий FIR-фильтр с прямоугольным окном.
//Для контроля обрыва термопары используется резистор смещения.
//Если термопара оборвана, АЦП фиксирует максимальное напряжение.
//При этом вместо значения температуры возвращается код обрыва
//термопары TC_BRK.
//Температура холодного спая измеряется дополнительным цифровым
//термометром типа DS18B20.
//Если термометр холодного спая отсутствует, температура
//холодного спая принимается равной TCJ_NOM.
//Когда напряжение термопары и температура холодного спая измерены,
//производится вычисление температуры.
//Температура холодного спая преобразуется в напряжение по линейному
//закону Vcj = Tcj * 40 uV/°C. В диапазоне 0…+50°C погрешность
//не превышает 0.5°C.
//Измеренное напряжение термопары складывается с полученным
//напряжением: Vhj = Vtc + Vcj. В результате получается напряжение
//на горячем спае (т.е. напряжение на термопаре приводится к тому
//значению, которое было бы при нулевой температуре холодного спая).
//Полученное напряжение преобразуется в температуру по таблице
//линеаризации с кусочно-линейной интерполяцией.

//----------

#include "Main.h"
#include "TC.h"
#include "DS18B20.h"

//---------- Константы: ----------

#define ADC_RES    1023 //разрешение АЦП, квантов
#define ADC_REF    2500 //опорное напряжение АЦП, мВ
#define R_FB      100.0 //номинал резистора обратной связи ОУ, кОм
#define R_GND       1.0 //номинал резистора с инв. входа ОУ на землю, кОм
#define V_BRK      24.0 //напряжение детектирования обрыва термопары, мВ
#define TCJ_K      40.0 //температурный коэффициент для CJ, мкВ/°C
#define TCJ_RES     0.1 //дискретность температуры холодного спая, °C
#define FIR_N (int)(TSAMPLE * 1E3 / T_SYS) //количество точек цифрового фильтра
#define GAIN ((R_FB + R_GND) / R_GND) //коэффициент усиления сигнала термопары

#define TC_V_MAX   21   //максимальное напряжение термопары, мВ
#define TC_POINTS (TC_V_MAX + 1) //количество точек таблицы

//Таблица линеаризации термопары K-типа. В таблице даны значения
//температуры в десятых долях градуса в зависимости от напряжения.
//Диапазон температур 0...+508.3°C.
//Шаг напряжения - 1 мВ, диапазон 0..+21 мВ:

const int __flash Lin[TC_POINTS] =
{
     0,  250,  495,  736,  976, // 0.. 4 мВ
  1220, 1466, 1715, 1965, 2215, // 5.. 9 мВ
  2462, 2707, 2950, 3190, 3430, //10..14 мВ
  3668, 3906, 4143, 4378, 4614, //15..19 мВ 
  4849, 5083                    //20..21 мВ
};

//коды состояний процесса:

enum
{
  TC_STOP,  //процесс остановлен
  TC_START, //фаза запуска процесса
  TC_VTC,   //процесс измерения напряжения термопары
  TC_CALC,  //процесс вычисления температуры
  TC_DONE   //процесс завершен
};

#define TCJN_MIN      0 //минимальная  температура холодного спая, x0.1°C
#define TCJN_NOM    380 //номинальная  температура холодного спая, x0.1°C
#define TCJN_MAX   1000 //максимальная температура холодного спая, x0.1°C

#define SHIFT_MIN -1000 //минимальный  сдвиг температурной шкалы, x0.1°C
#define SHIFT_NOM     0 //номинальный  сдвиг температурной шкалы, x0.1°C
#define SHIFT_MAX  1000 //максимальный сдвиг температурной шкалы, x0.1°C

#define GAIN_MIN    250 //минимальный  наклон температурной шкалы, 0.250
#define GAIN_NOM   1000 //номинальный  наклон температурной шкалы, 1.000
#define GAIN_MAX   4000 //максимальный наклон температурной шкалы, 4.000

#define ETSIGN   0xBEBE //сигнатура EEPROM

//---------- Переменные: ----------

static char State;  //состояние модуля измерения температуры
static int Temp;    //текущая температура
static int Tcj;     //текущая температура холодного спая
static int Shift;   //смещение температурной шкалы
static int Gain;    //наклон температурной шкалы

__no_init __eeprom int  ETSign; //сигнатура EEPROM
__no_init __eeprom int  ETcjn;  //Tcjn в EEPROM
__no_init __eeprom int  EShift; //Shift в EEPROM
__no_init __eeprom int  EGain;  //Gain в EEPROM

//---------- Прототипы функций: ----------

int Convert(long code, int tcj); //преобразование кода АЦП в температуру

//---------- Инициализация измерителя температуры: ----------

void TC_Init(void)
{
  //Vref = AREF, вход MUX_ADC:
  ADMUX = MUX_ADC;
  //разрешение АЦП, CK/128:
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
  DS18B20_Init();            //инициализация модуля термометра DS18B20
  //чтение EEPROM:
  if(ETSign == ETSIGN) //если сигнатура верна, чтение EEPROM
  {
    TC_SetTcjn(ETcjn);
    TC_SetShift(EShift);
    TC_SetGain(EGain);
  }
  else                 //если ошибка сигнатуры, инициализация EEPROM
  {
    TC_SetTcjn(TCJN_NOM);
    TC_SetShift(SHIFT_NOM);
    TC_SetGain(GAIN_NOM);
    ETSign = ETSIGN;
  }
  State = TC_START;          //запуск измерения
}

//---------- Процесс измерения: ----------

bool TC_Exe(bool t)
{
  static int SamCnt;                  //счетчик отсчетов АЦП
  static long AdcCode;                //код АЦП при измерении
  bool Update = 0;
  DS18B20_Exe(t);                     //измерение температуры холодного спая
  if(t)
  {
    switch(State)
    {
    //запуск процесса измерения температуры: 
    case TC_START:
      {
        SamCnt = FIR_N;               //загрузка количества отсчетов
        AdcCode = 0;                  //обнуление кода
        ADCSRA |= (1 << ADSC);        //запуск АЦП
        State = TC_VTC;               //процесс измерения
        break;
      }
    //измерение напряжения термопары: 
    case TC_VTC:
      {
        if(SamCnt)
        {
          SamCnt--;                   //счетчик отсчетов
          AdcCode += ADC;             //суммирование кода
          ADCSRA |= (1 << ADSC);      //запуск АЦП
        }
        else
        {
          State = TC_CALC;            //процесс вычисления
        }
        break;
      }
    //вычисление температуры: 
    case TC_CALC:
      {
        int tcj = DS18B20_GetT();     //чтение термометра холодного спая
        if(tcj > T_ERROR)             //если ошибка, Tcj не обновляем
        {
          if(tcj < 0) tcj = 0;        //отсечение отрицательных температур
          Tcj = tcj;                  //обновление Tcj
        }
        Temp = Convert(AdcCode, Tcj); //вычисление температуры
        Update = 1;
        State = TC_START;             //измерение закончено, запуск
        break;
      }
    }
  }
  return(Update);
}

//---------- Вычисление температуры: ----------

int Convert(long code, int tcj)
{
  //вычисляем напряжения термопары в мкВ:
  int Vtc = (((code * ADC_REF) / ADC_RES) * 1000L) / (long)(FIR_N * GAIN);
  //проверка обрыва термопары:
  if(Vtc > (long)(V_BRK * 1E3)) return(TC_BRK);
  //вычисляем эквивалентное напряжения холодного спая:
  //делаем приближение, что в диапазоне рабочих температур
  //холодного спая коэффициент термопары постоянен
  //tcj имеет дискретность TCJ_RES
  //TC_K имеет размерность мкВ/°C
  //Vcj представлено в мкВ
  int Vcj = tcj * (int)(TCJ_K * TCJ_RES);
  //вычисляем напряжение термопары с компенсацией холодного спая:
  int Vhj = Vtc + Vcj;
  //находим целое число милливольт:
  signed char Index = Vhj / 1000;
  //проверяем выход за диапазон вниз:
  if(Index < 0) return(0);
  //проверяем выход за диапазон вверх:
  if(Index > TC_POINTS - 2) return(Lin[TC_POINTS - 1]);
  //читаем первую точку таблицы:
  int p1 = Lin[Index];
  //читаем вторую точку таблицы:
  int p2 = Lin[++Index];
  //вычисляем дельту на интервале 1 мВ:
  int DeltaT = p2 - p1;
  //вычисляем дробную часть милливольт:
  int DeltaV = Vhj % 1000;
  //линейная интерполяция по отрезку 1 мВ,
  //p1 - температура в десятых градуса:
  p1 = p1 + (long)DeltaV * DeltaT / 1000L;
  //применяем калибровку:
  p1 = (int)((long)p1 * Gain / GAIN_NOM) + Shift;
  return(p1);
}
         
//---------- Установка номинальной температуры холодного спая: ----------

bool TC_SetTcjn(int t)
{
  if(t >= TCJN_MIN && t <= TCJN_MAX)
  {
    Tcj = t;
    if(ETcjn != t) ETcjn = t;
    return(1);
  }
  return(0);
}

//---------- Чтение номинальной температуры холодного спая: ----------

int TC_GetTcjn(void)
{
  return(ETcjn);
}

//---------- Установка смещения температурной шкалы: ----------

bool TC_SetShift(int s)
{
  if(s >= SHIFT_MIN && s <= SHIFT_MAX)
  {
    Shift = s;
    if(EShift != s) EShift = s;
    return(1);
  }
  return(0);
}

//---------- Чтение смещения температурной шкалы: ----------

int TC_GetShift(void)
{
  return(Shift);
}

//---------- Установка наклона температурной шкалы: ----------

bool TC_SetGain(int g)
{
  if(g >= GAIN_MIN && g <= GAIN_MAX)
  {
    Gain = g;
    if(EGain != g) EGain = g;
    return(1);
  }
  return(0);
}

//---------- Чтение наклона температурной шкалы: ----------

int TC_GetGain(void)
{
  return(Gain);
}

//---------- Чтение температуры холодного спая: ----------

int TC_GetTcj(void)
{
  return(Tcj);
}

//---------- Чтение температуры: ----------

int TC_GetTemp(void)
{
  return(Temp);
}

//----------


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7414 ]     ... , , , 153, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y