Questa apparecchiatura
ha 2 ingressi :
ed una uscita analogica a
tensione variabile (PWM)
Il programma legge la
temperatura sul canale analogico 3 ,ADC3
ed il segnale del potenziometro sul canale analogico 4 ,ADC4.
Sul CB280 sono rispettivamente ADC3=P27 e ADC4= P28
Il segnale di uscita su
P5=PWM0
La lettura della sonda ,
termocoppia 1 sulla scheda , avviene tramite la corrispondenza:
t=
0,0732*N+14
dove
N=valore risultante dalla conversione ADC(fra 0 e
1023)
con la chiamata della
funzione :
tempm=termocoppia_1(3)
che richiama l’espressione di cui sopra.

La scheda della
termocoppia

La scheda di comando della
lampadina e impostazione,tramite trimmer, delsetpoint
IL LISTATO
Const Device = CB280
'termocoppia 1 su ADC3
'lampadina su porta P5
'potenziometro su ADC4
'18 aprile 2011
Dim tempo As Single
Dim azp As Single
Dim azi As Single
Dim intervallo As Single
Dim pwm_out As Single
Dim area As Single
Dim area_t As Single
Dim kp As Single
Dim ki As Single
Dim lux As Integer
Dim setpoint As Single
Dim bandap As Single
Dim tempoint As Single
Dim tempm As Single
Dim max_uscita As Integer
Dim menouno As Single
Dim tipouscita As Byte
Dim old As Single
Dim r As Single
Dim scostamento As Single
Dim sp1 As String
Dim supc As Byte
supc=1
If supc=1 Then intervallo=300
If supc=0 Then
intervallo=2000
'non e possibile mettere
un IF !
Set Debug Off
menouno=-1
tempo=0
max_uscita=1023
Low 5
area_t=0
tempo=0
Debug CLR
Do
Debug CLR
tempo=tempo+intervallo/1000
tempm=termocoppia_1(3)
setpoint=leggo_setpoint(4)
sp1="Temp="
scrivi 2,sp1,tempm,1
sp1="SETPOINT="
scrivi 3,sp1,setpoint,1
scostamento=tempm-setpoint
sp1="Scostamento="
scrivi 4,sp1,scostamento,1
sp1="tempo[sec]="
scrivi 5,sp1,tempo,0
sp1="regolazione=PI Banda
Proporzionale=2'C"
scrivist 6,sp1
bandap=2
kp=menouno*1023/bandap
sp1="kp="
scrivi 7,sp1,kp,2
tempoint=30
sp1="tempo
integrale[sec]="
scrivi 8,sp1,tempoint,0
r=1023/tempoint
ki=1023/(bandap*tempoint)
sp1="Kintegrale="
scrivi 9,sp1,ki,3
r=(setpoint-tempm)*intervallo/1000
area_t=area_t-r
If tempm<setpoint-bandap/2 Then area_t=0
If tempm>setpoint+bandap/2 Then area_t=0
sp1="Area parziale['C
x sec] ="
scrivi 10,sp1,r,2
sp1="Area Totale ="
scrivi 11,sp1,area_t,2
r=azione_prop()
azp=r
sp1="Azione
proporzionale ="
scrivi 12,sp1,azp,2
r=azione_int()
azi=r
sp1="Azione
integrale ="
scrivi 13,sp1,azi,2
pwm_out=azp+azi
If pwm_out>max_uscita
Then pwm_out=max_uscita
If pwm_out<10 Then pwm_out=10
lux=pwm_out
Pwm 0,lux,1023
sp1="potenza
totale ="
scrivi 14,sp1,pwm_out,1
sp1="potenza totale
in % ="
r=pwm_out*100
r=r/1023
scrivi 15,sp1,r,1
If supc=0 Then Delay intervallo
If supc Then seriale
Loop
End
Sub lampeggio(porta
As Byte)
Out porta,1
Delay 100
Out porta,0
Delay 100
End Sub
Sub scrivo(riga As
Byte)
Dim sp As String
Debug Goxy,1,riga
Debug sp
End Sub
Function leggo_setpoint(porta
As Integer) As Single
Dim nnn As Integer
nnn=Adin(porta)
r=30*nnn
r=r/1023
r=25+r
leggo_setpoint=r
End Function
Function leggo_bandap(porta
As Integer) As Single
Dim nnn As Integer
nnn=Adin(porta)
leggo_bandap=0.5+10*nnn/1023
End Function
Function leggo_tempoint(porta
As Integer) As Single
Dim nnn As Integer
nnn=Adin(porta)
leggo_tempoint=30+210*nnn
End Function
Function azione_prop()
Dim vt As Single
vt=512-max_uscita*(tempm-setpoint)/bandap
If vt<0 Then vt=0
If vt>max_uscita Then vt=max_uscita
azione_prop=vt
End Function
Function azione_int()
azione_int=-ki*area_t
If tempm>setpoint+bandap/2 Then azione_int=0
If tempm<setpoint-bandap/2 Then azione_int=0
End Function
'provaseriale
Sub seriale()
Dim i As Integer
Bclr 0,1
Opencom 0,9600,18,9,54
Bclr 1,2
For i=1 To 9
If i=5 Then r=azp
If i=6 Then r=azi
If i=7 Then r=scostamento*100
If i=8 Then r=88888
If i=9 Then r=99999
If i=1 Then r=tempm*10
If i=4 Then r=bandap*10
If i=3 Then r=tempoint
If i=2 Then r=setpoint
sp1=Fp(r,5,0)
Putstr 0,sp1
Next
Delay intervallo
End Sub
'soubroutine
che visualizza alla riga
'il numero=num
Con decimali=decim
's=testo
Sub scrivi(riga As Integer,ss As String,num As Single,decim As Integer)
Debug Goxy,1,riga
Debug ss
Debug Fp(num,10,decim)
Debug Goxy,1,riga
End Sub
'soubroutine
che visualizza alla riga
'il testo=s
Sub scrivist(riga As
Integer,ss As String)
Debug Goxy,1,riga
Debug ss
End Sub
'lettura termocoppia con
amplificatore
Function termocoppia_1(porta As Integer)As
Single
Dim nn As Integer
nn=Adin(porta)
r=732*nn
r=r/10000
r=14+r
termocoppia_1=r
End Function
Function retta(porta
As Integer,min As Single,max
As Single)As Single
Dim nn As Integer
nn=Adin(porta)
r=min+nn*(max-min)/1023
retta=r
End Function
N.B. Se si cambia :
SUPC=1
Set
Debug Off
In :
Set Debug
ON
supc=0
L’uscita è sul monitor anzichè sul PC

Il programma che
visualizza il grafico leggendo i valori dal micro

Grafico temperatura

Figura 1

Uscita del micro sul monitor

Figura 2

Figura 3

Lampadina 5 watt
(senza il coperchio) e termocoppia
SVILUPPI:
Con il ULN2803 la
lampadina può essere al massimo da 5 watt per canale(se ne potrebbero mettere
più di una )
Con il mosfet
IRF530 si arriva a 21 Watt
Con il dimmer
in alternata si arriva a 750 watt:il programma è uguale ,cambia l’uscita che va
al DIMMER

la scheda con il dimmer ed il sensore di temperatura
Il segnale del micro di
comando lampadina va a VREG1
Il segnale di acquisizione
temperatura va prelevato da OUT SONDA 1
Temperatura=-23+N*100/1023
N=valore letto dal canale analogico