Az egy tévhit, hogy induktív terheléskor a triac vagy tirisztor feszültség nullátmenetnél kikapcsol. Nem fog, tovább vezet x ideig, ameddig az árama nem csökken a tartóáram alá. Meglehetősen bonyolult és behatárolt dolgok zajlanak itt le a fázis eltolódások miatt (pl az előbbi ok miatt bizonyos fázisszög tartományban be se lehet gyújtani a félvezetőt. Ezért használhatatlanok sok esetben a szilárdtest relék is bizonyos induktív körökben.
Előzmény: Szalai György, 2021-01-20 08:59:31 [23143]
Szalai György | 9490
2021-01-20 08:59:31
[23143]
Gyújtásszög vezérléskor a hálózati feszültséghullám nullaátmenet után az általad beállított idővel a triak begyújt és a következő nullaátmenetkor kikapcsol. Induktív fogyasztó esetén, (transzformátor) kikapcsoláskor túlfeszültség tüske keletkezik, ami a triak átütését okozza. Ez ellen védheted a triakot például a trafóval párhuzamosan kötött varisztorral. A másik különbség a gyújtókör hangolásában van, azon esetedben szerintem nem tudsz változtatni.
"Kérdésem az lenne hogyan lehetne induktív terhelés állóvá tenni a fényerő szabályzókat?"
1. Sehogy, mert hogy ohm-os fogyasztókra tervezték.
2. Ne hívjuk ezeket szabályzónak, csak vezérelnek.
Egyébként van saját tervezésű motorlágyindító megoldásom erre, azzal megoldható. Vagy olcsóbb, és egyszerűbb feladat, ha a szekunder oldalon változtatod megfelelő kapcsolással (erre is van megoldásom) a halogán izzók fényerejét.
Sajnos messze élünk egymástól, mindkettőt ingyenesen szívesen bemutatnám neked működés közben. De ha gondolod, privátban még beszélgethetünk a témáról, egyéb megoldásokról.
Sziasztok! Tanácsot szeretnék kérni. 12V os halogén világításhoz használtam a kontallux érintős fényerőszabályzót.Egy toroid trafó primerét szabályozta, 8db 20 W-os halogén ment róla (összesen 160W) Sajnos tönkrement, kicseréltem a triakot, hátha az a baja de nem javult meg. Rendeltem egy GAO tekerős dimmert ami direkt induktív terheléshez való, pár szabályzás után csak teljes fénnyel világít, gondolom zárlatos lett a triak.
Kérdésem az lenne hogyan lehetne induktív terhelés állóvá tenni a fényerő szabályzókat? A kontallux sem bírja hivatalosan, egy kicsit nagyobb biztosíték lett beletéve, így 20 évig üzemelt. A 12V-os halogéneket szeretném meghagyni, a trafót ki tudnám cserélni pl. elektronikus előtétre. A kontallux a teljes tartományban szabályzott (nulla fénytől maximumig) ez jó lenne továbbra is ha így lene, a GAO csak kb 1/3 fénytől felfelé volt állítható egy kis ideig.
bankimajki | 2827
2021-01-19 17:44:39
[23140]
ICT mérőtűvel szerintem simán rá lehetne csatlakozni. Még spéci cuccok sem kellenek. Csak egy "harmadikkéz nevű eszköz", amibe befogod az ICT hegyes mérőtűt és egy nagyító vagy egy szuper kamerával rendelkező telefon. És némi kézügyesség.
Amit el lehet szabni azt el is szabják. Amit nem lehet - na azt is!
Ezt nehéz lesz egy kattogós wellerrel visszaragasztani. Általában ultrahanggal vagy lézerrel hegesztik a helyére a talán 6 mikronos arany vagy alumínium huzalt.
Próbáld meg egy X-Y-Z irányban finoman állítható és rögzíthető tű hegyével mikroszkóp alatt megérinteni a chip Vcc pontját. Talán... Sok sikert!
A pirossal bekeretezett bondolás a Vcc lábé. eredetileg a kék vonal helyett is lógott egy pici drót a chiptől, oda kellene rácsatlakozni.
Már sok ilyennel EPROM "hibával" találkoztam de ott mindig volt mentett vagy talált tartalom amit vissza lehetett írni. (pl. Epson FX1050 magyar ékezet)
A mostani tartalom megszerzése kicsit nyűgösebbenek látszik.
Egyébként még lehet a tűs csatlakozást is meg lehetne próbálni mint anno a detektoros rádió kristályánál.
Fordítva lett bedugva a foglalatba és a Vcc láb bondolása jól láthatóan mint egy biztosíték megszakadt. Maga a chip szerintem 99%-hogy túlélte. Ha rá tudnék csatlakozni a chip Vcc részére ki tudnám olvasni és reprodukálni a tartalmat.
Kis hornyokat köszörülgettem keresztbe 5 mm-enként és satuban megroppantottam a fedél részeket. Szépen lepattannak, a bondolás nem sérült. Viszont ahogy hozzáértem egy tűvel a chip felőli drót darabhoz az azonnal levált a chipről.
Ezek csak próbák voltak, biztos kézzel és mikroszkóp alatt nem tartom lehetetlennek a dolgot.
No az indok engem is érdekelne... lehet, hogy úgy jobban látja olvasni a biteket
Előzmény: Rabb Ferenc, 2021-01-19 14:04:45 [23128]
Rabb Ferenc | 4360
2021-01-19 14:07:16
[23129]
Bocs, csak EPROM
Előzmény: Rabb Ferenc, 2021-01-19 14:04:45 [23128]
Rabb Ferenc | 4360
2021-01-19 14:04:45
[23128]
Hozzáértő barátaim szerint nem egy életbiztosítás az EEPROM számára.Esetleg egy fogorvosi csiszolóval körben lecsiszolni a peremét és úgy megpróbálni leemelni a kalapját.
Csak úgy kíváncsiságból: miért akarod megskalpolni? Az ablakos törölhető és újra írható, a kerámia tetejű pedig olvasható és utána sokszorosítható. Ma már nem olyan drága egy ilyen soklábú...
Íme egy video egy ilyen "szörnyről". 3,5 kW-os tárcsamotor, 100 V-os rendszer. 1:05 környékén látható a töltője és ennek is ugyanilyen (5 pólusú) csatlakozója van.
Az elektromos egykerekűk, rollerek és "segway"-ek is gyakran ilyen töltőcsatlakozót kapnak, nem ritkán 80-100 V DC-re és 5-10 A-re. Nem hallottam, hogy bármelyik emiatt füstölt volna el.
Gyenge a 230V-os hálózatod. Nekem korábban akkor fagyott le a lézer gravírozóm, ha vágás közben elfogyott a nyomás és bekapcsolt a kompresszor. Próbáld meg szünetmentes tápról működtetni a marót. Vagy ha van, tedd át másik fázisra a marót a "nagy" fogyasztóktól.
Lenne egy kis problémám és hátha van ötletetem mi lehet a baj. Adott egy 3 tengelyes wabeco marógép mach3-ra alakítva. Amikor a gép környezetében valamilyen gép pl 3d nyomtató, kompresszor, eszterga bekapcsol egy pillanatra elmegy a monitornak a képe amire a maró is van kötve. Ekkor mintha nem kommunikálna a számítógép és a motor vezérlő és eláll a nullpont. Találkozott már valaki ilyennel?
Üdv! Volna egy kérdésem. Háromfázisú max 2.2KW teljesítményű marómotorhoz milyen csatlakozót építsek be a gép és a szekrény közé. Valami kör alakú lenne szimpatikus. Van valami bevált csatlakozó erre? Üdv, Atesz.
drehás | 350
2021-01-10 17:08:10
[23109]
Szevasztok! Köszönöm a segítő szándékot. A programozás nálam a hex file betöltésével kezdődik,és zárul. Ezt a kapcsolást megépítettem,és egy GDO (grip dip oscilator)mechanikus skáláját lenne hivatott kiváltani. Ezen az oldalon közölt hex vamiért nem indul el.Találtam egy felhasználótól ugyanezt a hex-et ,de beírta a nevét bejelentkező szövegként,és azt nem akarom,meg nem ő írta egyébként sem a programot. Ezért gondoltam,hátha valaki tud segíteni az eredeti program elindításában. Az ASM számomra arabusul van,így azt nem tudom használni,pedig gondolom az üdvözlő ,illetve bejelentkező üzenetet ebben lehetne megadni. Egyébként sajátépítésű pickit 2-t használok program betöltésre.
Törölt felhasználó
2021-01-10 16:02:16
[23108]
Húúúú... de rég volt... 15-évvel ezelőtt csináltam ezt, de az 50MHz-es nekem elég volt, azt átalakítottam, de még ma is működik. Jó volt amikor használni kellett, de ma már több "igazi" van, úgyhogy csak "kiállításba" van, a hobbi szobám dekorálására van használva. De most kipróbáltam.
Azon hogy a hex kódot nem tudod használni nem tudok segíteni, de szerintem az .asm kódot kell letölteni és új hex kódot abból kell csinálni, az biztosabb.
Biztos hogy jó PIC tipust állitottad be a programozón? Nekem csak öreg PICkit 2 van, de vannak ujjabbak is. Én csak MPLAB IDE-vel használom minden fajta PIC-et. Van egy csomó fajta, szeretek velük játszani de csak assemblerel programmozom öket.
Itt van az eredeti 50MHz kód, de ha akarod felrakom az én kódomat is. Sok szerencsét.
;****************************************************************************** ; FREQUENCY COUNTER ; Model : WTCNT ; Author : Terry J. Weeder ; Date : November 18, 1993 ; Version: 1.0 ; ; WWW.WEEDTECH.COM ; ; Ported to 16f84 by ; Peter Cousens ; October 1998 ; ; ;****************************************************************************** ; ;watchdog disabled ; list P=16F84a #include <p16f84a.inc>
out1 bsf port_a,e ;enable high btfss port_b,7 ;test busy flag goto out2 bcf port_a,e ;enable low goto out1
out2 bcf port_a,e ;enable low goto shift ; inst movwf port_b ;load instruction into port_b movlw b'00000000' ;define port_b as output tris port_b bcf port_a,rs ;rs = instruction bcf port_a,rw ;r/w = write bsf port_a,e ;toggle enable bcf port_a,e movlw b'11111111' ;define port_b as input tris port_b bsf port_a,rw ;r/w = read inst1 bsf port_a,e ;enable high btfss port_b,7 ;test busy flag goto inst2 bcf port_a,e ;enable low goto inst1 inst2 bcf port_a,e ;enable low retlw 0x00 ; ;********************************************************************* ;* WEEDER FREQUENCY COUNTER ;* Fix for 2 line (8x2) displays that were sold as 16x1 displays ;* ;* Because most of these displays lack a controller chip ;* it is required that the code manually sets the address for the ;* 9th char. That is what this code does. ;* ;* Questions? ;* Drop me an e-mail cklymko@hotmail.com ;* ;* Scroll through your code and locate "Shift". ;* Paste the following code starting with "Shift" and ending ;* just before the first "sub" command. ;* ;********************************************************************* shift btfsc addcnt,6 ;added for 8x2 displays goto shift2 ; ; btfsc addcnt,3 ; ; goto line2 ;end the 8x2 code btfss addcnt,0 ;shift to opposite side of display? retlw 0x00 btfss addcnt,1 retlw 0x00 btfss addcnt,2 retlw 0x00 goto line2 ; btfss addcnt,3 retlw 0x00
line2 movlw 0xB8 ;Force the second line. addwf addcnt,f bsf addcnt,7 movf addcnt,w goto inst ;********************************************************************* ; added to move back to home position. ;*********************************************************************
Ha nem látszik semmi a kijelzőn annak a legtöbb esetben a kontraszt poti hiánya vagy rossz beállítása az oka.
Egy hex fileben egy hex editorral tudsz szöveget cserélni. Persze egy kis odafigyelést igényel. Általában rövidebbre egyszerűbb a csere. De figyelni kell hogy a string záró nullás, vagy az elején tárolja a hosszt. Illetve a program is ellenőrizheti az adatait pl kontroll summával.
Szevasztok! Hozzáértő segítségét várom, ha lehetséges. Egy pic16F84 be betöltök egy hex filet,de nem indul. Ezt a programot megtaláltam valaki neve alatt,de ő csak a nevét írta hozzá. Szeretném a programot elindítani eredetiben ,vagy más bejelentkező szöveggel.Miként lehetséges? [url]http://www.piclist.com/techref/piclist/weedfreq.htm[/u rl]
Törölt felhasználó
2021-01-10 14:34:12
[23104]
Nem teljesen igaz, mert ha csak egyik van földelve a másik meg el van szigetelve a földtől (nem lett földelve) akkor minden rendbe van. Én így oldottam meg: 'Elektronika' téma, 23102. hozzászólás
Természetesen ha mind a kettő földelve lenne akkor nem lehet sorba kötni őket.
// find the TFT display type and set it //uint16_t identifier = 0x9341; // TFT identifier for the Welleman WM412 //uint16_t identifier = 0x9328; // uint16_t identifier = 0x6809; // TFT identifier for the "phone" type RM68090 model
// The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 //#define LCD_RD A0 // LCD Read goes to Analog 0 //#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define DARKGREEN 0x03E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define GREY 0x808080
// 74HC4067 Analog multiplexer control pins definitions. // Sharing the SD card control pins of the LCD shield
int s0 = 10; // SDSS int s1 = 11; // SDDI int s2 = 12; // SDDO int s3 = 13; // SDCLK used for emergency shut down relay control // // Multiplexer channels used. Call setmux(int) with this value. // #define An_in A0 // A0 is to be used for analogue measurments #define Ain_valInput 0
#define Current2Input 0 #define Current1Input 1 #define Voltage2Input 2 #define Voltage3Input 3 #define PSUTempInput 4 #define ExtTemp1Input 5 #define ExtTemp2Input 6 #define RTCReset 7 // This MUX channel is the RTC reset request pin. Must be set to low to reset the RTC to compile time.
#define PSUFailLED_B 14 // This LED will flash if one or the other PSU units failed. External USB power is needed for PSU2 failure indication. #define MaxTempLED_R 15 // This LED will flash if any of the temperature sensors indicate overheat which is set below.
int AnalogPin = 0; // This input is the only free analog pin with this shield int Ain_val = 0; // The value will be set when An_in is read float Voltage = 0; // The value will be set when An_in is converted to voltage
// // Volage divider R1 and R2 values of the analog input. // The range for U1 is 0-6V, U2 is 0-15V and U3 is 0-25V, but only U2 and U3 are used here. // The above range is only approximative based on formula calculations. // The resistances are measured for better accuracy in calculations used inside the routine. // float R1 = 99700.0; // Voltage divider resistance of R1
float R2_V1 = 510300.0; // resistance of R2 0-6V range float R2_V2 = 51020.0; // resistance of R2 0-15V range float R2_V3 = 21950.0; // resistance of R2 0-25V range
//------------------------- // // Emergency shut down is disabled, but it is possible to use if needed. // //float MaxCurrent1 = 6; // Set the maximum current for energency shut down. This is the 24V current. //float MaxCurrent2 = 14; // Set the maximum current for energency shut down. This is the total current. // #define MaxPSU1Temp 45 #define MaxPSU2Temp 45 #define MaxAirTemp 45
// //------------------------- // // Current is measured using ACS712 module, which outputs VCC / 2 for zero A. // Output voltage depends on the type of module. // Current measuring constants for the used ACS712 module. // float Sens_30A = 0.066; // Output sense V/A float Sens_20A = 0.100; float Sens_5A = 0.185;
#define TEMPERATURENOMINAL 25 // Temperature for nominal resistance (almost always 25 C) #define NUMSAMPLES 10 // Number of samples to take and average to get a more stable reading #define BCOEFFICIENT 3950 // The beta coefficient of the thermistor (usually 3000-4000) #define SERIESRESISTOR 10000 // Value of R1 resistor in series with the thermistor
float Thermistor_R = 107800; // 100k thermistor int samples[NUMSAMPLES];
int MuxChan = 0; // This is the multiplexer channel number which is connected to Ain for reading
//------------------------- // // The DS18B20 temperature sensor can also be used but here only NTC thermistors are used. // //#include <OneWire.h> //#include <DallasTemperature.h> //float tempC = 0; // //#define ONE_WIRE_BUS 13 // Define pin for the one wire bus where the DS18B20 is connected //OneWire oneWire(ONE_WIRE_BUS); // Create a new instance of the OneWire class to communicate with any OneWire device //DallasTemperature sensors(&oneWire); // Pass the oneWire reference to DallasTemperature library // //-------------------------
void setup(void) {
Serial.begin(38400); while (!Serial) ; // wait for Arduino Serial Monitor
// sensors.begin(); // Start up the 18B20 library // sensors.setResolution(12); // Set the resolution for all devices to 9, 10, 11, or 12 bits
Wire.begin(); RTC.begin(); if (! RTC.isrunning()) { // Check if RTC is running and keeping the time Serial.println("RTC is not running."); RTC.adjust(DateTime(__DATE__, __TIME__)); RTC.adjust(DateTime(RTC.now().unixtime() + 10)); // Adjust time to compensate for the total compile time } pinMode(An_in, INPUT); // Same analog input is used as input for all measurements pinMode(s0, OUTPUT); // Analog multiplexer control pins pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); // pinMode(Re1, OUTPUT); // Relay for the emergency shut down
digitalWrite(s0, LOW); // Set all analog multiplexer control pins to low digitalWrite(s1, LOW); digitalWrite(s2, LOW); digitalWrite(s3, LOW); // // Check if RTC reset is requested by the user and in that case reset the RTC to the compensated compile time. // This is necessary to execute once before the looping starts, in case the RTC is running with the wrong time. // SetMux(RTCReset); // This pin is low if RTC reset is requested if (digitalRead(An_in) == LOW) { // Check if RTC needs to be reset Serial.println("RTC reset."); RTC.adjust(DateTime(__DATE__, __TIME__)); RTC.adjust(DateTime(RTC.now().unixtime() + 10)); // Adjust time to compensate for the total compile time } setSQW(0x10); // Square wave output: 10 = 1Hz, 11 = 4kHz, 12 = 8kHz, 13 = 32kHz }
tft.setCursor(0, 10); tft.setTextColor(GREEN); tft.setTextSize(2); // 16 x 36 pixels per characters tft.print(" Adapting Camera"); tft.setCursor(10, 35); tft.println(" DIY 3D printer PSU");
tft.setCursor(0, 100); tft.print(" U1: V I1: A");
tft.setCursor(0, 125); tft.print(" U2: V I2: A");
tft.setCursor(2, 160); tft.print("PSU 1 temperature: "); tft.print((char)247); // Display the degree symbol tft.print("C");
tft.setCursor(2, 185); tft.print("PSU 2 temperature: "); tft.print((char)247); // Display the degree symbol tft.print("C");
tft.setCursor(2, 210); tft.print(" Air temperature: "); tft.print((char)247); // Display the degree symbol tft.print("C");
//------------------------- // // Read and update all values periodically // loop_intern:
// sensors.requestTemperatures(); // Send the command for all devices on the bus to perform a temperature conversion // tempC = sensors.getTempCByIndex(0); // Fetch the temperature in degrees Celsius for device index
Read_PSU2_temp(); Read_PSU1_temp(); Read_Air_temp(); } // // Update and display the measured values on the LCD // // Update LCD with the current date and time first.
if (RTC.isrunning()) { // Check if RTC is running and keeping the time. DateTime now = RTC.now(); // Get a snapshot of the current date and time from the RTC tft.print(now.year(), DEC); tft.print("-"); tft_print2digits(now.month()); tft.print("-"); tft_print2digits(now.day());
tft.fillRect(70, 100, 48, 16, BLACK); // erase previous character tft.setCursor(70, 100); // 12x16 per char tft.setTextColor(WHITE); tft.print(Voltage2, 1);
tft.fillRect(226, 100, 48, 16, BLACK); // erase previous character tft.setCursor(226, 100); // 12x16 per char tft.setTextColor(WHITE); tft.print(Current1, 1);
tft.fillRect(70, 125, 48, 16, BLACK); // erase previous character tft.setCursor(70, 125); // 12x16 per char tft.setTextColor(WHITE); tft.print(Voltage3, 1);
tft.fillRect(226, 125, 48, 16, BLACK); // erase previous character tft.setCursor(226, 125); // 12x16 per char tft.setTextColor(WHITE); tft.print(Current2, 1);
tft.fillRect(225, 160, 60, 16, BLACK); // erase previous character tft.setCursor(225, 160); // 12x16 per char tft.setTextColor(WHITE); tft.print(PSU1_temp, 1);
tft.fillRect(225, 185, 60, 16, BLACK); // erase previous character tft.setCursor(225, 185); // 12x16 per char tft.setTextColor(WHITE); tft.print(PSU2_temp, 1);
tft.fillRect(225, 210, 60, 16, BLACK); // erase previous character tft.setCursor(225, 210); // 12x16 per char tft.setTextColor(WHITE); tft.print(Air_temp, 1);
// Display the values on a PC terminal through the USB
Serial.println("-------------------------------"); Serial.println(" Adapting Camera"); Serial.println(" DIY 3D printer PSU");
if (RTC.isrunning()) { // Check if RTC is running and keeping the time DateTime now = RTC.now(); // Get a snapshot of the current date and time from the RTC Serial.print(" Date = "); Serial.print(now.year(), DEC); Serial.print("-"); print2digits(now.month()); Serial.print("-"); print2digits(now.day()); Serial.println();
Serial.print(" Time = "); print2digits(now.hour()); Serial.print(":"); print2digits(now.minute()); Serial.print(":"); print2digits(now.second()); Serial.println(); Serial.println(); } else { if (! RTC.isrunning()) { Serial.println(" The DS1307 is stopped."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } }
Serial.print("PSU 1 temperature: "); Serial.print(PSU1_temp, 2); Serial.print(" \xC2\xB0"); // shows degree symbol Serial.println("C"); Serial.print("PSU 2 temperature: "); Serial.print(PSU2_temp, 2); Serial.print(" \xC2\xB0"); // shows degree symbol Serial.println("C"); Serial.print(" Air temperature: "); Serial.print(Air_temp, 2); Serial.print(" \xC2\xB0"); // shows degree symbol Serial.println("C"); Serial.println(""); delay(1500); // // Check for PSU failures. This will be indicated by a flashing LED. // For PSU 2 failure to be displayed, the unit must be powered through the USB. // if (Voltage2 < 11) { SetPSUFailLED(); } if (Voltage3 < 22) { SetPSUFailLED(); } // // Check for too high temperature inside the PSU and flash a LED to indicate it. // if (PSU2_temp >= MaxPSU2Temp) { SetMaxTempLED(); } // Check for too high temperature if (PSU1_temp >= MaxPSU1Temp) { SetMaxTempLED(); } if (Air_temp >= MaxAirTemp) { SetMaxTempLED(); } goto loop_intern; // Forever loop } //------------------- // // Toggle LED to indicate error condition. // void SetPSUFailLED() { pinMode(An_in, OUTPUT); // Same analog input is used as output here SetMux(PSUFailLED_B); digitalWrite(An_in, HIGH); delay(500); digitalWrite(An_in, LOW); delay(100); pinMode(An_in, INPUT); // Same analog input is used as output here SetMux(Ain_valInput); } void SetMaxTempLED() { pinMode(An_in, OUTPUT); // Same analog input is used as output here SetMux(MaxTempLED_R); digitalWrite(An_in, HIGH); delay(500); digitalWrite(An_in, LOW); delay(100); pinMode(An_in, INPUT); // Same analog input is used as output here SetMux(Ain_valInput); } //-------------------
//------------------- // // Used for displaying date and time to make sure that two digits are always displayed. // void tft_print2digits(int number) { if (number >= 0 && number < 10) { tft.write('0'); } tft.print(number); }
void print2digits(int number) { if (number >= 0 && number < 10) { Serial.write('0'); } Serial.print(number); }
//-------------------
void ReadCurrent1(float Sensitivity, int MuxChan) { // // adcValue = analogRead(currentPin); Ain_val = 0; SetMux(Current1Input); for(int i = 0; i < NUMSAMPLES; i ++){ Ain_val = Ain_val + analogRead(AnalogPin); // read the input 10 times to avarage value } Ain_val = (Ain_val / NUMSAMPLES) - 512 ; // Average read Current1 = ((Ain_val * 5.0) / 1024.0) / Sensitivity; if (Current1 < 0.0) { Current1 = 0.0; // Limit range to positive measurements } } //-------------------
void ReadCurrent2(float Sensitivity, int MuxChan) { // // adcValue = analogRead(currentPin); Ain_val = 0; SetMux(Current2Input); for(int i = 0; i < NUMSAMPLES; i ++){ Ain_val = Ain_val + analogRead(AnalogPin); // read the input 10 times to avarage value } Ain_val = (Ain_val / NUMSAMPLES) - 512 ; // Average read Current2 = ((Ain_val * 5.0) / 1024.0) / Sensitivity; if (Current2 < 0.0) { Current2 = 0.0; // Limit range to positive measurements } }
//-------------------
void Read_PSU2_temp() {
SetMux(PSUTempInput); // Thermistor_R = 100000; // Needs to be set if different from default Tempread(); PSU2_temp = Temperature;
}
//-------------------
void Read_PSU1_temp() {
SetMux(ExtTemp1Input); // Thermistor_R = 100000; // Needs to be set if different from default Tempread(); PSU1_temp = Temperature;
}
//-------------------
void Read_Air_temp() {
SetMux(ExtTemp2Input); // Thermistor_R = 100000; // Needs to be set if different from default Tempread(); Air_temp = Temperature;
}
//--------------------- // // Reading thermistor temperature
void Tempread() {
uint8_t i; float average; Temperature = 0; for (i=0; i< NUMSAMPLES; i++) { samples[i] = 0; // Take N samples in a row, with a slight delay } for (i=0; i< NUMSAMPLES; i++) { samples[i] = analogRead(AnalogPin); // Take N samples in a row, with a slight delay } average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples[i]; // Average all the samples out } average /= NUMSAMPLES;
// Limit range to between 5 and 305 degrees
if (average < 16) { // Limiting to 305C maximum temp average = 16; } if (average > 985) { // Limiting to 5C minimum temp average = 985; }
// Convert the value to resistance
average = 1024 / average - 1; average = SERIESRESISTOR / average;
Temperature = average / Thermistor_R; // (R/Ro) Temperature = log(Temperature); // ln(R/Ro) Temperature /= BCOEFFICIENT; // 1/B * ln(R/Ro) Temperature += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) Temperature = 1.0 / Temperature; // Invert Temperature -= 273.15; // convert to C }
//-------------- // // Read the analog input which is used for all analog inputs. // The real inputs are multiplexed through a 74HC4067 multiplexer allowing 16 inputs. // void ReadAnalogIn(float R2, int MuxChan) {
SetMux(MuxChan); // Set multiplexer input first Ain_val = 0; for(int i = 0; i < NUMSAMPLES; i ++){ Ain_val = Ain_val + analogRead(AnalogPin); // read the input NUMSAMPLES times to avarage value } Ain_val = Ain_val / NUMSAMPLES; // Average out the readings // // Convert the analog value to real voltage // Voltage = (Ain_val * 5.041) / 1024.0; Voltage = Voltage / (R2 / (R1 + R2)); } //-------------- // // Set the 74HC4067 multiplexr channel to be read. // int SetMux(int channel){
int controlPin[] = {s0, s1, s2, s3};
Válasz erre a kérdésre: 'Elektronika' téma, 23098. hozzászólás Igen, lehet sorba kötni azokat is, de tudni kell hogy mert problémákat okozhat ha rosszul van csinálva. Itt a leírás hogy én hogyan oldottam meg.
Van egy néhány 12V-os tápegységem és novemberben úgy döntöttem csinálok valami használható dolgot kettőből. Az egyik 3D printerem 12V-al és 24V-al működik és úgy döntöttem annak csinálok új tápegységet kettő 12V tápegységből. Az egyik PSU egy 12V/82A HP szerver PSU a másik meg egy mini komputerből van, 12V/7A. Miért nem mind a kettő egyfajta? Mert nem fért két HP szerver PSU a dobozba. Mind a kettőnek a DC GND a földhöz van kötve, úgyhogy a "felső" tápegységet eltávolítottam a földtől hogy ne okozzon problémát, de az alsót megtartottam hogy minden legyen jó és biztonságos. A "felső" tápegység műanyagba van, úgyhogy védőföldelés nem kell annak.
A sorba kötést úgy oldottam meg hogy ha a "felső" PSU valami hiba miatt, vagy túlterhelés miatt működése megszűnik akkor az elenged egy relét és az megállítja a 3D nyomtatást is. Azon kívül egy Arduino Uno műszert is csináltam ami méri a feszültségeket, áramokat és belső hőmérsékleteket, mutatja az időt meg a dátumot, meg mind a kettő tápegység állapotát. Zöld LED = minden rendbe van, kék LED = probléma egyik vagy másik (vagy mind a kettő) tápegység feszültségével, piros LED = egyik vagy másik (vagy mind a kettő) tápegység túl meleg.
Az Arduino LCD kicsit át van alakítva, eltávolítottam róla a touch panelt és nincs az SD kártya olvasó bekötve, mert nem kell nekem e-hez. Ezek ellenére a ki/bemenetek nem volt elég, ezt megoldottam egy 74HC4067 multiplexer modullal. A dátumot meg időt egy I2C Tiny RTC modul adja, úgy kell beállítani hogy a gombot meg kell nyomni és nyomva kell tartani amíg a fordítóprogram felrakja az új firmware programot. Ennek a hátránya hogy nem lehet beállítani külön, de ez nem fontos nekem jelenleg, de majd ha lesz időm átalakítom talán, mert van elég ki/be menet a multiplexeren keresztül ami szabad. De az RTC az csak fölösleges luxus, azért raktam be mert játszani akartam az RTC modullal.
Nem tudom ez valakinek kell vagy nem, de az .ino kódot is ide beraktam, bárki át tudja alakítani ha akarja. Nem IRQ-vel megy, mert ez lett az egyszerűbb, na meg erre nem fontos IRQ mert ezek a mérések nem kritikusak.
A kódot külön küldöm erre válaszra mert a fönti leírás hosszú lett...
Törölt felhasználó
2021-01-10 09:47:24
[23101]
Mérni kell ellenállást a GND és a föld között. Ha össze van kötve akkor 0 ohm az ellenállás. Természetesen mérés közbe ne legyen a tápegyseg bedugva...
Majd ma később írok újra képekkel mert most csináltam egy ijesmit én is.
Kapcsolóüzemö tápok kimenetét sorba lehet kötni, hogy összeadódjon a feszültség?
svejk | 33038
2020-12-28 14:19:46
[23097]
A korrekt mérésekhez fékpad kellene. Dobd fel a képét, hátha valaki ráismer. Vagy keress hasonló kinézetűt, hasonló kubatúrával és persze ami fontos, hogy azonos fordulattal.
De ha elviszed egy tekercselőnek megmutatni az már szinte az ajtóból megsaccolja a kért adatot.