Hírek:

Fontos tudnivalók a migrációval kapcsolatban, kérlek olvasd el:

A régi fórumról áthozott hozzászólásoknál a felhasználó neve adatvédelmi megfontolásokból véletlenszerűen generált értékekre lett  lecserélve. Ez akkor tud a valódi értékre visszaállni, ha az adott felhasználó a régi fórumon nyilatkozik, hogy beleegyezik az adatainak az új fórumra továbbításához, majd ezután itt a régi felhasználónevével és email címével regisztrál.
8~20 óra között, 1~30 percen belül megtörténik a jóváhagyás, 30 percenként ellenőrizd email fiókodat (SPAM-ot is) mindenképp kapsz mail-t, a sikeres regisztrácioról, vagy a hibáról és, hogy mi a teendőd.
Nézd meg  "A régi fórumról, az új fórumra költözés útmutatót."
A régi fórumon használt email címmel de más felhasználói azonosítóval érkező regisztrációs kérelmek törlésre kerűlnek.

Main Menu

Elektronika

Indította gaben, 2025 február 03, 18:18

Előző téma - Következő téma

sarktibsi

Csak egy elmélet , hogyan szabályozhatnék egy 2.500 w-os szénkefés motort , esetleg egy tranzisztoros plc , meg egy szilárd test relé. Ha jól tudom az ssr-t akár 15-20.000-er szer is lehet kapcsolgatni másodpercenként. Nem tudom működne-e?

Vetesi75

Persze, hogy pillanatnyilag a szaggató rákapcsolja a teljes* feszültséget, csak az áram nem akar folyni a soros induktív összetevő miatt... (*fázishasításnál csak részfeszültséget!)

Vetesi75

SSR: Csak a tranzisztor kimenetűek tudják - de abból is csak a nullátmenet nélküliek, ezek viszont nem gyakoriak. Akkor már IGBT-vel célszerűbb. Viszont nullátmenet nélküli triac-ossal (optotriak), lehet csinálni fázishasítót. A Tungsramnak volt erre régen modulja (W9xxx?).

jani300

Most ugrott be ,miért is hányódik itt legalább 10 , vezetékétől megszabadított porszívó :)
Egyébként félvezetőket is szedtem ki ezekből , co gép huzalelőtoló vezérlőjébe .

sarktibsi

Nekem egy 18.5 Kw-os dc motorom van ami felesleges , nem tudom , hogy érne többet ha eladom egybe , vagy szétszedem darabokra. Mennyi réz lehet benne?

jani300

Ezt ne :)
Pont itt ?  :)

sarktibsi

Teljesen hivatalosan vettem egy cnc gépet , áfás számlával. Csak eladhatom ami nekem nem kell róla (gondolom én) van hozzá hajtás is, működőképesen vásároltam.

jani300

Igen !
És teljesen félre is értettél :)
Nem rezelünk , csak úgy , mert minek , és talán tiszteljük is valamennyire a vackainkat , de hagyjuk inkább ezt .

horcsab

Sziasztok!

Keresek egy FUW 400 NC gép elektromos rajzát.
Heidenhain vezérlős, de bármilyen más vezérlős megoldás is érdekel.

Ha valakinek megvan és megosztaná velem, köszönettel venném.

bph8xtn5n

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.

OlyFlyer

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
      }
    }
  }
}

tekes

Nagyon szép munka, gratulálok!

A tolómérők vége saját fejlesztés, vagy lehet ilyet kapni?

Rabb Ferenc



Kicsa

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!