Na lange tijd ben ik toch nog maar eens aan dit project begonnen. Al snel bleken er toch nog een aantal problemen in dit project te zitten.
Het eerste probleem dat ik tegenkwam is dat de transistoren stonden te oscilleren en als de voedingsspanning te laag was veel basisstroom gingen trekken. De oscillaties bleken door de shutdown schakeling op de main print te komen. Na deze verwijderd te hebben waren de oscillaties weg, maar was het probleem van grote transistorstromen nog groter geworden. Om dit op te lossen heb ik bij elke uitgangstrap 2 weerstanden toegevoegd.
In dit schema is R4 toegevoegd. Verder moet er ook een 150 Ohm 2W weerstand tussen dit printje en de basis van de 2N3055 geplaatst worden.
Hierna bleek dat de voeding ook nog onstabiel was geworden bij hogere basis stromen. Daarom heb ik deze vervangen door een oude 16V laptop lader met een 5V spanningsregelaar printje erachter.
Voor de fans heb ik nog een 2de printje bijgezet met een 7812 (dit is bij op de grote koelblok gemonteerd).
Hierna bleek er nog een probleem met de stroom meting te zijn. Hierbij bleek dat de basisstroom door de transistoren ook mee gemeten werd. Om dit op te lossen heb ik een nieuw printje gemaakt (op basis van de ZXCT1086E5TA) dat de stroom in de + geleider meet. Deze meting heeft wel als nadeel dat deze niet werkt als de spanning van de ingang kleiner dan 3V wordt de stroom meting niet meer klopt. Dit heb ik in de software “opgelost” door dan — op het stroomdisplay te zetten.
Om deze print aan te sluiten heb ik de main print wat veranderd:
Nieuw schema:
Om de metingen wat stabieler te maken neem ik het gemiddelde van een aantal samples. Hiervoor bleek de pic die ik eerst ingetekend had wat te traag te zijn. Daarom heb ik deze nu vervangen door de PIC18F25K22 (pin compatibel). Deze pic draait op 64Mhz.
De code:
'****************************************************************
'* Name : Dummyload *
'* Author : Stijn Coenen ElektronicaStynus.be *
'* Notice : Copyright (c) 2013 Stijn Coenen (Stynus) *
'* : All Rights Reserved *
'* Date : 01/05/2013 *
'* Version : 1.2 *
'****************************************************************
Device = 18F25K22
Include "Config_Fuses_1_2.bas"
Xtal = 16
'****************************************************************
'EN: Declarations
'NL: Declaraties
'Displays
Symbol Disp_klok = LATB.7
Symbol Temp_Data = LATB.2
Symbol Temp_Latch = LATB.1
Symbol Spanning_Data = LATB.4
Symbol Spanning_Latch = LATB.3
Symbol Stroom_Data = LATB.6
Symbol Stroom_Latch = LATB.5
'EN: Measurement values
'NL: Meetwaardes
Dim Temperatuur As Word
Dim Spanning As Word
Dim Stroom As Dword
Dim StroomFloat As Float
Dim StroomPrecies As Bit
Symbol N_Samp_T = 10 'Number of measuring samples; Aantal meetwaardes
Dim GemT[N_Samp_T] As Word 'Array that contains the samples; Array die de meetwaardes bevat
Symbol N_Samp_U = 15
Dim GemU[N_Samp_U] As Word
Symbol N_Samp_I = 15
Dim GemI[N_Samp_I] As Word
'EN: Display values
'NL: Display waardes
Dim DispTemp As Byte
Dim DispSpanning As Byte
Dim DispStroom As Byte
Dim DispArT[3] As Byte
Dim DispArU[3] As Byte
Dim DispArI[3] As Byte
Dim IntCase As Byte
Dim IntX As Byte
Dim IntDisp As Byte
Dim X As Byte
Dim Temp As Byte
'EN: Settings AD converter
'NL: Instellingen AD converter
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 250
'EN: Connections 7 segment displays on the 74HC595 pcb's
'NL: Aansluitingen 7 segment displays aan de 74HC595 op de printjes
'dPecgbfa
Symbol Nul = %01001000 ' a '0
Symbol Een = %11101011 ' ##### '1
Symbol Twee = %01010010 ' # # '2
Symbol Drie = %01100010 ' f # g # b '3
Symbol Vier = %11100001 ' ##### '4
Symbol Vijf = %01100100 ' # # '5
Symbol Zes = %01000100 ' e # d # c '6
Symbol Zeven = %11101010 ' ##### '7
Symbol Acht = %01000000 '8
Symbol Negen = %01100000 '9
Symbol Uit = %11111111 'Out
Symbol Streep = %11110111 'Bar
'EN: Connections of the transistors On the 74HC595 pcb's
'NL: Aansluitingen Transistoren aan de 74HC595 op de printjes
Symbol disp1 = %00001100
Symbol disp2 = %00001010
Symbol disp3 = %00000110
'EN: Misc
'NL: Diverse
Symbol TMR0IF = INTCON.2
'Tris registers
TRISA = %00111011
TRISB = %00000000
TRISC = %11111111
All_Digital = true
On_Hardware_Interrupt GoTo Interrupts
'****************************************************************
Opstarten:
'EN: Set clock to 64 Mhz
'NL: klok instellen op 64 Mhz
OSCCON = %01110111
OSCCON2 = %11000111
Clear 'ram
'EN: Timer0 setup to drive the displays
'NL: Timer0 instellen om de displays aan te sturen
T0CON = %11000111
INTCON = %10100000
INTCON2 = %00000100
INTCON3 = %00000000
IPR1 = %00000000
IPR2 = %00000000
IPR3 = %00000000
IPR4 = %00000000
IPR5 = %00000000
'EN: Settings AD converter
'NL: Instellingen AD converter
ADCON1 = %00000000
ADCON2 = %10010111
GoTo Main
'****************************************************************
Interrupts:
Context Save
If TMR0IF = 1 Then
TMR0IF = 0 'Reset flag
TMR0L = 230' 'Preloard timer
'EN: Loading data for the display that is driven this interrupt
'NL: Data inladen voor het display dat deze interrupt wordt aangestuurd
DispTemp = DispArT[IntCase]
DispSpanning = DispArU[IntCase]
DispStroom = DispArI[IntCase]
'EN: Get the transistor settings and set the decimal point
'NL: Transistoren info uitlezen en de comma aanzetten
Select IntCase
Case 0
IntDisp = disp1
Case 1
IntDisp = disp2
DispTemp.6 = 0
DispSpanning.6 = 0
DispStroom.6 = StroomPrecies
Case 2
IntDisp = disp3
DispStroom.6 = StroomPrecies + 1
Case Else
IntDisp = 255
IntCase = 0
EndSelect
'EN: Outputting transistors data
'NL: Transistor data inklokken
For IntX = 0 To 7
Temp_Data = IntDisp.7
Spanning_Data = IntDisp.7
Stroom_Data = IntDisp.7
Disp_klok = 1
IntDisp = IntDisp * 2
Disp_klok = 0
Next
'EN: Outputting display data
'NL: Display data inklokken
For IntX = 0 To 7
Temp_Data = DispTemp.7
Spanning_Data = DispSpanning.7
Stroom_Data = DispStroom.7
Disp_klok = 1
DispTemp = DispTemp << 1
DispSpanning = DispSpanning << 1
DispStroom = DispStroom << 1
Disp_klok = 0
Next
'EN: Latch data to the outputs of the 74hc595 ic's
'NL: Data naar de uitgangen van de 74hc595 ic's latchen
Temp_Latch = 1
Spanning_Latch = 1
Stroom_Latch = 1
'EN: Set counter for next interrupt
'NL: Teller bijtellen voor volgende interrupt
Inc IntCase
If IntCase > 2 Then
IntCase = 0
EndIf
Temp_Latch = 0
Spanning_Latch = 0
Stroom_Latch = 0
EndIf
Context Restore
Return
'****************************************************************
Main:
While 1 = 1
'EN: Temperature measurement
'NL: Temperatuur meting
For X = (N_Samp_T - 1) To 1 Step -1
GemT[X] = GemT[X-1]
Next
Temperatuur = ADIn 1
Temperatuur = Temperatuur * 5
GemT[0] = Temperatuur / 9
Temperatuur = 0
For X = 0 To (N_Samp_T - 1)
Temperatuur = Temperatuur + GemT[X]
Next
Temperatuur = Temperatuur / N_Samp_T
'EN: Voltage measurement
'NL: Spannings meting
For X = (N_Samp_U - 1) To 1 Step -1
GemU[X] = GemU[X-1]
Next
Spanning = ADIn 0
GemU[0] = Spanning / 1.86
Spanning = 0
For X = 0 To (N_Samp_U - 1)
Spanning = Spanning + GemU[X]
Next
Spanning = Spanning / N_Samp_U
'EN: Current measurement
'NL: Stroom meting
For X = (N_Samp_I - 1) To 1 Step -1
GemI[X] = GemI[X-1]
Next
Stroom = ADIn 16
'EN: Setting the decimal point place
'NL: Plaats comma bepalen
If Stroom > 500 Then 'X.XX
StroomPrecies = 0
StroomFloat = Stroom * (5/1024) * 10
Else 'XX.X
StroomPrecies = 1
StroomFloat = Stroom * (5/1024) * 100
EndIf
StroomFloat = StroomFloat / 50
StroomFloat = StroomFloat / 0.005
GemI[0] = StroomFloat * 1.07
Stroom = 0
For X = 0 To (N_Samp_I - 1)
Stroom = Stroom + GemI[X]
Next
Stroom = Stroom / N_Samp_I
'EN: Calculate value's for on the display
'NL: Meetwaardes naar display berekenen
For X = 0 To 2
Temp = Dig Temperatuur, X
DispArT[X] = LRead Cijfers + Temp
Temp = Dig Spanning, X
DispArU[X] = LRead Cijfers + Temp
'EN: The ZXCT1086E5TA does Not work below 3V, so display bars when this happens
'NL: De ZXCT1086E5TA werkt niet onder de 3V, dus als dit gebeurt streepjes weergeven
If Spanning > 30 Then
Temp = Dig Stroom, X
DispArI[X] = LRead Cijfers + Temp
Else
DispArI[X] = Streep
EndIf
Next
'EN: Delay for slower display update
'NL: Wachten om het display niet te snel te updaten
DelayMS 75
Wend
'****************************************************************
Cijfers:-
LData Nul, Een, Twee, Drie, Vier, Vijf, Zes, Zeven, Acht, Negen, Uit, Streep
End
De dummyload in werking:
Bestanden:
Code file: Download
Hex file: Download