Друзья сайта |
Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)
Электроника на KitPost
|
Наш опрос |
Оцените мой сайт
Всего ответов: 86
|
|
Инфракрасная паяльная станция своими руками на ARDUINO
| |
Alexandr_ | Дата: Среда, 08.02.2017, 19:55 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 814
Статус: Offline
| Форумчане, куплю-продажу и личные сделки выяснять в личке, либо в новом форуме, этот форум для вопросов по электронной части станции.
Архив по станции от hominidae с проектом efimsu ->здесь Проект Леонида, Leonid0071 "UNO-MAX6675-PC" и его доработки на форуме Амперки -> скачать
Люби грешников, ненавидь сам грех!
|
|
|
Пользователи поблагодарившие Alexandr_ за этот пост: |
|
|
DIM | Дата: Вторник, 11.12.2018, 14:25 | Сообщение # 361 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| Цитата dscOlga ( ) По поводу точки в выводе ki1, ki2 пора поставить точку. так я и поставил точку"."
Цитата dscOlga ( ) Сейчас это 4 и 7 соответственно. вот это и хотел узнать. пид нужно настраивать, у меня теперь совершенно другая станция получилась. dscOlga, с глюком что я на видио показал пальцем что делать, забить?Добавлено (11.12.2018, 14:36) --------------------------------------------- и кстати а что за лишний нолик, т.е. выставляю 4 и 7 соответственно, но когда захожу повторно в настройки, то вижу 4 0 и 7 0 соответственно? и с промежутком т.е. не 47 и 70.
|
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Вторник, 11.12.2018, 15:03 | Сообщение # 362 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) с глюком что я на видио показал пальцем что делать, забить? Проверяйте железо, может где-то наводки на max6675.
Цитата DIM ( ) и кстати а что за лишний нолик, т.е. выставляю 4 и 7 соответственно, но когда захожу повторно в настройки, то вижу 4 0 и 7 0 соответственно? и с промежутком т.е. не 47 и 70. Вот смотрите здесь Код lcd2.setCursor(8, 1); lcd2.print("I="); lcd2.print(ki2); lcd2.print(" ");
в строке lcd2.print(" "); поставьте 2 пробела. Повторите тоже в меню для ki1, kd1,kd2.
|
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Вторник, 11.12.2018, 15:47 | Сообщение # 363 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| Цитата dscOlga ( ) в строке lcd2.print(" "); поставьте 2 пробела. Повторите тоже в меню для ki1, kd1,kd2. спс. получилось.
Цитата dscOlga ( ) Проверяйте железо, может где-то наводки на max6675. проверял, наводок нет, да и не от чего, к тому же все заэкранировано, бп в норме, как бы это только с этим каналом, и всегда только при первом включении, при повторном никогда. правда промежуток должен быть в несколько секунд, не более.
|
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Вторник, 11.12.2018, 16:46 | Сообщение # 364 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) проверял, наводок нет, да и не от чего, к тому же все заэкранировано, бп в норме, как бы это только с этим каналом, и всегда только при первом включении, при повторном никогда. правда промежуток должен быть в несколько секунд, не более. А заменить мах6675 пробовали? Или хотя бы поменять мах6675 низ с верхом.
|
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Вторник, 11.12.2018, 17:56 | Сообщение # 365 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| dscOlga, не скетч не причем однозначно. заменить нечем, а местами менял меняется верх с низом так что дело в максе, но что это непонятно. Добавлено (12.12.2018, 02:22) --------------------------------------------- мах6675 заказал новый. dscOlga, подскажите как в коде добавить чтобы таймер включался в момент старта, и выключался соответственно?
|
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Среда, 12.12.2018, 06:41 | Сообщение # 366 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) дело в максе, но что это непонятно. Попробуйте отфильтровать питание.
Цитата DIM ( ) подскажите как в коде добавить чтобы таймер включался в момент старта, и выключался соответственно? Если вы имеете в виду таймер во время пайки, то нужна отдельная переменная которую вы будете увеличивать на единицу через каждый SENSOR_SAMPLING_TIME. А потом выводите на экран. Допустим так: Код int timer;
if (millis() > nextRead1) {
//Read thermocouples next sampling period //nextRead1 += SENSOR_SAMPLING_TIME; nextRead1 = millis() + SENSOR_SAMPLING_TIME;
timer++;
//-----------// //это для графиков на ПК sprintf(buf, "$%d %d;", int(Input_f2), int(Input_f1)); //график ПК //-----------// lcd2.setCursor(32, 0); lcd2.print(" \3"); lcd2.setCursor(32, 0); if (isnan(Input1)) { lcd2.print("Er"); } else { lcd2.print(tc1); } lcd2.setCursor(32, 1); lcd2.print(" \2"); lcd2.setCursor(32, 1); if (isnan(Input2)) { lcd2.print("Er"); } else { /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля, * первым аргументом идёт номер столбца. */ lcd.setCursor(18, 1); /* Выводим на дисплей число секунд, прошедших с момента старта пайки */
lcd.print(timer);
} { lcd2.print(tc2); } }
В конце пайки переменную timer нужно сбросить на ноль.
Сообщение отредактировал dscOlga - Среда, 12.12.2018, 06:43 |
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Среда, 12.12.2018, 15:17 | Сообщение # 367 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| dscOlga, поправил как вы показали код, но при старте пайки просто стоит "1" и все. куда рыть?
|
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Среда, 12.12.2018, 20:48 | Сообщение # 368 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) но при старте пайки просто стоит "1" и все. куда рыть? Вы скорее всего определили переменную timer здесь Код int timer;
if (millis() > nextRead1) {
а нужно в начале скетча, допустим так: Код #include <Wire.h> #include <EEPROM.h> #include <LiquidCrystal_I2C.h> //закомментировать если дисплей без I2C LiquidCrystal_I2C lcd(0x3f, 40, 2); //вместо (0x27) указываем адрес своего дисплея //закомментировать если дисплей без I2C LiquidCrystal_I2C lcd2(0x3e, 40, 2);
int timer=0;
byte gradus[8] = { 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000, 0b00000 }; // символ градуса
Я думал вы догадаетесь. И повторю ещё раз, не забудьте обнулить переменную timer, когда закончится пайка и(или) когда нажали клавишу cancel.
Обнулить можно вот здесь Код if (okSwitchState == LOW && button_state && ( millis() - ms_button) > 200) { ms_button = millis(); button_state = false; tone(buzzerPin, 1045, 500); //звуковой сигнал при старте профиля //update next screen updateScreen = true; curCount = 0; nextRead2 = millis(); reflowStatus = REFLOW_STATUS_ON; reflowState = REFLOW_STATE_STEP_RAMP; lcd.setCursor(16,1); lcd.print(" "); //затираем время из режима ожидания timer=0; //обнуляем таймер }
Здесь же затирается таймер в режиме ожидания, иначе он наложится.
Добавлено (12.12.2018, 22:20) ---------------------------------------------
Цитата DIM ( ) вот только как еще бы разделить на секунды\минуты для информативности, а пока только в секундах. Вот процедура для вывода времени Код void print_time (int secs) { lcd.setCursor(16,1); if (secs/60%60<10) lcd.print("0"); lcd.print((secs/60)%60); lcd.print(":"); if (secs%60<10) lcd.print("0"); lcd.print(secs%60); }
её нужно поместить в конце скетча. теперь вместо Код lcd.setCursor(18, 1); lcd.print(millis()/1000);
записываем просто Код print_time(millis() / 1000);
и вместо Код /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля, * первым аргументом идёт номер столбца. */ lcd.setCursor(18, 1); /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */ lcd.print(timer);
записываем
Сообщение отредактировал dscOlga - Среда, 12.12.2018, 22:21 |
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Четверг, 13.12.2018, 13:04 | Сообщение # 369 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| Цитата dscOlga ( ) lcd.print(timer); а где это у меня?Добавлено (13.12.2018, 14:04) --------------------------------------------- сам таймер работает, спасибо, и стартует при включении ардуино (так и хотел), но при старте пайки не обнуляется (а хотелось бы считать с нуля), а продолжает считать. и при остановки пайки тоже не обнуляется (лучше и не обнулять, а напротив останавливать таймер).
Сообщение отредактировал DIM - Четверг, 13.12.2018, 13:14 |
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Четверг, 13.12.2018, 14:26 | Сообщение # 370 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) lcd.print(timer);а где это у меня? если сделали все из сообщения 366, то должны знать где.
если нет, то у вас это должно быть вот здесь
Код if (millis() > nextRead1) {
//Read thermocouples next sampling period //nextRead1 += SENSOR_SAMPLING_TIME; nextRead1 = millis() + SENSOR_SAMPLING_TIME; //-----------// //это для графиков на ПК sprintf(buf, "$%d %d;", int(Input_f2), int(Input_f1)); //график ПК //-----------// lcd2.setCursor(32, 0); lcd2.print(" \3"); lcd2.setCursor(32, 0); if (isnan(Input1)) { lcd2.print("Er"); } else { lcd2.print(tc1); } lcd2.setCursor(32, 1); lcd2.print(" \2"); lcd2.setCursor(32, 1); if (isnan(Input2)) { lcd2.print("Er"); } else { /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля, * первым аргументом идёт номер столбца. */ lcd.setCursor(18, 1); /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */ lcd.print(millis() / 1000); } { lcd2.print(tc2); } }
вместо Код lcd.setCursor(18, 1); /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */ lcd.print(millis() / 1000);
поставьте вот это Если все правильно сделаете, то при старте пайки у вас время всегда будет начинаться с нуля и считать до окончания или отмены. После окончания пайки возвращаемся в основной режим, а время работы идёт дальше. Т.е время работы и время пайки разделены и не связаны между собой.
Сообщение отредактировал dscOlga - Четверг, 13.12.2018, 14:29 |
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Четверг, 13.12.2018, 15:25 | Сообщение # 371 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| спс. еще раз, все работает.
Сообщение отредактировал DIM - Пятница, 14.12.2018, 13:10 |
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
DIM | Дата: Среда, 19.12.2018, 13:49 | Сообщение # 372 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| Cinema, попробовал подцепить к пк и посмотреть прогой что вы дали, вот что получилось:
Добавлено (19.12.2018, 13:50) --------------------------------------------- какие выводы можно сделать по этому графику?
|
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Среда, 19.12.2018, 14:48 | Сообщение # 373 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) какие выводы можно сделать по этому графику? Надо поднастроить ПИД для низа и для верха.
|
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
DIM | Дата: Среда, 19.12.2018, 15:23 | Сообщение # 374 |
Подполковник
Группа: Пользователи
Сообщений: 172
Статус: Offline
| Цитата dscOlga ( ) Надо поднастроить ПИД как, и какие параметры подправить? вообще какой алгоритм? т.е. в какую сторону и что "убавить\добавить"?
Сообщение отредактировал DIM - Четверг, 20.12.2018, 02:26 |
|
|
Пользователи поблагодарившие DIM за этот пост: |
|
|
dscOlga | Дата: Четверг, 20.12.2018, 06:12 | Сообщение # 375 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Offline
| Цитата DIM ( ) как, и какие параметры подправить? вообще какой алгоритм? Cinema выкладывал алгоритм настройки, посмотрите в теме. А вообще настройка ПИД это, к сожалению, процесс больше творческий, чем алгоритмический. По вашему графику можно сказать, что у вас скорость нагрева верхом великовата, можно и скорость низа немного уменьшить. Для начала попробуйте ограничить максимальную мощность нагревателей и посмотрите как изменится график. Потом можно немного покрутить коэффициенты ПИД, чтобы не было перелётов и колебаний.
|
|
|
Пользователи поблагодарившие dscOlga за этот пост: |
|
|
|