Ну я конечно далекий но не настолько. У меня как нагрузка паяльник 40Вт был включен.
Вот финальная печатка U-A reg. Элементы и перемычки с нашей стороны, СМД со стороны дорожек, дорожки на плате с противоположной стороны от нас, смотрим как на плату из прозрачного текстолита. Печатать на бумаге для струйной фотопечати на лазерном принтере как есть, потом утюгом к текстолиту, дать остыть и оторвать бумагу от текстолита на сухую, без воды. На дорожках остается белясый налет( пленка закрепляющая фотобумаги, ее не снимать травить как есть).
Сверлить советую после травки.
Регулятор напряжения и тока на Arduino Pro Mini
SlidingHawk
Студент
Дымер
18 4
Отв.780 28 Мая 18, 13:06
anddin
Магистр
Астрахань
259 121
Отв.781 28 Мая 18, 13:51, через 46 мин
Ниже ссылка на трансформатор 220-12в.
Возможно ли его применение?
https://ru.aliexpress.com/...b01b783ce8fb634
Возможно ли его применение?
https://ru.aliexpress.com/...b01b783ce8fb634
Tomat7
Магистр
Черноморская губинния
236 138
Отв.782 28 Мая 18, 14:20, через 29 мин
Ниже ссылка на трансформатор 220-12в.У меня регулятор именно на таком и собран. ;D
Возможно ли его применение?anddin, 28 Мая 18, 13:51
Можно еще меньше найти - https://ru.aliexpress.com/....274233ed8s7urs
В этой ветке уже кто-то писал что можно любой транс использовать выдающий на вторичной обмотке от 9 до 20 вольт.
поставлю на выходе диодный мост, и сглаживающие кондеры на 0,1 и 10 000 мкф, потом стрелочный вольтметрSlidingHawk, 28 Мая 18, 12:17Только сейчас обратил внимание... Ты же вроде спираль 300 Вт греть собирался, зачем постоянка??
SlidingHawk
Студент
Дымер
18 4
Отв.783 28 Мая 18, 15:06, через 47 мин
Все получилось, все работает, на выходе диодный мост GSIB 1580 И пара конденсаторов 680мкф 400 вольт.
Стабильность 149-150 вольт при напряжении в сети 201-219 вольт.
Добавлено через 4мин.:
Постоянка для того, что при постоянке, нихром не дает дребезга при резе пенополистирола, + конденсаторы у меня на постоянку были вот и поставил их. )
Добавлено через 15ч. 34мин.:
Как раз под мою плату трансик. )))
Стабильность 149-150 вольт при напряжении в сети 201-219 вольт.
Добавлено через 4мин.:
Ты же вроде спираль 300 Вт греть собирался, зачем постоянка??Tomat7, 28 Мая 18, 14:20
Постоянка для того, что при постоянке, нихром не дает дребезга при резе пенополистирола, + конденсаторы у меня на постоянку были вот и поставил их. )
Добавлено через 15ч. 34мин.:
Ниже ссылка на трансформатор 220-12в.
Возможно ли его применение?anddin, 28 Мая 18, 13:51
Как раз под мою плату трансик. )))
Отв.784 29 Мая 18, 08:18
Оффтоп.
SlidingHawk, Вот у тебя заморочки. Всегда резал полистирол постоянкой, один раз подобрав режим длиной спирали.(Не рабочей части а именно спирали.) И плюс стабилизированная скорость подачи, которая имеет гораздо большую роль нежели стабилизация напряжения питания.
SlidingHawk, Вот у тебя заморочки. Всегда резал полистирол постоянкой, один раз подобрав режим длиной спирали.(Не рабочей части а именно спирали.) И плюс стабилизированная скорость подачи, которая имеет гораздо большую роль нежели стабилизация напряжения питания.
Как раз под мою плату трансик.SlidingHawk, 28 Мая 18, 15:06500 рублей за трансик? Неужели нигде не валяются блоки питания? Я себе выпаял оттуда и норма. Только БП должен быть не импульсным, старого образца.
SlidingHawk
Студент
Дымер
18 4
Отв.785 29 Мая 18, 19:47
SlidingHawk, Вот у тебя заморочки. Всегда резал полистирол постоянкой, один раз подобрав режим длиной спирали.(Не рабочей части а именно спирали.)SA1348, 29 Мая 18, 08:18
Ну если бы выдели мой станок, то так бы не говорили, ))) У меня стоит 3 метра спирали, и система динамического изменения длины режущей части от 100мм до 1200. Подача задается програмно для разных резов. Вся проблема в том что у нас в сети прогулки вольтажа от 170 до 230 в зависимости от времени суток, и +- 15 вольт не зависимо от чего не понятно, более мение стабильно с 2-х до 5 утра. А моя программа выреза 14 пар крыльев для самолетиков занимает примерно 4 часа. И вместо того что бы загрузить пену в станок и пойти спать приходится сидеть и крутить ручку димера что бы держать хоть +- 3 вольта.
А сегодня ночью загрузил 7 листов пенопласта и утром получил 300 метров багетов (потолочных плинтусов) с точностью вырезки примерно в 0.02 мм. на глаз не видно а на ощупь ощутимо, но не критично.
Добавлено через 2мин.:
500 рублей за трансик?SA1348, 29 Мая 18, 08:18
У нас он стоит 50грн. это примерно 1.6$ для сравнения "биг мак" стоит 45 грн.
Добавлено через 1дн. 23ч. 21мин.:
Мужики, благодарочка всем кто приложил руку и голову к этому девайсу, сегодня еще раз протестировал с в жестком режиме, 7 часов реза, полет нормальный качество реза, просто замечательное, резал днем, в сети были скачки до 15 вольт в разные стороны, в среднем в сети было 205 вольт. стабилизация 157 прыгала 156-158. Доволен как слон. Еще раз всем спасибо.
tronik
Студент
Самара
26 6
Отв.786 01 Июня 18, 19:41
Приветствую!
Пользую данный регулятор тока как отдельный контроллер тэна с управлением по serial. Озадачился переделать куб под аналог ПВК, тоесть доделать к нему пароводяную рубашку. В связи с вновь возникшими задачами изменились требования к контроллеру тена, а именно теперь он должен работать не только как регулятор мощности, но и как пид регулятор, тоесть если по serial приходит значение мощности, держим эту мощность, если значение температуры - держим температуру. Как это можно реализовать?
Пользую данный регулятор тока как отдельный контроллер тэна с управлением по serial. Озадачился переделать куб под аналог ПВК, тоесть доделать к нему пароводяную рубашку. В связи с вновь возникшими задачами изменились требования к контроллеру тена, а именно теперь он должен работать не только как регулятор мощности, но и как пид регулятор, тоесть если по serial приходит значение мощности, держим эту мощность, если значение температуры - держим температуру. Как это можно реализовать?
sebra
Куратор
Республика Коми
147 85
Отв.787 03 Июня 18, 18:39
Как это можно реализовать?tronik, 01 Июня 18, 19:41
ПИД у вас должен быть реализован в вашей автоматике, и автоматика же дает команду на требуемую мощность регулятору. Не стоит пихать невпихуемое в простой регулятор напряжения/тока он для этого не предназначен =) Возможно стоит посмотреть в сторону автоматики, например АВВИ, как правило запросы по функционалу со временем только растут.
m16
Модератор
Тамбов
1.9K 1K
Отв.788 03 Июня 18, 21:11
Не стоит пихать невпихуемое в простой регулятор напряженияsebra, 03 Июня 18, 18:39поправлю - простой стабилизатор напряжения(тока).
tronik , пид нафик в нашем случае не нужен, сей стабилизатор напряжения(тока) выполняет те же функции пида при значительно компактном коде
tronik
Студент
Самара
26 6
Отв.789 03 Июня 18, 21:35, через 24 мин
Идею понял, регулятор не трогаю, буду добиваться нужной температуры путем подачи требуемой мощности.Спасибо.
сообщение удалено
Максим_В
Новичок
Тольятти
9
Отв.790 13 Июня 18, 18:53
Здравствуйте. Собрал в итоге по схеме и прошивке из этого сообщения [сообщение #13179698]
1. ТЭН 1500Вт, в программе записал 32 ома. Напряжение при "Разгоне" просело до 207В, потребляет по ваттметру 1350-отображает 1265,при потребляемой 724 показывает 670 Вт. Что подправить? Максимальную мощность или сопротивление? Это не основной вопрос.
2.Изначально не включалась нагрузка. При касании землёй осциллографа минуса управы, импульсы доходили до симистора. Повесил конденсатор 1нФ*1000В с минуса на вх. 220В(последнее фото, около светодиода). Всё вроде заработало, но в итоге сегодня прогонял с водой и заметил что скачет измеренная мощность ниже 800Вт, особенно когда дотрагиваешься радиатора симистора(даже слышно ну и по светодиоду заметно). Подскажите пожалуйста, кто знает как побороть. Компоновку выкладываю. Почему-то здесь не смог прикрепить, а ссылки на др. ресурсы только после 10 сообщений
Добавлено через 33мин.:
Вот
Добавлено через 12ч. 6мин.:
В итоге с основным вопросом разобрался. Сначала подтянул вывод детектора к плюсу через 5к2-не помогло, затем через 1К-всё стабильно.
Соберите схему полностью, протестируйте, остануться вопросы пишите.sebra, 16 Апр. 18, 14:49В железе не подтянул, детектор ноля-подтянул в программе.Начал прогонять на реальной нагрузке, измеренное сопротивление 32 Ома, мощность 1600Вт - кратковременно, затем снижается( в программе выставил 1500 максимальная(по "паспорту" и 32 ОМ)). Вопросы:
1. ТЭН 1500Вт, в программе записал 32 ома. Напряжение при "Разгоне" просело до 207В, потребляет по ваттметру 1350-отображает 1265,при потребляемой 724 показывает 670 Вт. Что подправить? Максимальную мощность или сопротивление? Это не основной вопрос.
2.Изначально не включалась нагрузка. При касании землёй осциллографа минуса управы, импульсы доходили до симистора. Повесил конденсатор 1нФ*1000В с минуса на вх. 220В(последнее фото, около светодиода). Всё вроде заработало, но в итоге сегодня прогонял с водой и заметил что скачет измеренная мощность ниже 800Вт, особенно когда дотрагиваешься радиатора симистора(даже слышно ну и по светодиоду заметно). Подскажите пожалуйста, кто знает как побороть. Компоновку выкладываю. Почему-то здесь не смог прикрепить, а ссылки на др. ресурсы только после 10 сообщений
Добавлено через 33мин.:
Вот
Добавлено через 12ч. 6мин.:
В итоге с основным вопросом разобрался. Сначала подтянул вывод детектора к плюсу через 5к2-не помогло, затем через 1К-всё стабильно.
Tomat7
Магистр
Черноморская губинния
236 138
Отв.791 14 Июня 18, 10:53
детектор ноля-подтянул в программе.
При касании землёй осциллографа минуса управы, импульсы доходили до симистора. Повесил конденсатор 1нФ*1000В с минуса на вх. 220В(последнее фото, около светодиода).
Сначала подтянул вывод детектора к плюсу через 5к2-не помогло, затем через 1К-всё стабильно.Максим_В, 13 Июня 18, 18:53
Как-то слишком много "сложностей" сразу и везде - и в программе, и в железе.
Должно работать безо всяких "доработок".
А что за светодиод? Куда подключен??
Максим_В
Новичок
Тольятти
9
Отв.792 14 Июня 18, 13:11
Подтяжка сейчас только в железе. Светодиод параллельно(через 680 ом) светодиоду оптопары симистора.
Выставил в программе сопротивление тэна 35 Ом, примерно всё соответствует, работает стабильно. Всем участвовавшим в разработке этого стабилизатора, большое спасибо!
Выставил в программе сопротивление тэна 35 Ом, примерно всё соответствует, работает стабильно. Всем участвовавшим в разработке этого стабилизатора, большое спасибо!
dev11bk
Студент
Салават
20 31
Отв.793 19 Июля 18, 22:28
Всем привет!
Покурил тему пару-тройку дней. Желание бешенное появилось собрать сие чудо.
Что имеется:
1. ТЭН 4.5 кВт
2. Примитивный блок управления на симисторе BTA10 (точнее пока не могу сказать, какой именно). В блоке китайский диммер с алика (который с регулировкой потенциометром) якобы на 10 кВт, измеритель мощности (синенький жк экран с 4 показаниями, думаю всем знаком) и автомат. Ток и напряжение измеряется на входе, дабы контролировать потребляемую мощность.
3. Постоянно приходится подкручивать регулировку, так как мощность скачет +-250 Вт, судя по показанию измерителя.
Чего хочется:
1. Доработать этот хлам до стабилизированного.
2. Чтобы осталась регулировка потенциометром. (тут есть мысль подключить на аналоговый вход ардуины 10К потенциометр и конвертировать его в % задания)
В связи с этим всем несколько вопросов:
1. Возможно ли построить на этом симисторе стабилизированный регулятор? Может кто делал уже? Или лучше будет купить предложенный в схеме симистор?
2. Какую схему выбрать из предоставленных в первом посте? Наиболее простую что-ли. Мне главное, чтобы стабильная мощность подавалась на ТЭН. Измеритель хочу оставить и по нему ориентироваться.
3. Может проще купить в магазине стабилизатор напряжения и в него втыкать мой комплект? Но очень хочется заморочиться с ардуино.
Немного о себе
- в схемотехнике близок к нулю
- с паяльником дружу
- в программировании волоку
- ТЭН использую максимум до 3 кВт, так как страшно за китаюскую железяку и проводку.
Прошу сильно не шпынять, очень хочу разобраться и сделать. Так сказать первый шаг к автоматике в дистилляции.
Покурил тему пару-тройку дней. Желание бешенное появилось собрать сие чудо.
Что имеется:
1. ТЭН 4.5 кВт
2. Примитивный блок управления на симисторе BTA10 (точнее пока не могу сказать, какой именно). В блоке китайский диммер с алика (который с регулировкой потенциометром) якобы на 10 кВт, измеритель мощности (синенький жк экран с 4 показаниями, думаю всем знаком) и автомат. Ток и напряжение измеряется на входе, дабы контролировать потребляемую мощность.
3. Постоянно приходится подкручивать регулировку, так как мощность скачет +-250 Вт, судя по показанию измерителя.
Чего хочется:
1. Доработать этот хлам до стабилизированного.
2. Чтобы осталась регулировка потенциометром. (тут есть мысль подключить на аналоговый вход ардуины 10К потенциометр и конвертировать его в % задания)
В связи с этим всем несколько вопросов:
1. Возможно ли построить на этом симисторе стабилизированный регулятор? Может кто делал уже? Или лучше будет купить предложенный в схеме симистор?
2. Какую схему выбрать из предоставленных в первом посте? Наиболее простую что-ли. Мне главное, чтобы стабильная мощность подавалась на ТЭН. Измеритель хочу оставить и по нему ориентироваться.
3. Может проще купить в магазине стабилизатор напряжения и в него втыкать мой комплект? Но очень хочется заморочиться с ардуино.
Немного о себе
- в схемотехнике близок к нулю
- с паяльником дружу
- в программировании волоку
- ТЭН использую максимум до 3 кВт, так как страшно за китаюскую железяку и проводку.
Прошу сильно не шпынять, очень хочу разобраться и сделать. Так сказать первый шаг к автоматике в дистилляции.
Mnz
Магистр
Город
254 86
Отв.794 19 Июля 18, 23:21, через 53 мин
1. ТЭН 4.5 кВт2. Примитивный блок управления на симисторе BTA10dev11bk, 19 Июля 18, 22:28Этот симистор потянет максимум 2.5 кВт (если китайский, смело делите на 2 или даже 4). От 4.5 киловатного ТЕНа у симистора случится неожиданный визит пушистого зверька (придет писец) и "симистор на радостях" пустит белый дым (а если "повезет" так же и искры с огнем со всеми последствиями)!
Берите BTA40.
killboss
Студент
Пермский край
33 6
Отв.795 20 Июля 18, 11:56
У меня mac15mg, на тэн 3,15 квт. Пока полет нормальный
sebra
Куратор
Республика Коми
147 85
Отв.796 20 Июля 18, 13:05
Какую схему выбрать из предоставленных в первом посте? Наиболее простую что-ли.dev11bk, 19 Июля 18, 22:28
РЕГУЛЯТОР ТОКА НА ACS712
тут есть мысль подключить на аналоговый вход ардуины 10К потенциометрdev11bk, 19 Июля 18, 22:28
Только надо подключить энкодер вместо потенциометра, если в программировании разбираетесь то проблем не возникнет.
Про симистор уже сказали, не стоит экономить на безопасности, берите с запасом. А то как известно кроилово ведет к попадалову)
dev11bk
Студент
Салават
20 31
Отв.797 20 Июля 18, 22:36
Спасибо за советы всем!
Почему не хочу регулятор тока: шумный датчик и ввод дополнительных констант (сопротивление тэна)
Нужно максимально простое и универсальное устройство. Всё, чего мне сейчас не хватает от моей балалайки - это стабилизации.
Пока идея такая:
Собрать регулятор напряжения, только задавать напругу не через сериал порт, а потенциометром. Для энкодера нужна будет визуализация, а тут минимум и максимум очевиден. Измерительный экранчик оставлю на входе, соберу по схеме регулятор, подстрою показания и замер регулятором через сериал порт. Заказал BTA40-700. По остальным компонентам вроде всё понятно. Остается вопрос с трансформатором. Я так понимаю подойдет любой транс на 12 В из старой зарядки для мобильника?
С ардуинки визуализации никакой не будет. На выходе должно получиться универсальное устройство с замером параметров питания и регулировкой напряжения потенциометром и стабилизацией напряжения. Я правильно рассуждаю?
Добавлено через 3мин.:
По идее можно и его воткнуть плюс энкодер. На старте задавать минимальное напряжение, при регулировке тока смотреть показания на том же входном измерительном экране
Почему не хочу регулятор тока: шумный датчик и ввод дополнительных констант (сопротивление тэна)
Нужно максимально простое и универсальное устройство. Всё, чего мне сейчас не хватает от моей балалайки - это стабилизации.
Пока идея такая:
Собрать регулятор напряжения, только задавать напругу не через сериал порт, а потенциометром. Для энкодера нужна будет визуализация, а тут минимум и максимум очевиден. Измерительный экранчик оставлю на входе, соберу по схеме регулятор, подстрою показания и замер регулятором через сериал порт. Заказал BTA40-700. По остальным компонентам вроде всё понятно. Остается вопрос с трансформатором. Я так понимаю подойдет любой транс на 12 В из старой зарядки для мобильника?
С ардуинки визуализации никакой не будет. На выходе должно получиться универсальное устройство с замером параметров питания и регулировкой напряжения потенциометром и стабилизацией напряжения. Я правильно рассуждаю?
Добавлено через 3мин.:
РЕГУЛЯТОР ТОКА НА ACS712sebra, 20 Июля 18, 13:05Есть какие-нибудь плюсы перед регулятором напряжения?
По идее можно и его воткнуть плюс энкодер. На старте задавать минимальное напряжение, при регулировке тока смотреть показания на том же входном измерительном экране
AleksVM
Новичок
Москва
6
Отв.798 28 Июля 18, 14:34
Собрал я регулятор напряжения на acs712 , все работает отлично , использовал скетч Chatterbox. Провел несколько дистиляций , решил добавить в схему термометр на ds18b20 . Переписал скетч , но тут ждала меня неудача , регулятор перестал работать . Стал выяснять в чем может быть дело, посмотрев библиотеку oneware а там сплошные запреты прерывания и delay , которые мешают работы открытию bta. Вопрос есть ли у кого наработки по внедрению в регулятор опроса ds18b20 ?
Добавлено через 3мин.:
Добавлено через 3мин.:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <EEPROM.h>
//адреса датчиков температуры
//byte Thermometer2[8] = {0x28, 0xFF, 0x0B, 0x88, 0x86, 0x16, 0x05, 0x37}; //температура куба
//byte Thermometer1[8] = {0x28, 0xFF, 0x27, 0xC6, 0x61, 0x16, 0x04, 0xF8}; //температура колонны
//Конфигурация пинов
//#define PIN_A 2 //Пин А энкодера
//#define PIN_SW 3 //Пин кнопки
//#define PIN_B 4 //Пин B энкодера
#define PIN_DS_KUB 5 // Пин датчика температуры куба
#define PIN_DS_DIS 10 // Пин датчика температуры дистиллятора
#define SW 7 // энкодер SW кнопка
#define CLK 8 // энкодер CLC
#define DT 9 // энкодер DT
#define detect 3 // детектор нуля
#define triac 5 // тиристор
#define PARAMS1_NUMBER 8 //Количество параметров подменю 1
LiquidCrystal_I2C lcd(0x27, 16, 2);
OneWire ds_kub(PIN_DS_KUB); //Датчик температуры куба
OneWire ds_dis(PIN_DS_DIS); //Датчик температуры дистиллятора
double r_ten = 25.6; //сопротивление ТЭНа 2кВт
double ACS_coeff = 0.073242188; // Коэффициент датчика ACS712 |5А - 0.024414063 | 20А - 0.048828125 | 30A - 0.073242188 |
double t_kub,t_dis; //Переменные температуры полученные с датчиков
byte error_t_kub,error_t_dis=0; //Счетчики ошибок считывания температур
unsigned long temp_refresh; //Таймер для обновления температур
//Остальные параметры
char V[]="V1.0.1";
//Массив значений параметров 1(целочисленные)
byte param1[PARAMS1_NUMBER]={0,0,0,0,20,1,5,10}; //0,Emkost,Water,Stop,Kstop,t_sirena ,time_refresh,refresh_bluetooth,time_sirena
//------------------------------------
double max_I = 10; //максимальный ток А
double step_I = 0.01; //шаг установки тока А
//------------------------------------
String Var;
String T1, T2;
volatile unsigned long Iism = 0; //мгновенные значения тока
volatile int cntr = 0; // счетчик в обработчике прерывания
volatile unsigned long Isumm = 0; // переменная для хранения суммы квадратов
double real_I = 0; //переменная расчета RMS тока
double real_W = 0; //рассчитанная мощность
double sqrtUsum = 0; //переменная расчете квадратного корня
double ust_I = 0;//установленный ток
unsigned long previousMillis = 0;
unsigned long previousMillis_info = 0;
unsigned long displayMillis = 0;
unsigned long reg_time = 0;
int angle_I = 2250;
int angle_I_ocr = 2250;
int t = 0;
int zero = 0;
int I_offset = 0;
int indicator_I;
unsigned long showTime = 0; //время обновления экрана
double buffer_ust_I = 0;
unsigned long encoderMillis = 0;
int encoder_CLK = 0;
int encoder_DT = 0;
int encoder_CLK_prev = 0;
byte set_menu_I = false;
int SW_time_press = 0;
int time_press_SW = 0;
int SW_press_time = 0;
void setup(void) {
Serial.begin(9600);//активируем прием сообщения
pinMode(detect, INPUT); //детектор нуля
pinMode(triac, OUTPUT); //тиристор
pinMode(CLK, INPUT); //Выходы энкодера
pinMode(DT, INPUT);
pinMode(SW, INPUT);
digitalWrite(SW, HIGH); //включаем подтягивающий резистор
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Distiller ");
lcd.print(V);
delay(3000);
// tone(PIN_SIRENA, 700, 700);
// delay(100);
// noTone(PIN_SIRENA);
lcd.clear();
//При удержании кнопки при запуске параметры скидываются на заводские
if(digitalRead(SW)==LOW)
{
// eeprom_write();
lcd.setCursor(0, 0);
lcd.print("Reset settings");
delay(3000);
lcd.clear();
// button_pressed = 0;
}
// start(ds_kub);
// start(ds_dis);
//===========================================================Настройка АЦП
ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << MUX2) | (0 << MUX1) | (1 << MUX0); //
/* Биты 7:6 – REFS1:REFS0. Биты выбора опорного напряжения. Если мы будем менять эти биты во время преобразования,
то изменения вступят в силу только после текущего преобразования. В качестве опорного напряжения может быть выбран AVcc
(ток источника питания), AREF или внутренний 2.56В источник опорного напряжения.
Рассмотрим какие же значения можно записать в эти биты:
REFS1:REFS0
00 AREF
01 AVcc, с внешним конденсатором на AREF
10 Резерв
11 Внутренний 2.56В источник, с внешним конденсатором на AREF
Бит 5 – ADLAR. Определяет как результат преобразования запишется в регистры ADCL и ADCH.
ADLAR = 0
Биты 3:0 – MUX3:MUX0 – Биты выбора аналогового канала.
MUX3:0
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7*/
//=======================================================================================
ADCSRA = B11101111; //Включение АЦП
/* Бит 7 – ADEN. Разрешение АЦП.
0 – АЦП выключен
1 – АЦП включен
Бит 6 – ADSC. Запуск преобразования (в режиме однократного
преобразования)
0 – преобразование завершено
1 – начать преобразование
Бит 5 – ADFR. Выбор режима работы АЦП
0 – режим однократного преобразования
1 – режим непрерывного преобразования
Бит 4 – ADIF. Флаг прерывания от АЦП. Бит устанавливается, когда преобразование закончено.
Бит 3 – ADIE. Разрешение прерывания от АЦП
0 – прерывание запрещено
1 – прерывание разрешено
Прерывание от АЦП генерируется (если разрешено) по завершении преобразования.
Биты 2:1 – ADPS2:ADPS0. Тактовая частота АЦП
ADPS2:ADPS0
000 СК/2
001 СК/2
010 СК/4
011 СК/8
100 СК/16
101 СК/32
110 СК/64
111 СК/128*/
//===========================================================
ACSR = (1 << ACD);
//------ Timer1 ---------- Таймер задержки времени открытия триака после детектирования нуля (0 триак не откроется)
TCCR1A = 0x00; //
TCCR1B = 0x00; //
TCCR1B = (0 << CS12) | (1 << CS11) | (1 << CS10); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR1B |= (1<<CS10); // CLK/1 = 0,0000000625 * 1 = 0,0000000625, 0,01с / 0,0000000625 = 160000 отсчетов 1 полупериод
// TCCR1B |= (1<<CS11); // CLK/8 = 0,0000000625 * 8 = 0,0000005, 0,01с / 0,0000005 = 20000 отсчетов 1 полупериод
// TCCR1B |= (1<<CS10)|(1<<CS11); // CLK/64 = 0,0000000625 * 64 = 0,000004, 0,01с / 0,000004 = 2500 отсчетов 1 полупериод
// TCCR1B |= (1<<CS12); // CLK/256 = 0,0000000625 * 256 = 0,000016, 0,01с / 0,000016 = 625 отсчетов 1 полупериод
// TCCR1B |= (1<<CS10)|(1<<CS12); // CLK/1024
// Верхняя граница счета. Диапазон от 0 до 255.
OCR1A = 0; // Верхняя граница счета. Диапазон от 0 до 65535.
// Частота прерываний будет = Fclk/(N*(1+OCR1A))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK1 |= (1 << OCIE1A) | (1 << TOIE1); // Разрешить прерывание по совпадению и переполнению
attachInterrupt(1, zero_crosss_int, RISING);//вызов прерывания при детектировании нуля
}
//======================================================== Прерывание по нулю
void zero_crosss_int() {
TCNT1 = 0;
OCR1A = angle_I_ocr;
zero++;
}
//======================================================== Обработка таймера по совпадению нуля
ISR (TIMER1_COMPA_vect)
{
PORTD |= (1 << PORTD5);
TCNT1 = 65535 - 200; //Импульс включения симистора 65536 - 1 - 4 мкс, 2 - 8 мкс, 3 - 12 мкс и тд
}
ISR (TIMER1_OVF_vect) { //timer1 overflow
PORTD &= ~(1 << PORTD5);
TCNT1 = OCR1A + 1;
}
//======================================================== Обработка прерывания АЦП для расчета среднеквадратичного тока
ISR(ADC_vect)
{
byte An_pin = ADCL;
byte An = ADCH;
Iism = ((An << + An_pin) - 512;
Iism *= Iism;// возводим значение в квадрат
Isumm += Iism; // складываем квадраты измерений
cntr++;
}
void parseParams(String inputString) { //Функция разбора принятой в Serial port строки
String bb = inputString;
if (bb.substring(0, 2) == "TW") {
T1 = bb.substring(bb.indexOf("TW", 2) + 3); //команда
ust_I = T1.toFloat(); //Выставленный ток с Serial порта
buffer_ust_I = ust_I;
}
}
void loop(void) {
temperatura();
//==================================================================================
while (Serial.available()) { //Serial port, пока не конец сообщения, читаем данные и формируем строку
char ch = Serial.read();
Var += ch;
if (ch == '\n') {
parseParams(Var); //вызываем функцию разбора принятой строки
Var = "";
}
}
if (zero >= 6) {//расчет среднеквадратичного//zero - количество полупериодов дря рассчета среднеквадратичного
sqrtUsum = Isumm / cntr; //
real_I = sqrt(sqrtUsum) * ACS_coeff; //
cntr = 0;
Isumm = 0;// обнуляем суммы напряжений
zero = 0;
real_W = (real_I * real_I * r_ten);
}
//===================================================================Меню установки тока
if (digitalRead(SW) == LOW) { //считаем сколько времени нажата 1 кнопка
if (millis() - SW_time_press > 1) {
SW_press_time++;
SW_time_press = millis();
}
}
if (digitalRead(SW) == HIGH) {//очищаем счетчик если кнопка 1 отпущена
SW_press_time = 0;
}
if ( SW_press_time >= 100) { //если более хх мс то кнопка 1 нажата - режим установки тока
SW_press_time = 0;
if (!set_menu_I) {//и не режим установки
set_menu_I = true;
}
else {
set_menu_I = false;
}
}
//=========================================================================Энкодер
if (set_menu_I) {
if (millis() >= (encoderMillis + 5)) { // проверяем каждые 5мс (200 Гц)
encoder_CLK = digitalRead(CLK); // считываем состояние выхода А энкодера
encoder_DT = digitalRead(DT); // считываем состояние выхода B энкодера
if ((!encoder_CLK) && (encoder_CLK_prev)) { // если состояние изменилось с положительного к нулю
if (encoder_DT) {
// выход DT в полож. сост., значит вращение по часовой стрелке
// увеличиваем
if (buffer_ust_I <= max_I - step_I) buffer_ust_I = buffer_ust_I + step_I;
}
else {
// выход DT в 0 сост., значит вращение против часовой стрелки
// уменьшаем
if (buffer_ust_I >= 0 + step_I) buffer_ust_I = buffer_ust_I - step_I;
}
}
encoder_CLK_prev = encoder_CLK; // сохраняем значение А для следующего цикла
encoderMillis = millis();
}
}
//==============================================Регулятор тока
if (millis() - previousMillis >= 15) { //Если регулировка долгая то уменьшите значение, если видно частые изменения регулировки то увеличте значение
previousMillis = millis();
if (real_I > ust_I + 0.05) {
angle_I++;
}
if (real_I < ust_I - 0.05) {
angle_I--;
}
if (real_I < ust_I + 0.05 && real_I > ust_I - 0.05) {
angle_I = angle_I;
}
if (angle_I > 2250) {
angle_I = 2250;
}
if (angle_I <= 1) {
angle_I = 1;
}
}
//---------------------------------------------------------------
if (ust_I < 0 || buffer_ust_I < 0) { //Если меньше 0, то 0
ust_I = 0;
buffer_ust_I = 0;
}
ust_I = (buffer_ust_I > 0) ? buffer_ust_I : 0;
if (ust_I == 0) {
TIMSK1 = 0x00;
PORTD &= ~(1 << PORTD5);
}
else
{
TIMSK1 |= (1 << OCIE1A) | (1 << TOIE1);
}
//------------------------------------
angle_I_ocr = angle_I;
//=========================Дисплей
if (millis() - displayMillis >= 300) {
displayMillis = millis();
lcd.setCursor(0, 0);
lcd.print("TOK:");
lcd.print(real_I);
lcd.print(" ");
//lcd.print(int(real_W));
//lcd.print("W");
lcd.print("D ");
lcd.print(t_dis,1);
lcd.setCursor(0, 1);
lcd.print("UST:");
lcd.print(ust_I);
if (set_menu_I) {
lcd.print("--->");
lcd.print(buffer_ust_I);
}
}
//=========================Информация в порт раз в секунду
if (millis() - previousMillis_info >= 1000) {
previousMillis_info = millis();
Serial.print("realI "); //Измеренный среднеквадратичный ток
Serial.println(real_I);
Serial.print("ustI "); //Установленный выходной ток
Serial.println(ust_I);
Serial.print("angle "); //Установленный выходной ток
Serial.println(angle_I);
Serial.println("-----------------");
}
//========================================================
}
//-----------------------------------------------Считывание температуры------------------------------------------------------//
//Команда на чтение температуры из памяти датчика
double get_temperature(OneWire ds)
{
byte data[9];
ds.reset();
//Запрос температуры из памяти прибора
ds.write(0xCC);
ds.write(0xBE);
ds.read_bytes(data,9);
if(ds.crc8(data,8)!=data[8]||(data[5]!= 0xFF))
{
return 404;
}
double t = (data[1]<< +data[0];
t = t*0.0625;
return t;
}
//Команда на получение температуры с датчика и конвертации
void start(OneWire ds)
{
ds.reset();
//Запуск чтения и конвертации температуры
ds.write(0xCC);
ds.write(0x44);
}
//Получение и обработка температуры
void temperatura()
{
//Замер температуры раз в минуту
if((millis()-temp_refresh)>param1[5]*1000)
{
// pressure();
double tmp;
//Запрашиваем температуру куба
tmp = get_temperature(ds_kub);
start(ds_kub);
if(tmp < 110)
{
// t_kub = tmp+(760-Davlenie)*0.035; //Измеренная температура куба с поправкой на давление
t_kub = tmp;
error_t_kub = 0;
// sirena_stop();
}
else
{
if(error_t_kub < 3)
{
error_t_kub++;
}
}
//Запрашиваем температуру дистиллятора
tmp = get_temperature(ds_dis);
start(ds_dis);
if(tmp < 110)
{
t_dis = tmp; //Измеренная температура пара с поправкой на давление
// t_dis = tmp+(760-Davlenie)*0.035; //Измеренная температура пара с поправкой на давление
// t_dis = t_dis+correct_temp();
error_t_dis = 0;
// sirena_stop();
}
else
{
if(error_t_dis < 3)
{
error_t_dis++;
}
}
}
}
Chatterbox
Специалист
Калуга
123 60
Отв.799 28 Июля 18, 15:28, через 55 мин
Вопрос есть ли у кого наработки по внедрению в регулятор опроса ds18b20 ?AleksVM, 28 Июля 18, 14:34Разочарую. С этой библиотекой даже не пытайся скрестить регулятор работающий на прерывании. В принципе если пренебречь некоторыми циклами регулировки, то двтчик можно пристроить. Но я даже не стал пытаться. Дешевле сделать термометр на отдельном контроллере. И связать их между собой. Важна конечная задача.