Возникла необходимость сделать простенький терморегулятор для ламинатора. Самое непростое - найти доступный датчик для измерения температуры до 200 - 250 градусов. И тут помог Google: Laminator-Temperatur-Regelung Для 1N4148:
Для датчика был взят КД522 - маленький стеклянный корпус и достаточно длинные выводы. По температурным параметрам очень похож на 1N4148. Ну а всё остальное просто. Для начала работы калибруем датчик по образцовому термометру или по двум известным температурам. Можно взять любые точки в положительном диапазоне. Значения температур для градуировки задаются в EEPROM (см. текст программы). Инструкция в проекте для Proteus.
В качестве задатчика образцового напряжения для АЦП взят стабилитрон КС133 последовательно с диодом КД522 для термокомпенсации. При хорошо стабилизированном питании точность должна быть неплохой. В качестве исполнительного элемента взято твердотельное реле Cosmo, что сильно упрощает схемотехнику. Плата разведена в Ares. Со временем при больших температурах датчик из диода, естественно, деградирует. Но тут всё зависит от продолжительности работы и температуры.
OSCCON = %01110000 ' INTRC 8 Mhz ANSEL = %00000001 ANSELH = %00000000 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 100, Byte 100, Byte 35 , 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[50] As Word Dim ADC_Temp As Dword
Dim m As Byte Dim n As Byte Dim Heat As Bit
Low Heater Heat =0
'T1=200 ' Калибровочная температура1 'T2=35 ' Калибровочная температура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
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 < Ust_Temper-1 Then High Heater: Heat =1 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 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 <40 Then Ust_Temper=40 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 49 ADC_Read[m] = ADIn 0 GoSub display Next m ADC_Temp =0 For n = 0 To 49 ADC_Temp = ADC_Temp+ADC_Read[n] Next n ADC= ADC_Temp/50 Return
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
Что не успел сделать - это PID регулятор. Поэтому точность поддержания температуры невысокая. Но для данных целей - вполне годится. Если бы кто-нибудь дописал эту часть - было бы здорово!!! Обсуждение и файлы в ветке Тероморегулятор для ламинатора