Терморегулятор для ламинатора
|
|
rybkinleo |
Дата: Ср, 23.11.2011, 01:44 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 28.05.2008
Статус:
Offline
|
Сделал по-быстрому примитивный терморегулятор для ламинатора - для ЛУТ. В качестве датчика - диод (стырил идею в интернете). Индикатор - 4 разряда семисегментный. Контроллер под руками был Pic16f690. Силовая часть - твердотельное реле Cosmo. Инструкция по применению - на листочке проекта в Proteus 7.8 Sp2. Калибровка датчика по двум точкам. Единственно - не хватило времени и сил сделать PID регулирование, что было бы гораздо лучше. А то так уж очень примитивно... Если кто-нибудь доведёт до ума - вот будет здорово!!! А так устройство уже год работает с простейшим ламинатором Fellowes и качество ЛУТ заметно повышает.
Сообщение отредактировал
rybkinleo - Ср, 23.11.2011, 02:02
|
|
|
|
ADMIN |
Дата: Ср, 23.11.2011, 17:10 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Да почему статьей не оформляет никто????? Ведь это целая статья. Выложил в форуме - и забыл. Блин... Ведь можно описание придумать - фоток наделать, ну видео снять, в конце концов. Почему не так? Ну ведь объяснял же уже. Еще раз повторюсь - такие материалы - выкладывайте в каталог статей, оформив все как следует. Как это делать , я писал уже.
|
|
|
|
rybkinleo |
Дата: Ср, 23.11.2011, 19:26 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 28.05.2008
Статус:
Offline
|
Вот, вроде сделал...
|
|
|
|
rybkinleo |
Дата: Вт, 06.12.2011, 16:50 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 28.05.2008
Статус:
Offline
|
Вот ещё фотка потрохов. Добавлено (06.12.2011, 16.50.05) --------------------------------------------- Твердотельное реле переключается в момент перехода через ноль, поэтому применить простую ШИМ для регулировки мощности не получится. Подскажите, пожалуйста, что можно предпринять в этом случае? Может быть ШИМ с большим (секунды) периодом? Для нагревателя это годится. А как это написать?
|
|
|
|
ivan_fd |
Дата: Вт, 06.12.2011, 22:26 | Сообщение # 5 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (rybkinleo) Подскажите, пожалуйста, что можно предпринять в этом случае?
Нужно ловить переход через "0" и далее методом фазоимпульсного управления.
|
|
|
|
brown |
Дата: Вт, 06.12.2011, 22:57 | Сообщение # 6 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Либо как писал ivan_fd, Quote ... нужно делать по алгоритму Брезенхема, пропускать полупериоды.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
rybkinleo |
Дата: Ср, 18.01.2012, 21:40 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 28.05.2008
Статус:
Offline
|
Сделал проще - П-регулятор:
Config FCMEN_ON, IESO_ON, BOR_ON, CPD_OFF, CP_OFF, MCLRE_OFF, PWRTE_OFF, WDT_OFF, INTRC_OSC_NOCLKOUT
Device = 16F690 Xtal = 8
OSCCON = %01110000 '!!!!!!!!!!!! INTRC 8 Mhz ANSEL = %00000001 'choose digital i/o, val = 0 ANSELH = %00000000 'PIC16F690 specific WPUA = %00011100 WPUB = %00000000 OPTION_REG = %00000111 ADCON0.6=1 'Vref ADCON0.7=1 'A/D Conversion Result Format Select bit TRISA = %11011111 TRISC = %10000000 ' Set segment pins to output TRISB = %00000000 ' Set digit pins to output
EData Byte 130, Byte 100, Byte 20 , Word 470, Word 650
Symbol Heater=PORTA.5 Symbol Swich1=PORTA.2 '+ Symbol Swich2=PORTC.7 '- Symbol Swich_Select=PORTA.4 Symbol Segments=PORTC Dim Digit0 As PORTB.4 Dim Digit1 As PORTB.5 Dim Digit2 As PORTB.6 Dim Digit3 As PORTB.7
Dim ADC As Float Dim ADC1 As Float Dim ADC2 As Float Dim T1 As Float Dim T2 As Float
Dim Temp1 As Float Dim Temp2 As Float Dim Ust_Temper As Float Dim K As Float Dim B As Float Dim E_rror As Byte Dim Mode As Byte
Dim ADC1_Mem As Word Dim ADC2_Mem As Word Dim T1_Mem As Byte Dim T2_Mem As Byte Dim Ust_Temper_Mem As Byte
Dim Chislo As Byte Dim TemperatureFloat As Word Dim Temperature As Word Dim ADC_Read[20] As Word Dim ADC_Temp As Dword
Dim m As Byte Dim n As Byte Dim p As Word Dim q As Word Dim Heat As Bit Dim Duty As Word Dim Duty1 As Word '-------------------------- Главная программа -------------------------
Low Heater Heat =0
'T1=200 ' Калибровочная температура1 'T2=20 ' Калибровочная температура2 'ADC1=470 ' Значение АЦП 1 'ADC2=650 ' Значение АЦП 2
'---------------------------- Main prog ------------------------------------ Main: If Swich_Select =0 Then Calibration Main1: Mode=0 Ust_Temper_Mem=ERead 0 Ust_Temper=Ust_Temper_Mem Temperature= Ust_Temper For m = 0 To 300 If Swich1 =0 Then Set_temp GoSub display Next m
T1_Mem=ERead 1 ' Калибровочная температура1 T2_Mem=ERead 2 ' Калибровочная температура2 ADC1_Mem=ERead 3 ' Значение АЦП 1 ADC2_Mem=ERead 5 ' Значение АЦП 2 T1=T1_Mem T2=T2_Mem ADC1=ADC1_Mem ADC2=ADC2_Mem
Temp1= T2 - T1 Temp2= ADC2 - ADC1 K= Temp1/Temp2 B= T1 - K * ADC1
Start: Mode=1
If Swich1 =0 Then Set_temp If Swich2 =0 Then Main1
GoSub ADC_Usred E_rror =0 If ADC> 800 Or ADC< 200 Then Mode=4:E_rror =1 TemperatureFloat =K * ADC +B Temperature = TemperatureFloat 'If Temperature < 0 Then Temperature =0 ' HRSOut Dec ADC,13 '----------------------- Управление нагревателем ----------------------
If Temperature <= Ust_Temper-50 Then High Heater: Heat =1 : GoTo Start If Temperature > Ust_Temper-50 And Temperature < Ust_Temper Then Duty = (Ust_Temper - Temperature)*3 Duty1 = Duty + (Ust_Temper/3) High Heater Heat =1 For p = 0 To Duty1 GoSub display Next p Low Heater For q = 0 To (155 - Duty) GoSub display Next q EndIf If Temperature >= Ust_Temper Then Low Heater :Heat =0 If E_rror =1 Then Low Heater For m = 0 To 10 GoSub display Next m EndIf GoTo Start '----------------------- Управление нагревателем ----------------------
Calibration: Mode = 2 GoSub ADC_Usred Temperature = ADC GoSub display If Swich1 =0 Then ADC2_Mem=ADC EWrite 5,[ADC2_Mem] DelayMS 500 GoTo Calibration1 EndIf GoTo Calibration
Calibration1: Mode =3 GoSub ADC_Usred Temperature = ADC If Swich1 =0 Then ADC1_Mem=ADC EWrite 3,[ADC1_Mem] Low Heater DelayMS 500 GoTo Main1 EndIf GoTo Calibration1
Set_temp: Mode=5 Low Heater For m = 0 To 30 GoSub display Next m Repeat If Swich1 =0 Then Inc Ust_Temper If Ust_Temper > 210 Then Ust_Temper=210 If Swich2 =0 Then Dec Ust_Temper If Ust_Temper <60 Then Ust_Temper=60 Temperature= Ust_Temper For m = 0 To 20 GoSub display Next m Until Swich_Select =0 Ust_Temper_Mem = Ust_Temper EWrite 0,[Ust_Temper_Mem] GoTo Main1
ADC_Usred: For m = 0 To 19 ADC_Read[m] = ADIn 0 GoSub display Next m ADC_Temp =0 For n = 0 To 19 ADC_Temp = ADC_Temp+ADC_Read[n] Next n ADC= ADC_Temp/20 Return
'---------------------------- Subrrrroutines ------------------------------------ display:
For n = 0 To 2 Low Digit0 Low Digit1 Low Digit2 Low Digit3 Chislo = Dig Temperature, n Segments = LookUpL Chislo, [$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90] GoSub display1 Next n Low Digit0 Low Digit1 Low Digit2 Low Digit3 Select Case Mode Case 0 n =3 Segments = $C1 'U GoSub display1 Case 1 n =3 Segments = $A7 'c If Heat =1 Then Segments = $C6 'C GoSub display1 Case 2 n =3 Segments = $96 ' с нижняя черта GoSub display1 Case 3 n =3 Segments = $A6 'c верхняя черта GoSub display1 Case 4 n =3 Segments = $86 ' E Error GoSub display1 Case 5 n =3 Segments = $E3 ' u GoSub display1
End Select Return
display1: Select Case n Case 0 High Digit0 Low Digit1 Low Digit2 Low Digit3 Case 1 Low Digit0 High Digit1 Low Digit2 Low Digit3 Case 2 If Segments = $C0 Then Low Digit0 Low Digit1 Low Digit2 Low Digit3 GoTo Blank EndIf Low Digit0 Low Digit1 High Digit2 Low Digit3 Case 3 If Segments = $C0 Then Low Digit0 Low Digit1 Low Digit2 Low Digit3 GoTo Blank EndIf Low Digit0 Low Digit1 Low Digit2 High Digit3 End Select Blank: DelayMS 2 Return
End
Чудненько работает на реальном ламинаторе
Сообщение отредактировал
rybkinleo - Чт, 19.01.2012, 02:53
|
|
|
|