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