Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Терморегулятор для ламинатора
Терморегулятор для ламинатора
rybkinleo Дата: Ср, 23.11.2011, 01:44  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 28.05.2008

Статус: Offline

Сделал по-быстрому примитивный терморегулятор для ламинатора - для ЛУТ.
В качестве датчика - диод (стырил идею в интернете).
Индикатор - 4 разряда семисегментный.
Контроллер под руками был Pic16f690.
Силовая часть - твердотельное реле Cosmo.
Инструкция по применению - на листочке проекта в Proteus 7.8 Sp2.
Калибровка датчика по двум точкам.
Единственно - не хватило времени и сил сделать PID регулирование, что было бы гораздо лучше.
А то так уж очень примитивно...
Если кто-нибудь доведёт до ума - вот будет здорово!!!
А так устройство уже год работает с простейшим ламинатором Fellowes и качество ЛУТ заметно повышает. biggrin
Прикрепления: 5993309.rar (38.5 Kb) · 8854023.jpg (228.5 Kb) · 2146721.jpg (122.9 Kb)

Сообщение отредактировал rybkinleo - Ср, 23.11.2011, 02:02
ЯНДЕКС Дата: 23.11.2011
ADMIN Дата: Ср, 23.11.2011, 17:10  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да почему статьей не оформляет никто????? Ведь это целая статья. Выложил в форуме - и забыл.
Блин...
Ведь можно описание придумать - фоток наделать, ну видео снять, в конце концов. Почему не так? Ну ведь объяснял же уже.
Еще раз повторюсь - такие материалы - выкладывайте в каталог статей, оформив все как следует. Как это делать , я писал уже.
rybkinleo Дата: Ср, 23.11.2011, 19:26  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 28.05.2008

Статус: Offline

Вот, вроде сделал... wacko
rybkinleo Дата: Вт, 06.12.2011, 16:50  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 28.05.2008

Статус: Offline

Вот ещё фотка потрохов. dry

Добавлено (06.12.2011, 16.50.05)
---------------------------------------------
Твердотельное реле переключается в момент перехода через ноль, поэтому применить простую ШИМ для регулировки мощности не получится. Подскажите, пожалуйста, что можно предпринять в этом случае? Может быть ШИМ с большим (секунды) периодом? Для нагревателя это годится. А как это написать?

Прикрепления: 9234500.jpg (226.7 Kb)
ivan_fd Дата: Вт, 06.12.2011, 22:26  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (rybkinleo)
Подскажите, пожалуйста, что можно предпринять в этом случае?


Нужно ловить переход через "0" и далее методом фазоимпульсного управления.
brown Дата: Вт, 06.12.2011, 22:57  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Либо как писал ivan_fd,
Quote
... нужно делать по алгоритму Брезенхема, пропускать полупериоды.


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
rybkinleo Дата: Ср, 18.01.2012, 21:40  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 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

Чудненько работает на реальном ламинаторе good

Сообщение отредактировал rybkinleo - Чт, 19.01.2012, 02:53
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Терморегулятор для ламинатора
  • Страница 1 из 1
  • 1
Поиск: