Így van, most is ott használják. Én is úgy tettem, kapott 0.5W-os ellenállásokat. Akkor nagyon nem keresem a miértjét. Gondolom a rendszer tervezésénél nem számoltak evvel.
Az oasz lapszabászokba előszeretettel használták ezt a modelt. Tipushiba (igaz több 5-10 évig bírják ) ennél a modulnál nagyon jól határra van az ellenállások teljesítménye méretezve. Mi nagyobb teljesítnyűre szoktuk cserélni és utánna nincs velük gond.
Sziasztok, Javításra hozzám került egy gép Schneider TSXCAY21 vezérlője, kettő darab is. Mind a kettőnél a CH0 #2 #4 #11 csatlakozó lábakon lévő bemeneti ellenállások elégtek. Ezt valami okozta. Mivel ezen a területen még kezdő vagyok, ezért szeretném megkérdezni, hogy egy enkóder motor tud-e ilyen hibát okozni, vagy miért teszi. Ezek a bemenetek a képeken láthatóak. Nemsokára megnézem milyen enkóder motor van rákötve. A- Z+ B- ezek a bemenetek sülnek meg. Ezeket mire használja egy enkóder motornál?
Csuhás | 6713
2024-09-23 07:53:59
[24675]
Nem lőnek vele nyulat, kb mindegy milyen pár tíz ohm körüli ellenállást raksz be. Sok szerepe nincs, leginkább biztosítékként működik.
Nem igazán CNC de hátha otthon van valaki itt kávégépekben.
Beázott egy Nespresso KRUPS XN2601 panelja, két ellenállás megszakadt. Be tudtam üzemelni a panelt de jó lenne a gyári értékeket visszaállítani. Színkód szerint 33 vagy 11 ohm 1W lángmentesek.
Én eddig YASKAWA V1000-el meg ATV61-el próbálkoztam , visszacsatolás nélkül, nem mindig egyszerű beállítani de sokszor egész jó eredményeket is el lehet érni. Azt ajánlom olvasd át a doksikat , a SCHNEIDER megvan magyarul is.
Már a a 2007-es CNC talin is láthattál Robsy AC szervo sebesség/pozíció hajtás megoldásokat. Csörrenj rám, ha érdekelnek ezek a motorvezérlők.
Frekiváltóra ne kössél ilyen motort, csak akkor ha a 3 fázisú aszinkron motor mellett kifejezetten képes arra is, hogy egy AC SZINKRON szervót működtessen. Egyébként pillanatok alatt valami füstölni fog.
tud valaki segíteni abban,hogy ezt a motort hogyan/mivel lehetne használni? Főorsómotornak szeretném felhasználni. Első opció az lenne,hogy valami "gyári" vezérlőre kötni,ami használja az enkódert is,így pontos pozícionálást lehetne szerszámcseréhez. Második opcióm pedig az,hogy valami egyszerűbb frekvenciaváltóra kötni,ami megfelel a paramétereknek és visszacsatolás nélkül megforgatni.
Első opciónál nem tudom,hogy milyen modult/modulokat kellene szerezni,amivel menne a motor? Második opciónál pedig az a kérdés,hogy milyen paraméterekre kell figyelni a frekvenciaváltónál? Nyilván a motorteljesítmény legyen kisebb a frekiváltóénál illetve ott gondolom,a frekvencia emelésével egy kicsit nagyobb fordulatszám is elérhető lenne.
Én néztem el véletlenül , nem azt a motort tettem ide, nekem olyan van amibe elől csapágy a szénkefe felé pedig bronz persely. Hogy egyértelműen legyen ez egy hengerkéses fűnyíró, nem kell neki gyorsan forogni. Van benne egy hajtómű, ugyan úgy mint egy csavarbehajtóba ez által lassan forog és nagyon szépen vágja a gyepet.
Most hogy találtam teljesen csapágyas motort lehetséges teszek egy próbát ezzel is.
Előzmény: Rabb Ferenc, 2024-08-17 14:25:41 [24664]
B.Zoltán | 1720
2024-08-17 16:17:52
[24667]
Fiammal pár évvel ezelőtt kísérleteztünk egy 3 Nm motorral, a nyomaték görbéjét próbáltuk megrajzolni, ott derült ki, hogy igenis egy 3 Nm motor (4.2A 2.73V) képes 100-120 W-t felvenni a hálózatról, 400 ford/percnél. És persze ha nincs terhelve, akkor emlékeim szerint ez 10-20 W körül van.
Ezért nagyon függ a motornak az áramfelvétele (amit Robsy is ír), hogy hogy van megterhelve, mert a vezérlő egyre jobban emeli a fázisfeszültséget az indukcióhatás miatt, ezért emelkedik a teljesítmény felvétel. Mert az a 2V 4V fázisfeszültség szinte csak álló helyzetben igaz, de amikor nagy sebességgel forog, kénytelen emelni a feszültséget, hogy át tudja hajtani azt az áramot a tekercseken.
Az esztergába beépítve a 3 Nm motor, és egy 1.2 Nm motor úgy, hogy 400 ford/perc fordulaton forog a 3 Nm motor, 40 W-tól nem fogyasztanak többet ketten. Én is ezért teljesen fölöslegesnek érzem azokat a hatalmas tápegységeket, amit terveznek egyesek. Mert általában nem terheljük ki a léptetőmotort a biztonság miatt sem teljesen. És a terhelés is sok esetben pillanatszerű.
„És még egy gonosz kérdés: 100W alatti felvett teljesítményű motorral hol lehet füvet nyírni, talán virágcserépben?”
Gondolom, valami hasonló lehet mint ez. Használok egyet én is, kizárólag szegélyvágásra. Silány kínai mivolta ellenére...meglepően jól teljesít. Elöl golyós, hátul szintercsapágy van a motorban.
Előzmény: Rabb Ferenc, 2024-08-17 14:25:41 [24664]
Rabb Ferenc | 4346
2024-08-17 14:25:41
[24664]
Azt írod, hogy a kefe oldalon bronz csúszócsapágy van, a linken szereplőben viszont elöl-hátul golyós.
Most akkor merre van az előre?
És még egy gonosz kérdés: 100W alatti felvett teljesítményű motorral hol lehet füvet nyírni, talán virágcserépben? Bocs'
Sziasztok Kellene valami megoldás. Adott egy fűnyíró amben vany egy kicsi DC motor, folyamatosan tönkremegy a motor. A kihajtás részénél csapágy van a szénkefe részénél , bronz persely. A broz persely megszorul állandóan.
A meghatározó rész számomra egyenlő a megszerszett tudásukat, tapasztalatukat önzetlenül és érthetően megosztó de a tudásukkal nem kérkedő fórumtársak. Ha ezek közül engem bárki is a heverjának tekint az külön megtiszteltetés számomra.
Amit Te előítéletnek nevezel az a megkülönböztetet figyelem amiért a közel húsz évnyi itteni munkásságod alatt azt hiszem tettél épp eleget...
"A fórumozók meghatározó részének még ugyan etikailag kifogásolható a válaszod"
Ez a te céleményed, de szerintem előitéletes, és azt a pár haverodat nem nevezném meghatározó résznek, hiszen a szokásos pár emberkéről van szó, akiknek nem tetszik a szakmai igazság, és az amikor a tévedéseikre, hiedelmeikre felhívom a figyelmet. Kicsinyes emberi reakcióként besértődnek, és bántásnak, kioktatásnak érzik az igazságot. Erről pedig természetesen a valóságban szó sincs.
TBS-Team legalább most beismerte, hogy butaságot írt. Tanult belőle mindenki. Ez a lényeg. Senkit nem sértegetek, leírom az igazat. Azt is jó lenne tudomásul venni, és megérteni végre itt egyeseknek, hogy van mögöttem 40 évnyi motorhajtás, CNC tapasztalat, és fejlsztői, tervezői tudás, amiért rengeteget dolgoztam. Az egyetem megtanították nekem a villamos motorok kéttárolós matematikai modelljét. Számomra ez a döntő, és azt nagyon nem bírom elviselni, amikor sokadszor tőlem egy adott témában sokkal kevesebbet tudó ember ragaszkodik a felületes, vagy tévhit dumájához, és sértve érzi magát, ha valaki rávilágít a hibás tudására. Holott pedig csak a segítőkészség, és az ostoba netes dezinformáció elleni küzdelem jegyében írkálgatok ide néha, amikor már túl nagy a tévhit.
A világunk sokkal szebb, és jobb lenne, ha nem szekértáborok, haveri körök, hiedelmek mentén élnének egyesek, hanem kizárólag a TÉNYEK, műszaki igazságok számítanának.
A fórumozók meghatározó részének még ugyan etikailag kifogásolható a válaszod, de legalább van már benne hasznos rész.
Bár természetesen a legfontosabb képlet ott sem szerepel, vagyis a tengelyen leadott teljesítmény kiszámolása. lásd: 'Képletek, számítások' téma, 3. hozzászólás amiből: Teljesítmény(W) = Forgatónyomaték(Nm) * fordulatszám(1/s) * 6,28
(persze írhatnánk, hogy P=Omega*M de ugye itt nem egyetemi előadást kell tartani)
Az energiamagmaradás törvénye szerint legalább ennyi teljesítményt bele kell pumpálni, hogy ezt a tengelyen leadja. A gyatra hatásfokot most mellőzzük.
Én tegnap rákerestem Kicsa fórumtársunk motorjára de sajnos nem találtam nyomatékgörbét. Persze amikhez szoktak adni azoknak sem sok közük van az igazsághoz de iránymutatóknak jó. Én egyébként a 300 ford./perces fordulatra szoktam ezeket számolni, itt a tapasztalatom szerint a névleges nyomatékuk kb. 50 %-át tudják ezek a léptetőmotorok.
Figyelembe véve, hogy hogy a trafós tápok rövid időre túlterhelhetőek és a maximális teljesítményigény sem állandó a gépen én egy 160 W-os trafóval megelégednék.
Köszönöm szépen a videókat és a mért eredményeket.
Időközben kicsit változott a helyzetem,hála a "kicsi kínaiaknak". Ha beírjátok a keresőbe a DM860A kifejezést,gyorsan a vezérlő adatlapjához-forgalmazóihoz lehet eljutni. Ahol is látni lehet az általam említett AC 80 V-os maximum betáplálási lehetőséget. Tegnap délután letekertem a transzformátor egyik szekunder tekercséből annyit,hogy mérés alapján AC 78 V-ot kaptam,nagy örömömre be is akartam kötni tesztre. Ekkor látom,hogy az én vezérlőmön ! DC ! 80 V a maximális bemeneti érték,GND és +VCC jelölésekkel. Kicsit kutakodva megtaláltam a Longs Motor által gyártott vezérlő adatlapját,ahol erre a típusra (holott a típusszám itt is DM860A) DC 80 volt betáplálás a maximum,AC lehetőségről nem szól semmit a pdf. Gyorsan megbontva a vezérlőt,a bemeneti oldalon egy 100 V-os,470 uF-es pufferkondi bizonyítja : ez bizony nem viseli el az AC 80 V feszültséget.
Így a trafóból tovább tekertem és be kell szereznem egyenirányítást-puffert is mindenképpen.
Köszönöm mindenkinek a segítséget,ha kicsit szemfülesebb lettem volna,még talán viták sem alakulnak ki ebből.
Igen teljesen igazad van, hogy nem elegendő az UxI képlet, sokkal bonyolultabban lehet pontosan kiszámolni a valós értékeket. Arra világítottam rá, hogy a léptetővezérlő feszültsége és a léptővezérlő leadott max árama nem azt jelenti, hogy bődületes nagy tápegység kell. Szinte mindenki többszörösen is túlméretezi a tápegységeket, gigantikus pénzeket dobnak ki az ablakon.
Úgy biztos nem, hogy egy ÁLLÓ motortengely helyzetű léptető motorra is csak néha igaz U*I képletettel néphülyít itt TBS-TEAM.
Egyébként meg egy gyors közelítő számolással megkapjuk, hogy pl. 1 1/s motor fordulatnál ~120W körüli hasznos P-t lead az a motor. Ez már lényegesen több, mint az emberünk elhibázott és elvi hibás okoskodása. Az ok pedig roppant egyszerű. A léptető motor fordulatszámával arányos indukált feszültséget termel, ha elkezd forogni. Innentől kezdve természetesen nem igaz a primitív motor címke P=U*I képlet.
A felvett villamos Pmax pedig a Pmax hasznos/hatásfok képlettel számítható, ahol a Pmax-ot a motor M/n függvénygörbéje alapján szélsőérték számítással (deriválás, stb...) lehet megkapni. Ennek részletesebb matematikájával, levezetésével pedig nem untatnám a Fórumot, akit érdekel, vegye fel velem a kapcsolatot, és szívesen elmondom a részleteket.
"Pl: egy 20Nm léptetőmotor 110H150-6504A19-B55 Fázisáram 6,5A Fázisfesz:4,68V ~30W/fázis max:ˇ~60W"
Ez egy szakmaiatlan téves számítás. Nem lehet ehg léptető motor teljesítményét ilyen primitív fesz szorozva árammal képelettel kiszámítani, totál hibás beírásod ez.
Az mióta személyeskedés, hogy felhívtam valaki figyelmét, hogy félrevezették, és ő még ezt meg is köszönte? Miért törölted ki, és véded ezzel a szakmaiatlanságot egy műszaki fórumon?
Ha jól gondolom,adott feladathoz a motornak adott teljesítményt kell leadnia. Ez a teljesítmény leegyszerűsítve,veszteségek és minden egyéb nélkül P=UxI képlet alapján adódik. Arra céloztam az állandó teljesítménnyel,hogy nagyobb feszültség esetén kisebb áram szükséges adott teljesítmény leadásához. Ha szerinted nem helyes az egyszerűsített levezetése,akkor tudnál segíteni abban,hogy adott helyzetben mi lenne a "helyes"méretű puffer? (vagy hálózati transzformátor?)
A betáp legyen akkor kb 80V AC feszültség. A motor 11.3 Nm tartónyomatékú,névlegesen 5.6 V tekercsfeszültségű 3,5A/fázisú motor lenne. A vezérlő,a már említett DM860A.
Köszönöm szépen!
Előzmény: Törölt bejegyzés
Kicsa | 1242
2024-08-16 13:53:51
[24639]
Köszönöm a gyors levezetést. Valóban,a motor teljesítménye állandó. Nagyobb feszültség esetén kisebb áram,így nem kell olyan nagy puffer. Megesik,hogy az ember egy értékre koncentrál,a másik lényeges érték mellett pedig elsiklik. Köszönöm!
Köszönöm mindkettőtöknek,így fogok tenni. Letekerek a szekunderből,megtáplálom a motorokat és ha gond adódna a pufferrel,akkor utólag beépítem. Köszönöm szépen!
Előzmény: Rabb Ferenc, 2024-08-16 11:44:32 [24633]
TBS-TEAM | 2745
2024-08-16 13:09:58
[24637]
Bizzál benne több 100-akár 1000W feletti tápokat építenek be.
Ha a gyártó letette a (kínai) esküt az AC táplálásra, akkor nincs miért aggódnod. De ha mégsem nyert, még mindig ráérsz a trafó és a vezérlő közé beépíteni az egyenirányítót és a kondenzátort/kondenzátorokat.
Elvileg arra készülsz, mintha a két motor állandóan 7.2A-el terhelné a 80V-os trafót. Ez több mint 1000VA Na ez szerintem soha nem fog bekövetkezni - de lelked rajta...
Van egy két szekunderes trafóm,ami a tápot szolgáltatja majd. A két szekundert sorbakötöm,így kb 87 V AC feszültségem van. A külső szekunderből tudok letekerni,hogy a feszültség bemenjen 80 V alá,utána ráköthetném direktben ezt is. A kérdés inkább a pufferre irányult : ökölszabályként amperenként 1000-1500 uF lenne az elvárható puffer. A vezérlő tud csúcsban 7,2 A-t : kétlem,hogy a vezérlőbe beleférne egy ekkora,feszültségtűrésben is passzoló puffer. Röviden : ha ki van hajtva a vezérlő,elegendő-e a belesében lévő puffer a csúcsáramokhoz vagy érdemesebb kívül egyenirányítani,pufferelni jócskán és ezt bekötni a vezérlő(k)be? 2 ilyen maghajtót szeretnék rákötni erre a tápra.
Előzmény: Rabb Ferenc, 2024-08-16 10:53:31 [24631]
Rabb Ferenc | 4346
2024-08-16 10:53:31
[24631]
Ha 80V AC-vel is megtáplálható akkor miért akarod egyenirányítani és szűrni, mikor dobozon belül úgyis egyenirányítja és szűri?
Sziasztok, lehet hogy volt már róla szó,de nem találok róla semmit sem. DM860A léptetőmotor meghajtó tápfeszültsége adatlap szerint maximum 80 V AC vagy 110 V DC lehet. Gondolom a belső egyenirányítás miatt DC táp esetén mindegy a polaritás. A kérdésem a pufferkondenzátor : érdemes vezérlőn kívül egyenirányítani és pufferelni vagy elég lehet a vezérlőben lévő pufferkondi? Nem tudom,hogy milyen értékűt építettek bele,én külső puffer esetén olyan 2x4700 uF-re gondoltam. Köszönöm szépen!
Nem tudom valakit ez érdekli, de csináltam egy háromtengelyes digitális displayet amit itt megosztok. Egyszerű, Arduino Uno egy TFT displayjel. Kicsit lassú, de nekem jó lesz az új fúró / marógépemre.
/*------------------------------------------------------------------------------------------------------------------------------ * * Simple 3-axis DRO based on digital calipers. These calipers seems to use the same sort of interface, so it is easy to * decode the value and display it on an external display. Reading is slow because of the serial protocol between the * calipers and the Arduino module. Also the fact that a TFT display shield is used for displaying the values slows it down * even further. Useable on manual mill, or lathe if slow feed rates are acceptable. * * Reading of the calipers is done sequencially. There is no timeout, if one caliper is disconnected or stops working * then the software will wait forver and won't read the others. If one caliper stops sending data because it is switched off * or entered a sleep mode then the software will wait forever also. Make sure that the used calipers continue sending data * even when switched off or the caliper enters sleep mode. * * Use it, modify it or distribute it as you like. * * ------------------------------------------------------------------------------------------------------------------------------ */ #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_TFTLCD.h> // Hardware-specific library #include <MCUFRIEND_kbv.h>
// Define colours to be used by the TFT display
#define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF
MCUFRIEND_kbv tft;
int decode_axis = 3; int bit_array[25]; // For storing the data bit. bit_array[0] = data bit 1 (LSB), bit_array[23] = data bit 24 (MSB). unsigned long time_now; // For storing the time when the clock signal is changed from HIGH to LOW (falling edge trigger of data output).
int Z_CLOCK_PIN = A5; int Z_DATA_PIN = A4; int Z_old_unit = 5; // Force unit display at power up - Any value except 0 or 1 is fine to start with float Z_old_result = 123456.9; // Saved result to avoid repeated display of the same results. Fake data to start with.
int Y_CLOCK_PIN = 13; int Y_DATA_PIN = 11; int Y_old_unit = 5; // Force unit display at power up - Any value except 0 or 1 is fine to start with float Y_old_result = 123456.9; // Saved result to avoid repeated display of the same results. Fake data to start with.
int X_CLOCK_PIN = 12; int X_DATA_PIN = 10; int X_old_unit = 5; // Force unit display at power up - Any value except 0 or 1 is fine to start with float X_old_result = 123456.9; // Saved result to avoid repeated display of the same results. Fake data to start with.
//-------------------------------------------------------------------------------------------------------------------- // void setup() { tft.reset(); // Initialize the TFT display tft.begin(0x9341); // LCD type tft.fillScreen(BLACK); tft.setRotation(1); // Display in landscape orientation
pinMode(Z_CLOCK_PIN, INPUT); pinMode(Z_DATA_PIN, INPUT); pinMode(Y_CLOCK_PIN, INPUT); pinMode(Y_DATA_PIN, INPUT); pinMode(X_CLOCK_PIN, INPUT); pinMode(X_DATA_PIN, INPUT); // // Display the static text on TFT // 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 caliper DRO");
tft.setTextColor(WHITE); tft.setTextSize(3); // Each increase adds 10 pixels in height tft.setCursor(0, 70); tft.print(" X :");
tft.setCursor(0, 130); tft.print(" Y :");
tft.setCursor(0, 190); tft.print(" Z :"); }
//-------------------------------------------------------------------------------------------------------------------- // // Simple flow programming. It runs in a loop, not interrupt controlled. // The program is waiting until the clock signal is high for 500us. // It starts reading data when it turns low and decodes the caliper data. // void loop() {
unsigned long start = micros();
while (digitalRead(Z_CLOCK_PIN) == LOW) {} // If clock is LOW wait until it turns to HIGH time_now = micros(); while (digitalRead(Z_CLOCK_PIN) == HIGH) {} // Wait for the end of the HIGH pulse if ((micros() - time_now) > 500) { // If the HIGH pulse was longer than 500 micros we are at the start of a new bit sequence decode_axis = 3; // Indicate that Z position is to be decoded decode(); // Decode the bit sequence }
while (digitalRead(Y_CLOCK_PIN) == LOW) {} // If clock is LOW wait until it turns to HIGH time_now = micros(); while (digitalRead(Y_CLOCK_PIN) == HIGH) {} // Wait for the end of the HIGH pulse if ((micros() - time_now) > 500) { // If the HIGH pulse was longer than 500 micros we are at the start of a new bit sequence decode_axis = 2; // Indicate that Y position is to be decoded decode(); // Decode the bit sequence }
while (digitalRead(X_CLOCK_PIN) == LOW) {} // If clock is LOW wait until it turns to HIGH time_now = micros(); while (digitalRead(X_CLOCK_PIN) == HIGH) {} // Wait for the end of the HIGH pulse if ((micros() - time_now) > 500) { // If the HIGH pulse was longer than 500 micros we are at the start of a new bit sequence decode_axis = 1; // Indicate that X position is to be decoded decode(); // Decode the bit sequence } }
//-------------------------------------------------------------------------------------------------------------------- // // Decode and display the caliper data values on the TFT display. // The caliper sends a steam of 24 bits as data. This is simple binary data. // Bit 21 is the sign bit, high = negative, low = positive caliper display value. // Bit 24 is the unit type, high = inch, low = mm // void decode() {
int i = 0;
int Z_sign = 1; float Z_value = 0.0; float Z_result = 0.0; int Z_in_unit = 1; // Saved units used for forcing DRO display update in case of unit change, when the caliper display is zero.
int Y_sign = 1; float Y_value = 0.0; float Y_result = 0.0; int Y_in_unit = 1; // Saved units used for forcing DRO display update in case of unit change, when the caliper display is zero.
int X_sign = 1; float X_value = 0.0; float X_result = 0.0; int X_in_unit = 1; // Saved units used for forcing DRO display update in case of unit change, when the caliper display is zero.
//-------------------------------------------------------------------------------------------------------------------- // // Start with the Z axis // if (decode_axis == 3) { bit_array[i] = digitalRead(Z_DATA_PIN); // Store the 1st bit (start bit) which is always 1. while (digitalRead(Z_CLOCK_PIN) == HIGH) {}; // Wait until clock pin is LOW
for (i = 1; i <= 24; i++) { while (digitalRead(Z_CLOCK_PIN) == LOW) { } // Wait until clock returns to HIGH bit_array[i] = digitalRead(Z_DATA_PIN); while (digitalRead(Z_CLOCK_PIN) == HIGH) {} // Wait until clock returns to LOW } for (i = 1; i <= 20; i++) { // Turning the value in the bit array from binary to decimal. Z_value = Z_value + (pow(2, i-1) * bit_array[i]); }
if (bit_array[21] == 1) { Z_sign = -1; // Bit 21 is the sign bit. 0 = +, 1 = - } if (bit_array[24] == 1) { // Bit 24 tells the measuring unit (1 -> in, 0 -> mm) Z_in_unit = 1; if (Z_in_unit != Z_old_unit) { // Force displaying if caliper shows zero to display unit change Z_old_unit = 1; // Set to 1 to indicate inches tft.setCursor(210, 190); tft.fillRect(210, 190, 320, 30, BLACK); // Erase previous characters tft.print(" in"); Z_old_result = 123456.98; // Fake value to force diplaying the unit change on the TFT display } Z_result = (Z_value * Z_sign) / 2000.00; if (Z_result != Z_old_result) { // Skip displaying if same result as before Z_old_result = Z_result; tft.setCursor(85, 190); tft.fillRect(85, 190, 140, 30, BLACK); // Erase previous characters if (Z_result != 0) { if (Z_sign == 1) { tft.print("+"); } } tft.print(Z_result,3); // Display the result with 3 decimals } } else { Z_in_unit = 0; if (Z_in_unit != Z_old_unit) { // Force displaying if caliper shows zero to display unit change Z_old_unit = 0; // Set to 0 to indicate mm tft.setCursor(210, 190); tft.fillRect(210, 190, 320, 30, BLACK); // Erase previous characters tft.print(" mm"); Z_old_result = 123456.89; // Fake value to force diplaying the unit change on the TFT display } Z_result = (Z_value * Z_sign) / 100.00; if (Z_result != Z_old_result) { // Skip displaying if same result as before Z_old_result = Z_result; tft.setCursor(85, 190); tft.fillRect(85, 190, 140, 30, BLACK); // Erase previous characters if (Z_result != 0) { if (Z_sign == 1) { tft.print("+"); } } tft.print(Z_result,2); // Display the result with 2 decimals } } // Z position is done and updated }
//-------------------------------------------------------------------------------------------------------------------- // // Read Y axis position // if (decode_axis == 2) { bit_array[i] = digitalRead(Y_DATA_PIN); // Store the 1st bit (start bit) which is always 1. while (digitalRead(Y_CLOCK_PIN) == HIGH) {}; // Wait until clock pin is LOW
for (i = 1; i <= 24; i++) { while (digitalRead(Y_CLOCK_PIN) == LOW) { } // Wait until clock returns to HIGH bit_array[i] = digitalRead(Y_DATA_PIN); while (digitalRead(Y_CLOCK_PIN) == HIGH) {} // Wait until clock returns to LOW } for (i = 1; i <= 20; i++) { // Turning the value in the bit array from binary to decimal. Y_value = Y_value + (pow(2, i-1) * bit_array[i]); } if (bit_array[21] == 1) { Y_sign = -1; // Bit 21 is the sign bit. 0 = +, 1 = - } if (bit_array[24] == 1) { // Bit 24 tells the measuring unit (1 -> in, 0 -> mm) Y_in_unit = 1; if (Y_in_unit != Y_old_unit) { // Force displaying if caliper shows zero to display unit change Y_old_unit = 1; // Set to 1 to indicate inches tft.setCursor(210, 130); tft.fillRect(210, 130, 140, 30, BLACK); // Erase previous characters tft.print(" in"); Y_old_result = 123456.98; // Fake value to force diplaying the unit change on the TFT display } Y_result = (Y_value * Y_sign) / 2000.00; if (Y_result != Y_old_result) { // Skip displaying if same result as before Y_old_result = Y_result; tft.setCursor(85, 130); tft.fillRect(85, 130, 140, 30, BLACK); // Erase previous characters if (Y_result != 0) { if (Y_sign == 1) { tft.print("+"); } } tft.print(Y_result,3); // Display the result with 3 decimals } } else { Y_in_unit = 0; if (Y_in_unit != Y_old_unit) { // Force displaying if caliper shows zero to display unit change Y_old_unit = 0; // Set to 0 to indicate mm tft.setCursor(210, 130); tft.fillRect(210, 130, 140, 30, BLACK); // Erase previous characters tft.print(" mm"); Y_old_result = 123456.89; // Fake value to force diplaying the unit change on the TFT display } Y_result = (Y_value * Y_sign) / 100.00; if (Y_result != Y_old_result) { // Skip displaying if same result as before Y_old_result = Y_result; tft.setCursor(85, 130); tft.fillRect(85, 130, 140, 30, BLACK); // Erase previous characters if (Y_result != 0) { if (Y_sign == 1) { tft.print("+"); } } tft.print(Y_result,2); // Display the result with 2 decimals } } } //-------------------------------------------------------------------------------------------------------------------- // // Read X axis position // if (decode_axis == 1) { bit_array[i] = digitalRead(X_DATA_PIN); // Store the 1st bit (start bit) which is always 1. while (digitalRead(X_CLOCK_PIN) == HIGH) {}; // Wait until clock pin is LOW
for (i = 1; i <= 24; i++) { while (digitalRead(X_CLOCK_PIN) == LOW) { } // Wait until clock returns to HIGH bit_array[i] = digitalRead(X_DATA_PIN); while (digitalRead(X_CLOCK_PIN) == HIGH) {} // Wait until clock returns to LOW } for (i = 1; i <= 20; i++) { // Turning the value in the bit array from binary to decimal. X_value = X_value + (pow(2, i-1) * bit_array[i]); } if (bit_array[21] == 1) { X_sign = -1; // Bit 21 is the sign bit. 0 = +, 1 = - } if (bit_array[24] == 1) { // Bit 24 tells the measuring unit (1 -> in, 0 -> mm) X_in_unit = 1; if (X_in_unit != X_old_unit) { // Force displaying if caliper shows zero to display unit change X_old_unit = 1; // Set to 1 to indicate inches tft.setCursor(210, 70); tft.fillRect(210, 70, 140, 30, BLACK); // Erase previous characters tft.print(" in"); X_old_result = 123456.98; // Fake value to force diplaying the unit change on the TFT display } X_result = (X_value * X_sign) / 2000.00; if (X_result != X_old_result) { // Skip displaying if same result as before X_old_result = X_result; tft.setCursor(85, 70); tft.fillRect(85, 70, 140, 30, BLACK); // Erase previous characters if (X_result != 0) { if (X_sign == 1) { tft.print("+"); } } tft.print(X_result,3); // Display the result with 3 decimals } } else { X_in_unit = 0; if (X_in_unit != X_old_unit) { // Force displaying if caliper shows zero to display unit change X_old_unit = 0; // Set to 0 to indicate mm tft.setCursor(210, 70); tft.fillRect(210, 70, 140, 30, BLACK); // Erase previous characters tft.print(" mm"); X_old_result = 123456.89; // Fake value to force diplaying the unit change on the TFT display } X_result = (X_value * X_sign) / 100.00; if (X_result != X_old_result) { // Skip displaying if same result as before X_old_result = X_result; tft.setCursor(85, 70); tft.fillRect(85, 70, 140, 30, BLACK); // Erase previous characters if (X_result != 0) { if (X_sign == 1) { tft.print("+"); } } tft.print(X_result,2); // Display the result with 2 decimals } } } }
babosjozsef89 | 1
2024-08-02 10:07:08
[24625]
Sziasztok! Valaki ismer-e olyan szerelőt, aki az amada élhalítónk. Amada its 2 szoftver újratelepítését eltudná végezni vagy esetleg teljes retrofit. Köszönöm.