Jump to content
ELFORUM - Forumul electronistilor
dj_ando_83

Citire rotatie

Recommended Posts

Am in plan automatizarea unor porti batante. Pentru actionarea lor voi folosi un mecanism cu surub. Problema care o am e ca inca nu mi-am dat seama ce cod sau ce sa utilizez pentru citirea pozitiei portii. Limitatoarele mecanice sunt excluse (prea multe fire, uzura in timp, pozitionare greoaie etc), asa ca ma gandeam sa folosesc un fel de encoder sau un simplu senzor optic (asta ar fi mult mai usor de realizat) . Placa arduino o sa primeasca impuls de comanda de la un modul de inchidere centralizata ( mai am un modul cu 4 canale, dar functioneaza cam aiurea). Cum as vrea sa functioneze placa arduino: primeste comanda pentru deschidere, cupleaza releele necesare pentru deschidere, porneste motoarele cu o viteza mica, numara cateva rotatii, porneste motoarele la viteza maxima, numara iar impulsuri, ajunge la un numar prestabilit de impulsuri, scade viteza motoarelor pana la oprire, decupleaza releele. La inchidere sa faca cam acelasi lucru , dar impulsurile sa fie descrescatoare. In timpul asta as vrea sa monitorizez si consumul de curent al motoarelor. La consum, ma gandeam sa folosesc niste rezistente si sa citesc tensiunea pe ele. In final, ce pot folosi ca sa numar impulsurile (ce cod si care varianta ar fi mai simpla)? Am cautat pe net ceva de care sa ma pot folosi, dar nu am gasit nimic (ori nu am stiut eu ce sa caut). 

Ps - o alta varianta pentru citirea rotatiei, ar fi utilizarea unor senzori cu efect hall, dar din pacate nu stiu care ar fi frecventa maxima care o pot citi. La varianta asta, ar fi cam greu de fixat magnetul. 

Ps2 - Vad ca nu am specificat nimic de viteza de rotatie a surubului : undeva la maxim 2000 de rotatii pe minut. Motoarele sunt de 24V, dar vor fi alimentate intre 48 si 60V. Timpul maxim as vrea sa fie undeva la 15 secunde, asa ca nu imi fac probleme pentru tensiunea mare. Un alt aspect care nu l-am precizat, ar fi ca totul se va alimenta de la un acumulator auto (Arduino, modul inchidere centralizata, invertoare, relee). 

 

Edit : am incercat si senzorii cu efect hall si fuctioneaza la viteza maxima a motorului. 

Edited by dj_ando_83

Share this post


Link to post
Share on other sites

Nu ati mentionat daca motoarele sunt steppere sau CC (CA). Fiind mentionat ceva de impulsuri probabil ca sunt steppere dar ar trebui spus in clar. Sau prin impulsuri faceti referire la cele date de senzori?

 

Daca sunt steppere trebuie mentionat daca vor fi controlate din Arduino sau cum altfel. Cum este controlata viteza? Viteza va fi ajustata functie de numarul de rotatii pe secunda citite din senzori? Adica, daca din terte motive, desi motorul este pornit cu o anumita viteza, viteza de deschidere a portilor este mai mica decat se doreste si atunci se iau masuri. Cu alte cuvinte feedback?

 

Incercati sa va faceti algoritmul in minte. Pe urma totul este usor de implementat.

 

Ceva simplu ar fi:

 

Impartiti cursa usilor in 3 zone: 

 1. Zona A - se accelereaza progresiv miscarea usilor pentru a infrange inertia pana se ajunge de la viteza nula (porti in starea oprita) la viteza nominala de deplasare. Probabil ca aici se poate folosi un "look-up table" sau o ecuatie lineara.

 2. Zona B - se misca usile cu o viteza constanta

 3. Zona C - se decelereaza progresiv miscarea usile pana la viteza 0 adica portile sunt oprite. De asemenea, "look-up table" sau o ecuatie lineara.

Detectia zonelor se face prin monitorizarea numarului de impulsuri. Se poate face o detectie capat de cursa prin stabilirea unui curent maxim pentru un anume timp prin motoare. Dar trebuie avut grija ca sa nu apara confuzii cu curentul de eroare.

 

Pe tot timpul miscarii usilor si daca semnalul de start miscare este ON, se monitorizeaza curentul prin motoare pentru a preveni depasirea unui curent maxim prestabilit. Daca se depaseste o anumita valoare pentru un timp anume se poate genera o Eroare si se opresc portile din miscare.

Pe tot timpul miscarii usilor si daca semnalul de start miscare (inchidere sau deschidere) este ON, se monitorizeaza senzorii (presupun ca vor fi cate unul pentru fiecare usa - daca poarta este formata din doua usi). Preferabil ar fi sa fie mai multi senzori pentru o rezolutie si un control mai bun al miscarii.

 

 

Astfel aveti:

- 2 pini INTRARE DIGITALA pentru cei doi senzori optici

- 1 pin INTRARE DIGITALA pentru comanda de deschidere

- 1 pin INTRARE DIGITALA pentru comanda de inchidere (acesta este optional pentru ca se poate lucra cu o masina de stari)

- 2 pini INTRARE ANALOGICA pentru citirea curentului prin cele doua motoare

 

Si in functie de controlul motoarelor:

- daca motoarele se controleaza prin PWM atunci 2 pini IESIRE ANALOGICA

- daca motoarele se controleaza in CC se poate folosi un DAC (iar aici se poate face un R-2R sau se poate face un filtru trece jos pe iesiri PWM sau un cip extern controlat SPI/I2C) sau un potentiometru digital (SPI sau I2C). Eu as inclina catre un pot digital pentru ca cipurile sunt ieftine si usor de controlat.

 

Odata ce formulati un algoritm ca cel mai sus, in pasi care pot fi implementati cu Arduino, atunci va va fi usor sa faceti un program Arduino pe baza caruia veti putea primi ajutor si indrumari.

Edited by mars01

Share this post


Link to post
Share on other sites

Motoarele sunt de curent continuu. Pana la urma cred ca am sa aleg senzorii cu efect hall dar nu stiu cum sa fac legatura intre ei si arduino (sunt tip "open colentor"). Senzorii sunt S057, sunt identici ca constructie si conexiuni ca si SM230, dar nu stiu daca au aceeasi parametri de functionare. Stiu ca au un curent maxim de 40mA si tensiunea de alimentare de 5V, dar eu am "dat" dat in ei cu 12V si nu au crapat, din teste rezulta ca suporta numarul de impulsuri date de magnetul fixat pe axul de fixare al surubului (am facut un test si suporta un numar dublu de impulsuri). 

Pinii necesari ar fi urmatorii (din ce am calculat eu) :

0 - comanda inchis 

1 - comanda deschis 

2- comanda invertor (asta este necesar pentru ridicarea tensiunii de 12V a acumulatorului la cel putin 48V) .

3- deocamdata liber

4- deocamdata liber

5 - echo

6 - trig . 5 si 6 sunt pentru a monta un senzor cu ultrasunete sa nu permita deschiderea portilor daca un autovehicul este in raza portilor). 

7 - intrare numarator impulsuri motor 1

8 - intrare numarator impulsuri motor 2

9 - pwm motor 1

10 - pwm motor 2

11 - schimbare sens 1

12 - schimbare sens 2

13 - lampa iluminat/ semnalizare. 

 

0- masurare curent motor 1

1 - masurare curent motor 2.

 

Am in cap cum sa fac algoritmul, dar ma freaca numararea impulsurilor. Am gasit pe net ceva, dar ramane sa il testez sa vad cum functioneaza.

Share this post


Link to post
Share on other sites

poti sa fixezi pe ax un disc metalic cu fante si sa folosesti un senzor de proximitate de format convenabil. sunt senzori cu range destul de mic, 2-4mm si mai sunt si ieftini. avantajul e simplitatea.

Share this post


Link to post
Share on other sites

Am realizat si schimbarea turatiei in functie de numarul de impulsuri, dar nu stiu cum sa il fac sa se opreasca. 

E ceva de genul asta pentru numarat si schimbat viteza :

 

const int buttonPin = 2;
#define fadePin 9
int count = 0 ;
int buttonState = 0;
 
void setup(){ 
  pinMode(fadePin, OUTPUT);
  pinMode(buttonPin,INPUT);
  Serial.begin (9600);
}
void loop()
{
  {buttonState = digitalRead(buttonPin);
  analogWrite(fadePin, 20);
  if (buttonState == HIGH);
  count++;
  if (count >=250) {
    count = 0; }
}
 
if (count >= 20); { analogWrite(fadePin, 20); }
if (count >= 40); { analogWrite(fadePin, 35); }
if (count >= 60); { analogWrite(fadePin, 50); }
if (count >= 80); { analogWrite(fadePin, 70); }
if (count >= 100); { analogWrite(fadePin, 100); }
if (count >= 120); { analogWrite(fadePin, 135); }
if (count >= 140); { analogWrite(fadePin, 170); }
if (count >= 160); { analogWrite(fadePin, 255); }
delay(100);
Serial.println(count);
}
 
Deocamdata atat am reusit sa fac astazi. Restul...cand le pun cap la cap pe toate. Deocamdata lucrez cu portiuni de cod ca sa imi fei mai usor. 
Senzorul magnetic functioneaza destul de bine. Singura problema e ca nu mi-am dat seama cu sa leg iesirea senzorului direct la arduino si am folosit un releu (nu vroiam sa fac vreo ghidusie si sa scot fumul din integrat). Nu ma asteptam sa comute asa repede acel releu. Oricum, trebuie sa gasesc alta modalitate de a le conecta, pentru ca releul/releele o sa consume aiurea daca magnetul o sa fie oprit langa senzor. 

Share this post


Link to post
Share on other sites

Guest

Am avut ocazia sa vad defecte a senzorilor hall in unele placi electronice, si nu a fost un rezultat ieftin.

Poti folosi optocuplor in locul releului.

Edited by Guest

Share this post


Link to post
Share on other sites

Incercasem si cu optocuplor, dar cred ca nu l-am legat bine. Ori din cauza led-ului care era conectat la senzor nu functiona. In cazul in care folosesc optocuplor, se schimba ceva la legarea lui la arduino? Deocamdata contactele releului sunt legate intre +5v si pinul 2, iar pinul 2 este legat la masa cu o rezistenta de 10k. 

Share this post


Link to post
Share on other sites
Guest

Doar inlocuiesti releul. Pastrezi rezistenta de 10k.

Share this post


Link to post
Share on other sites

Exact asa facusem si eu, dar cred ca am inversat pinii optocuplorului. Mai incerc Maine sa vad daca si cum functioneaza. Deja am inceput si proiectarea cablajului in Eagle. Super sa fie de ajuns dimensiunea aia limita. Asta fiind aproape rezolvata, ramane problema opririi.Nu cred ca ar face pagube senzorul pentru ca il alimentez LA 5vPS - enervant rau android-ul asta.

Edited by dj_ando_83

Share this post


Link to post
Share on other sites

Poate mai sunt ceva curiosi despre evolutia proiectului. Sistemul de actionare cu surub a disparut din plan. Avea o bataie mult prea mare surubul si riscam distrugerea rulmentilor din motor la timpul de inchidere/ deschidere care il vroiam plus ca arata cam urat toata mecanica. Singura varianta pentru a evita oscilatiile suruburilor la anumite distante, era sa schimb viteza motorului unde incepeau oscilatiile. Nu imi convenea varianta asta pentru ca as fi vrut un timp de inchidere sau deschidere de maxim 15 secunde. In schimb, am facut niste teste cu alt sistem (asta e prevazut cu lant de actionare al portii) si se prezinta binisor. Mai ramane de facut mecanica completa. In test a fost implicat doar motorul, sistemul cu lant si acumulatorul auto. Chiar daca senzorii hall ar fi buni pentru sistem, voi monta limitatoare. Nu mai este necesara citirea vitezei, ci doar curentul prin motor si limita de cursa. Dezavantajul sistemului de fata e consumul mult mai mare de curent.  3-4A / motor fata de 0, 3/0,4A / motor in cazul celuilalt sistem ( undeva la maxim 1,5A cu tot cu invertor). 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines