After a long time I decided to start again on this project. Quickly it became clear that there were still a few problems whit this project.
The first problem I encountered was that the transistors started to oscillate and draw to much base current when the voltage started to get to low. The oscillations turned out to be caused by the shutdown circuit I placed on the main pcb. After I removed this circuit the oscillations where gone. But there was still the problem of the too big base current in the transistors. This I solved by added 2 resistors to each step of the output stage.
R4 is added in this circuit. Also there needs to be a 150 Ohm 2W resistor placed between this pcb and the base of the 2N3055.
After these modifications it turned out that the power supply became a bit unstable. Therefore I replaced it by a 16V laptop charger. For the microcontroller and displays I added a voltage regulator pcb to create the required 5V.
The cooling fans need 12V, so I added a second voltage regulator pcb with a 7812 voltage regulator (mounted on the big heat sink).
When I was coding the current measurement I noticed another problem. The base current was also measured. To fix this I added a new pcb based on a ZXCT1086E5TA to measure the current trough the positive lead. This measurement however has the disadvantage to only work above 3V. This I “solved” by adding a few lines in the code which put — on the ampere display when the voltage gets too low.
To connect this pcb to the main pcb I had to mod the main pcb a bit:
New circuit:
To get a stable measurement, I take the mean value of a number of samples. For this code, the pic I originally designed into the the project, turned out to be too slow. Therefore I replaced it with a PIC16F25K22 (pin compatible). This pic operates at 64Mhz.
The 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
The dummyload working:
Files
Code file: Download
Hex file: Download