ardiles Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 deci: (fara deci!) trec direct la expunerea problemei: am un ax ce se roteste...viteza lui de rotatie e mica(sub 1rot/sec), dar se roteste de mai multe ori. senzorii sunt optici, cu fanta, pe ax se va afla "țâmbuștiucul" ce va trece prin fanta senzorilor. sunt "vazator"(am deschis, m-am jucat cu in/out, timer, intreruperi, cu alte cuvinte INCEPATOR), de FLOWCODE... intrebarea e urmatoarea: cum fac in Flowcode, un program pentru a programa un microcontroler sa-mi identifice directia de rotatie a unui ax? intrarile in PIC sunt urmatoarele: GP4 si GP5, odata va fi 16(gp4) si 32(gp5), cum il fac sa inteleaga ca pe intrare 16 urmat de 32 reprezinta rotire stanga, si 32 urmat de 16 reprezinta dreapta(sau invers, ca e simetrica treaba)? multumesc in avans tuturor ce vor raspunde umilei mele probleme! Link spre comentariu
UDAR Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 Nu ai prezentat prea clar ( cel puțin pentru mine ) realizarea hard. Dar dacă e cum înțeleg eu nu poți pentru că indiferent de sensul de rotație succesiunea va fi GP4 -pauză-GP5- pauză - GP4 șamd , deci nu se va putea decela. Trebuie să ai o suprapunere , ceva de genul GP4 - GP4&GP5 - GP5 - pauză - șamd ( code Gray ). Link spre comentariu
XAN77 Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 Înțeleg că ai cel puțin 2 senzori. Dacă e așa și dacă ei sunt unul lîngă altul, înseamnă că într-uns sens de rotație timpul dintre activarea celor 2 senzori va fi scurt, iar în celălalt sens va fi mult mai lung. De aici înainte cred că e clar. 1 Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 (editat) @UDAR multumesc!Ai inteles bine in ciuda faptului ca nu am explicat complet.Mi-a trecut prin minte si varianta si cu trei senzori dar:Avand in vedere urmatoarea:Avem doi senzori optici si o fanta care prin ea trece un obstacol; obstacolul ce intrerupe lumina prin fanta, il pot face lat, suficient ca sa obtureze ambii senzori odata, si in situatia asta microcontrolerul nu debiteaza nimic la iesire. Din aceasta pozitie(cu ambii senzori obturati), axul se roteste cateva grade, suficiente sa se elibereze un senzor=>ceva la o iesire.Ce fac eu, ca axul se poate roti o rotatie completa si fanta poate reobtura ambii senzori si nu vreau asta(adun un counter si apoi il scad? Ar fi una dintre solutii).Dar persistenta nedumerire, este: cum fac sa diferentiez 16 urmat de 32 fata de 32 urmat de 16? @XAN77, abea acum am vazut mesajul tau! Multumesc! Cred ca am postat in acelasi timp, sau ai postat in timp ce eu scriam de zor....cum mi-ai spus, ca timpul de obturare dintre cei doi senzori este relativ scurt, din pacate poate fi mai lung timpul de obturare a unui senzor, si mai este problema ca axul se poate opri intre cei doi senzori si se complica tare treaba. Poti exemplifica putin? intre cei doi senzori distanta fiind mica, as lati obturatorul si m-as putea folosi de acest timp mic sa adun un counter? insa nu stiu cum sa reproduc asta in flowcode...Mai demult am facut un numarator de rotatii pentru a sti cate spire am bobinat, insa nu ma pot inspira din el ca am deja fisierul compilat.Ideea e cu acel numarator, e ca aduna intr-un sens si scade in celalalt sens. Ceva de genul vreau si eu dar fara afisaj, ci cu iesiri separate. Editat Iunie 9, 2014 de ardiles Link spre comentariu
XAN77 Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 cred că cel mai bine obturatorul să fie mai lat să poată obtura ambii senzori, astfel vor exista 4 stări posibile: 00 abturatoru nu e în raza senzorilor 01 obturatorul a acționat un senzor, cel din dreapta 11 ambii senzori activați 10 doar senzorul din stînga După fiecare modificare a stării senzorilor (întrerupere pin change de exemplu) se memorează ultima lor stare, iar cînd va apare următoarea modificare, funcție de ultima stare salvată se va afla sensul de rotație. Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 (editat) aoleeu ce complicat mi se pare.... trebuie scris in memorie, ceapa ma-sii... Editat Iunie 9, 2014 de ardiles Link spre comentariu
XAN77 Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 Nu mă refeream la eeprom sau altfel de memorie mai complicată, păstrezi starea anterioară într-un registru, o variabilă oarecare. Cît despre oprirea roții, nicio problemă, înseamnă că starea curentă se va păstra permanent. Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 (editat) parca se simplifica daca evit screierea in eeprom s.a.m.d... oricum, se pare ca e muult mai complicat decat mi-am imaginat. Editat Iunie 9, 2014 de ardiles Link spre comentariu
UDAR Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 Habar nu am de Flowcode , ce numești tu 16 și 32 ? GP4 e 16 și GP5 e 32 ? Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 Habar nu am de Flowcode , ce numești tu 16 și 32 ? GP4 e 16 și GP5 e 32 ? da! Link spre comentariu
XAN77 Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 parca se simplifica daca evit screierea in eeprom s.a.m.d... oricum, se pare ca e muult mai complicat decat mi-am imaginat. nu văd ce ți se pare complicat. Pui în variabila ultima_pozitie continutul lui GP4, GP5 cum te pricepi tu s-o faci în flowcode ăla. Apoi citești permanent, dacă nu folosești întreruperi că e mai complicat, portul care are senzorii. Apoi cît timp ultima_pozitie = starea actuală a GP4/5 înseamnă că nu s-a scimbat nicio stare, dacă diferă, înseamnă că s-a schimbat starea. faci cu niște if-uri sau ce naiba o avea flowcode ăla ca să compari cu starea din variabila ultima_pozitie să vezi sensul. Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 (editat) a) Fiecare intrare sa incrementeze o variabila care sa fie decrementata de cealalta intrare; cele doua fiind "antagonice"...pe urma ma joc cu "if"-ure... b) cu intrerupere: In intrerupere sa-mi incrementeze doua variabile adunate in paralel si fiecare intrare sa-mi adune/scada individual cele doua countere. Pe urma totul e in ""if"-uri Editat Iunie 9, 2014 de ardiles Link spre comentariu
bercioiu Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 Nu, cum ti-a zis si colegul UDAR, cand intri in intrerupere, salvezi starea celor doua intrari, dupa care le interoghezi iar si daca una este schimbata, in functie de datele salvate, stabilesti sensul. Lasa-mi un e-mail pe pm si-ti trimit un exemplu in Flowcode pentru encoder, este acelasi lucru. Link spre comentariu
ardiles Postat Iunie 9, 2014 Autor Partajează Postat Iunie 9, 2014 @bericioiu, multumesc! pai la encoder e acelasi lucru? daca pot vedea ceea ce am eu(2 senzori), ca un encoder, n-ar trebui sa mai adaug un senzor? ceea ce nu prea vreau dar daca nu am incotro... Link spre comentariu
UDAR Postat Iunie 9, 2014 Partajează Postat Iunie 9, 2014 N-am zis eu , @XAN77 i-a spus . Important este că i s-a spus și important este ( pentru OP ) că @bercioiu poate să-l ajute în Flowcode. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum