marți, 10 iulie 2018

joi, 2 martie 2017

Driver  3 axe albastru cu TB6560 - China
In pachetul primit la cumpãrare de pe net, am gãsit driver-ul din imagine, un cablu pentru portul paralel
şi  un CD. Pe CD în afarã de un kit pentru Mach3 , au mai fost puse câteva fişiere .pdf,  care nu folosesc la nimic – deoarece nu corespund produsului din pachet ! 
 Fabricantul  nu a furnizat schema electronicã ,  semnificaţia pinilor la cupla PC-LPT nu corespunde cu nici unul din documentele de pe CD-ul pachetului.
Am fost nevoit sã caut mult pe net  o schemã   dintre cele refãcute  de amatori şi publicatã pe forumuri, care sã se potriveascã cu acest modul. (amplasarea pieselor pe cablaj şa fie identicã şi piesele … aceleaşi)
 Din cele ce am scris în continuare nimic nu e inventat de mine. Totul este din documentare şi multe multe cãutãri şi încercãri !
În final , am reuşit sã – l utilizez, deşi la un  moment dat vroiam sã-l trec la pierderi.  
1.Identificarea produsului – este necesarã, deoarece la achiziţionare  nu are nici un fel de inscripţionare care ar putea defini varianta constructivã a modulului . Au fost comercializate mai multe variante, la care diferã :
- semnificaţia pinilor de la cupla PC-LPT
- ordinea în care sînt amplasate pe placã ieşirile pentru motoarele pas cu pas - adicã Z, Y, X (existã şi plãci cu ordinea X,Y,Z la acelaşi fabricant)
- amplasarea componentelor electronice pe placã 
-piesele de pe placã      
Dacã apar diferenţe faţã de imagine, trebuie sã re-identificaţi toate elementele driver-ului dvs.
Fabricantul  nu a furnizat schema electronicã , am preluat-o din cele refãcute de amatori şi publicate pe forumuri !

Fig.1  - driver 3 axe China , cu TBA 6560


1.2.Semnificaţia pinilor de la conectorul  PC-LPT

Driver-ul  se  cupleazã la portul paralel al PC-ului, iar pentru setarea aplicaţiei folosite
de operator, este important sã se cunoascã  semnificaţia fiecãrui pin de la conector.
Adnotãrile din tabelul care urmeazã :  En#1 ; Dir#1 ; Clk1; …… sînt cele din utilitarul Mach3.

Fig.2 -conectorul pentru portul paralel


Semnificatia pinilor la cupla PC-LPT : pinii pt. output- comenzi motoare

Axa  X
Axa Y
Axa  Z
Run / Stop
En #1 = pin 6
En #2 = pin2
En #3 = pin 14
       pin 9
Dir #1 = pin 4
Dir #2 = pin3
Dir #3= pin 7
Clk 1   = pin 5
Clk2  = pin8
Clk 3 = pin1












1.3. Setare micro-switch pentru fiecare canal

  Pentru fiecare canal ( X;  Y; Z)  existã cîte un bloc cu 6 micro întrerupãtoare ca în fig 3, care trebuiesc setate fizic  On/Off  ţinând seama şi de caracteristicile mecanice ale maşinii şi a motoarelor pas cu pas utilizate




La prima încercare , am folosit setãrile:
1 = On; 2=On   => motor current 100%
3 = On; 4=Off   =>  25% decay
5 = Off; 6 = On =>1/16 microsteps
Am mai fãcut încercãri cu 1/2micropaşi - nu am obţinut funcţionare corespunzãtoare
Am finalizat cu setarea pe 1/8 micropaşi.
Acestea sînt setãrile fizice pt driver.
 La aceste setãri, se vor mai adãuga setãrile din aplicaţia  de pe Pc (Mach3 sau Kcam).

1.4. Portul paralel la PC - setare LPT 
Pentru probe şi lucru  cu Mach3 , trebuie ca portul paralel al PC-ului sa fie setat în BIOS la opţiunea ECP. (cu alte opţiuni, driver-ul meu nu a funcţionat). Atenţie : la calculatoarele mai vechi, care lucreazã cu
Windows XP , fereastra de setare LPT poate sã difere. Trebuie aleasã varianta de funcţionare normalã , fãrã întreruperi (ECP) . 
Pe Widows 7 ; Windows 10 , utilitarul  Mach 3 nu funcţioneazã .  

La deschiderea Device Manager->Propertis
trebuie sã  aparã imaginea  din figurã.Pe PC-ul tãu, cu Windows XP, trebuie sã ai instalat utilitarul Mach 3 pentru a continua.     

Informații pentru a continua :
Port = 1
Port Adresa = 03BC




1.5. Modificãri driver.

Surse net : diferiţi utilizatori au fãcut modificãri asupra circuitelor electronice si pieselor acestui tip de driver, pentru optimizare şi creşterea performanţelor:

Eu  nu am încercat sã fac astfel de  modificãri.

 2.Setãri  în utilitarul  Mach3

Adresa 03BC trebuie scrisã în panoul Config din Mach3, iar la port trebuie trecut 1.

1.6. Setare releu motor principal (“Spindle”) 
- Motorul pentru antrenarea sculei aşchietoare poate fi pornit/oprit prin releul de pe placa driver-ului nostru, destinat acestui scop. Acest releu poate fizic   sã porneascã/opreascã motorul , dupã semnalul primit la pin9 de la Mach3;

Pinul 9 – trebuie setat în Mach3  în  Config -> Output Signals cu Enabled la “Output #1” şi 9 în coloana “Pin Number”, iar în coloana “ActiveLow” rãmâne cu cruciuliţa roşie – ca în figura anexatã, deoarece semnalul este inversat prin sistemul optocuplor – vezi Fig. 4


Fig.4
                                                                                                                                                                                                                            
- am validat ieşirea Output #1 pe pinul 9 ;
- în panoul “Spindle Setup” am avut grijã sã nu fie bifate cãsuţele de la “Disable Spindle Relays” şi “Disable Flood/Mist relays
In cazul nostru, nu existã un releu pentru pompa de rãcire;
Pompa de rãcire poate porni/opri prin intermediul aceluiaşi releu - simultan cu motorul principal.Va trebui fãcut fizic un circuit de comandã  exterior în acest scop.In ecranul   “Diagnostic Alt-7”   Led-ul (cãsuţa) de la “ Output 1” va clipi Led-ul roşu dacã programul este pornit şi apãsãm pe comutatorul “Spindle Toggle” din acelaşi ecran (Fig.5).


Fig.5

Operatorul maşinii are mai multe posibilitãţi de a porni şi opri motorul principal  Fig.6 

Fig.6

In ecranul principal  “Program Run Alt-1” Fig. 6  în dreapta jos se aflã familia de controale “Spindle Speed”.Cu butonul comutator “Spindle CW F5” se poate porni/opri motorul principal.
Pentru încercãri, am montat un Led şi o baterie pe contactele releului (vezi imaginea din Fig.10.)La acţionarea acestui buton, Led-ul meu se aprindeşi se stinge.
In  fereastra “Input” din ecranul “MDI Alt2” daca tastãm comanda  M3 ,  Ledul de la releu se aprinde, iar dacã tastãm M5 se stinge.
Pentru mine a fost o adevãratã încercare sã identific pinii, şi sã aflu cum trebuiesc corelate setãrile cu ajutorul ecranului “Diagnostic ALT-7”  

1.6.Setarea limitatorilor de cursã.

In imaginea inclusã în Fig.7, este redatã amplasarea cuplei J10 pe placa driver şi identificarea pinilor. 
Limitatorii de cursã trebuie  cuplaţi la driver prin cupla J10 cu 5 pini A;B;C;D;E din Fig7, unde :

A = masa (ground)
B = limitator axa X (corespunde la pin 13)
C = imitator axa Y  (corespunde la pin 12)
D = limitator axa Z  (corespunde la pin 11)
E = neutilizat (corespunde la pin 10) 




De la limitatori, semnalele sînt preluate de la driver şi trimise la PC – Mach3 prin pinii de intrare 13; 12;11;10 de la cupla cu 25 pini.
Pentru setãri, am constatat cã pinii de intrare de la J10 au corespondenţa astfel:
B = limitator axa X = este intrarea  Input #1 şi lucreazã cu pin 13 
C = imitator axa Y  = este intrarea Input #2 şi lucreazã cu pin 12
D = limitator axa Z  = este intrarea Input #3 şi lucreazã cu pin 11
Pentru cã semnalele sînt preluate şi inversate prin optocuplori, în tabelul Config ->Ports&Pins->Input Signals am setat semnalele de  intrare Active Low şi pinii corespunzãtori pentru fiecare semnal Fig 8:

Fig.8


Input#1   Enabled PinNumber=13  setare Active Low

Input#2   Enabled PinNumber=12  setare Active Low

Input#1   Enabled PinNumber=11  setare Active Low









Apoi, am setat Enabled şi pinii corespunzãtori    pentru fiecare limitator de cursã –fig.9

Fig.9

X++     Enabled PinNumber=13  Active Low
X- -      Enabled PinNumber=13  Active Low

Y++     Enabled PinNumber=12  Active Low
Y- -      Enabled PinNumber=12  Active Low

Z++     Enabled PinNumber=11  Active Low
Z- -      Enabled PinNumber=11  Active Low





Pentru încercãri, am cuplat firul negru (masa) cu cele 4 fire roşii  la o linie comunã – practic la masã – simulând limitatorii închişi
In timpul încercãrilor, pentru setare, am decuplat succesiv firele roşii de la masã  simulînd deschiderea linitatorilor de cursã





Cu aceste încercãri reuşite, mi-am recãpãtat increderea cã pot finaliza maşina ! 











sâmbătă, 5 septembrie 2015

Am crezut cã este uşor de programat ATTiny85 ….

Cu ideea din titlu, am cumpãrat 4 buc ATTiny 85  neştiind cã  Arduino  IDE trebuie upgradat pentru a putea programa şi acest microcontroller. Am fost nevoit sã mã  "cultiv" din nou pe internet.....
 Arduino IDE trebuie complectat pentru programare  ATTiny 85 cu cîteva fişiere.  O bibliografie bunã şi accesibilã cu ce şi cum se face am gãsit pe siteul :

Pentru cã  pinii lui ATTiny85, precum  şi pinii soclului sânt scurţi şi nu fac contacte sigure pe placa de încercãri (am constatat asta la primele încercãri ) am fãcut o placã –PCB-) care sã aibã:
- conector pentru programare SPI;
- conectori pentru legãturi exterioare;
Nu m-am mai complicat sã schimb frecvenţa de funcţionare , am renunţat la  quarţ , şi lucrez pe 1Mhz.

PCB ATTiny 85

Semnificaţie pini ATTiny 85




Pinii mapaţi în libraria ATTiny (cu culoare violet/verde în poza de sus) sint : 




Pentru cã  pinii lui ATTiny85, precum  şi pinii soclului sânt scurţi. La primele încercãri am constatat cã ei nu fac contacte sigure pe placa de incercare.A trebuit sã fac o placã dedicatã ATTiny85  care sã aibã:
 - conecor pentru programare SPI;
- conectori pentru legãturi exterioare;
Nu m-am mai complicat sã schimb frecvenţa de funcţionare , am renunţat la  quarţ , şi lucrez pe 1Mhz.
Schema PCB: 


Desen cablaj:

Dupã ce am fãcut toate adaptãrile, am cuplat montajul la programatorul  USBTinyIsp, şi am încãrcat sketch-ul BlinkTiny.ino




Nota:
 - am fãcut download din https://code.google.com/p/arduino-tiny/downloads/list poziţia arduino-tiny-0150-020.zip si am dezarhivat-o într-un director, pe un stik ;  am deschis fişierul Readmy.txt şi am parcurs pas cu pas instructiunile, adicã: în directorul unde sint salvate  programele din Arduino IDE (a se vedea locaţia acestuia din  meniul File ->Preferences :


Apoi, trebuie creat directorul “hardware” , unde am copiat fişierele dezarhivate, şi am fãcut fişierul boards.txt : 
      C:\.................................\Arduino\hardware\tiny\license.txt
      C:\.................................\Arduino\hardware\tiny\Prospective Boards.txt
      C:\.................................\Arduino\hardware\tiny\README
      C:\.................................\Arduino\hardware\tiny\bootloaders\
      C:\..................................\Arduino\hardware\tiny\cores\

In plus , am mai fãcut download  de la    aceeaşi  adresã  pentru fişierul tiny-isp-2-0100-0001.zip pe care l-am dezarhivat, într-un director denumit TinyIsp în locatia unde pãstreazã Arduino IDE programele salvate.Acest fişier  (echivalentul lui Arduino ISP din Arduino IDE) transforma Arduino Uno in programator pentru ATTiny .
L-am uloadat pe Arduino Uno , şi  am fãcut conexiunile cu ATTiny 85 . 
Cu încercãrile terminate , am mai fãcut  cîteva etichete pe bord, ca utilizarea sã  fie mai usoarã  














marți, 1 septembrie 2015

Afisaj LDC cu interfata I2c si senzor brick LM50 !

 Am vrut sã scap de cablarea cu fire multe dintre LCD şi Arduino şi mi-am propus sã fac o aplicaţie cu interfaţa I2C. 
 Toate bune şi frumoase , pânã am instalat librãria LiquidCrystal_I2C  şi am constatat cã existã diferenţe faţã de LiquidCrytsal .

Am încercat exemplele “CustomChars.ino” şi “Hello World.ino” din LiquidCrystal_I2C; 
Apoi , am încercat  sã adaptez la I2C  şi exemplele din LiquidCrystal, ca sã mã familiarizez  cu modul de lucru.
Si pentru cã aveam un senzor LM50, am trecut la încercãri.
Ca întotdeauna, am cãutat mai întîi pe modele lucrate de  altcineva  – mi-am zis cã e mai comod.
Am gãsit un exemplu pe:
l-am încercat cu afişare pe SerialMonitor  şi apoi l-am modificat  la afişarea pe LCD I2C.

Cea mai buna bibliografie, pentru explicarea algoritmului 
şi calculelor matematice este pe  site-ul :
ttp://users.utcluj.ro/~rdanescu/pmp-c08.pdf  pagina 31.Tot de aici am preluat şi inaginea paginii 31, cu caracteristicile senzorului LM50 :



............................................................................................................................................
Conexiuni
De la modulul I2c, pinul  SDA  la pinul  A4 de la Ardu Uno
De la modulul I2c , pinul SCL la pinul A5 Ardu Uno
De la Brickul LM50, pinul Out la pinul A0  Ardu Uno

GND – este comun ; Vcc la +5v, comun
............................................................................................................................................

Codul modificat şi complectat (am blocat afişarea pe Serial Monitor ) este redat mai jos :
//…………………………………
//temperaturaC_I2C.ino
//…………………………………
#include <Wire.h>
#include <LiquidCrystal_I2C.h>   
// cu senzor brick LM 50
// am plecat de la schita de pe Robofun cu LM50 si
//http://users.utcluj.ro/~rdanescu/pmp-c08.pdf  pagina 31
//  am adaugat cod pentru afisare pe LCD I2C 16x2
//.......................................
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup(){
 // Serial.begin(9600);
     lcd.init();                      // initialize the lcd
     lcd.backlight(); 
    // Print a message to the LCD.
     lcd.print("Temperatura: ");  
}

void loop(){
 Serial.print("Temperatura: ");
  float temperatura = readTempInCelsius(10,0); //apeleaza functia, cu 10 citiri pe pinul analg A0)
// functia returneaza media a 10 citiri succesive
lcd.setCursor(0,1);
lcd.print(temperatura);
lcd.setCursor ( 6, 1 ); // sare pe linia 2
lcd.print((char)223); // Tipareste cerculetul de la grade Celsius  pe linia 2
lcd.setCursor ( 7, 1 ); // sare pe linia 2
lcd.print("C");
 // Serial.print(temperatura);
 // Serial.print("  ");
  //Serial.write(176);
  //Serial.println("C");
  //delay(200);
  delay(1000);
}

// functia pentru citirea temperaturii , referinte :http://www.robofun.ro/senzor-temperatura-brick
//http://users.utcluj.ro/~rdanescu/pmp-c08.pdf exemplu pagina 31
float readTempInCelsius(int count, int pin) { //unde count= numarul de citiri; la pin-ul specigicat-0
       
        float sumaTemperatura;
        for (int i =0; i < count; i++) { // pentru i de la 1  la 10
            int reading = analogRead(pin);  // citeste pinul analog 0
            float voltage = reading * 5.0;  // 5 este rezolutia la tensiunea de referinta 5V pt Arduino Uno
            voltage /= 1024.0; // imparte la rezolutie senzor
            float temperatureCelsius = (voltage - 0.5) * 100 ; //scade deplasament
            sumaTemperatura = sumaTemperatura + temperatureCelsius;
            }
          return sumaTemperatura / (float)count; //calculeaza media
          }


Succes la cine doreşte sã  încerce !