Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Skaner 3d - pomiar obiektów metoda dotykową

miciek79 07 May 2005 15:49 5075 34
Computer Controls
  • #1
    miciek79
    Level 11  
    Wybralem ambitny temat pracy mgr-skiej niestety mam problem z wykonaniem algorytmu i samego programu dla uK 89s8252 w ASM

    Zamierzam zbudowac urzadzenie ktore bedzie mierzylo przedmioty umieszczone w nim metoda dotykowa punkt po punkcie. Inaczej mowiac wystepuje tu problem pomiaru odlaglosci, przesuniecia. Mam zamiar wykonac to na elementach z myszki komputerowej, czyli program ma zliczac impulsy i je dodawac lub odejmowac.

    Problem wystepuje z podlaczeniemi i dedekcja stanu elemntów opto. W momencie kiedy czujnik jest zasloniety mam napiecie 0,2 V a gdy oświetlony podczerwienia ok 2,8 V uK interpretuje jak sie mu podoba dodam ze czujnik podlaczony jest na port P0 i tam tez mam problemy nawet z pomiarem stanu (miernik pokazuje stan niski, a z wysokim jest roznie)

    Może ktos z Was spotkal sie z problemem takim jak ja lub moze wie gdzie szukac jakichkolwiek informacji i pomocy w tym temacie, moze ktos wie jak rozwiazac problem takich pomiarów..

    POZDRAWIAM
  • Computer Controls
  • #2
    Dexter77
    Level 28  
    zawsze w takich przypakach bardzo pomocny jest schemat.
    Pozdro
    Dexter
  • #3
    gmp
    Level 19  
    miciek79 wrote:
    ...
    Problem wystepuje z podlaczeniemi i dedekcja stanu elemntów opto. W momencie kiedy czujnik jest zasloniety mam napiecie 0,2 V a gdy oświetlony podczerwienia ok 2,8 V uK interpretuje jak się mu podoba dodam ze czujnik podlaczony jest na port P0 i tam tez mam problemy nawet z pomiarem stanu (miernik pokazuje stan niski, a z wysokim jest roznie)

    Port procka to nie wejscia komparatora napiec, tylko wejscia(wyjscia) cyfrowe. P0 w 51 to nie najlepsze rozwiazanie , nie ma Pull'up. Wez zrob sobie to porowanie na komparatorze LM393 (LM339) z histereza oczywiscie. Poprawi to znacznie stabilnosc odczytu.
  • #4
    sawic
    Level 13  
    a moze wychyl mierzyc jakims regulowanym rezystorem w ukladzie dzielnika napiecia i mierzyc napiecie na nim za pomoca przetwornika a/c ?

    tez myslalem nad takim tematem, ale znacznie ciekawsze i prostsze zarazem wydalo mi sie uzycie laserowego miernika odleglosci.

    odnosnie pomiarow nie przewidywalem problemow, mechanika wydawala mi sie problemem, ale zalezy kto co lubi.

    natomiast najwiekszym problemem wydawal mi sie sposob graficznego zobrazowania tego na komputerze. nie wiem jak ty to chcesz rozwiazac, ale chetnie bym sie z ciekawosci tak, dowiedzial.

    ogolnie pomysl robienia skanera 3d pozucilem i w sumie sie z tego ciesze.


    pozdrawiam
  • #5
    miciek79
    Level 11  
    co do ukladu elektronicznego dalem juz rade..... koncze pisac program wktotce dam tu zdjecie tego kosmosu co wymyslilem chodzi to na 52-kach w sumie sa 4 szt... mecze teraz lcd 1*40 niestety wyswietla jakies bzdury w przeciwienstwie do lcd 2*16.... kwestia obrazowania punktow w komputerze moja rola sie konczy na wyslaniu ich do programu archiwizujacego przez rs232.. reszta promotor... z tego co wiem ma jakis programik napisany czy jakis dodatek do Cad-a co laczy liniami te punkty charakterystyczne ktore siw w momencie poimiarow przsle do kompa..
  • Computer Controls
  • #6
    miciek79
    Level 11  
    oj nikt mnie nie motywuje ale juz prawie koncze ... czy ktos jest zainteresowany??? tym jescze?
  • #8
    miciek79
    Level 11  
    Moze pokaze zdjecia ale.... problem taki ze szukam teorii teraz do tego głownie o metodach pomiaru, cos o przetwornikach do pomiaru drogi enkoderach itp itd... help... mam juz tak malo czasu ......
  • #9
    McRancor
    VIP Meritorious for electroda.pl
    No no, jak będzie działać to uczelnia dumna będzie!
    Szczególne uznanie należy się za część mechaniczną, bo z regóły na tym kończy się pomysłowość elektronika.

    A może sprzedasz sekret która to uczelnia?
  • #10
    ucy74
    Level 20  
    McRancor wrote:
    A może sprzedasz sekret która to uczelnia?
    Na ostatnim zdjęciu stoi jak wół ;-)

    miciek79:
    Jaką ma ów skaner rozdzielczość?
    Jak szybko skanuje pełne pole/objętość?
    Czym określasz że "już" jest powierzchnia - fotodiodą?
    Stosujesz jakieś kalibracje/krańcówki ruchu?
    Masz jakiś algorytm znajdywania obiektu/zagęszczania pomiaru?
    Czemu aż cztery '52 - ki?
  • #11
    miciek79
    Level 11  
    jak zdąże z teorią to sie napewno ucieszy, najlepszy power w tym to to ze nie mam schematu elektronicznego..... robilem od razu płytki, ze bylo to dawno to jest teraz problem mały.. Ta uczelnia to politechnika Krakowska... Ludzie co z ta teorią??? w necie trzeba przegladnąć miliony ofert sprzedawców i nic teori prawie....
  • #12
    miciek79
    Level 11  
    ucy74

    Co do zageszczania i algorytmu jest bardzo prosty bo trzeba samemu sobie obrać punkty charakterystyczne, urządznie nie jest automatyczne ze względu na brak srodków finansowych, .... Zasada pomiaru pierwszy czarakterystyczny punkt obiektu wciskamy przycisk RESET liczniki sie zerują i owy punkt jest początkiem układu współrzędnych i odniesienia.
    Rozdzielczość, teoretycznie - tzn układy elektroniczne pozwalają na 0,01mm niestety czujniki z myszki (znów brak srodkow na porządne enkodery) pozwalają na 0,2 mm, ponieważ w prowadnicach brak łożysk liniowych są tylko tuleje to i tak wystarczająca rozdzielczość,
    Co do ilości uK są to 52-ki jakos przywyklem do nich, max prędkość 24 Mhz program mają troszke moze toporny więc troszke wolno liczą te impulsy, wykorzystuje INT0 jako przerwanie od czujnika INT1 jako przerwanie od danych więcej nie ma wiec rachunek wyszedł mi prosty 3 czujniki 3 uK, do tego jeden co zajmuje sie przeliczaniem danych wyswietlaniem wysylaniem, i obsługą klawiatury, dodatkowo może on sterować właśnie silnikami napędowymi skanera i jakims algorytmem skanowania, na ktory juz ani czasu nie ma ani funduszy. Końcówka robocza jest luźna więc zakładam ze kazdy punkt jest mierzony w takiej samej odleglosci od powierzchni (przy dokładności 0,2mm chyba to dobre myslenie). Szkoda ze uczelnie nie sponsoruje... bo plan mialem calkiem niezły więc w sumie ze jest jak jest wyszła z tego taka sobie praca.. Bardziej zadowolony jestem z robota mobilnego co robilem na inżyniera... Pozdrawiam
  • #13
    pawel129
    Level 16  
    Bardzo fajna praca, brawo za dokładne wykonanie i pomysł. Ciekawy jestem jak wygląda zeskanowany obiekt na ekranie monitora.
    Czy mógłbyś zamieścić zdjęcia i króciutki opis tego robota?
  • #14
    miciek79
    Level 11  
    pawel129>>>>>

    nad transmisją pracuje obrazek myśle że bedzie ciekawy w zależności od ilości punktów pomiarowych, zdjęcie napewno zamieszcze ale ostatnio jakoś brak sił zeby to skończyc
  • Helpful post
    #15
    ucy74
    Level 20  
    miciek79 wrote:
    ...nad transmisją pracuje...
    Programy za friko, na ogół "łykają" pliki tekstowe ASCII z opisem kolejnych punktów XYZ. Nie wiem tylko, czy powinieneś przeliczać ilość impulsów z enkodera na centymetry mikrokontrolerem i wysyłać, czy raczej później skalować model 3D wobec ilości impulsów na cm. Pytanie, jak szybko ma to skanować?
  • #16
    miciek79
    Level 11  
    ucy74>>>>>
    to nie takie proste.......
    pierwsze wysałać musze to co przed przecinkiem później druga licza to to co po przecinku całość adekwatnie do tego ze trzy osie czyli trzy razy nigdy nie pisalem nic na RS232 nie pisalem soft na PC jakies tylko proste na port rownolegly w Delphi
  • Helpful post
    #17
    ucy74
    Level 20  
    miciek79 wrote:
    ...to nie takie proste...
    Kalając uszy wielu osobom: polecam Bascom'a. Teraz katuję C/C++, ale pierwszych kotów za płoty z µC, w inny sposób bym nie zrobił. A jak się bawiłeś z portem równoległym PC i masz 8+2 piny wolne w wysyłającym µC, to jesteś w domu - zrób transmisję równoległą.
  • #18
    miciek79
    Level 11  
    OK MOZNA TYLKO JAK TO NAPISAC?????? SYGNAŁÓW WYSTARCZY ....

    CZY MOZE KTOS MI POMOC W TYM PROGRAMIE OD ODBIORU DANYCH???

    ALGORYTM PONIZEJ....
  • #19
    ucy74
    Level 20  
    Jakie i ilu bajtowe komunikaty wystawiasz na port równoległy?

    Zakładam, że mierzona głębokość to oś Z, a współrzędne w których porusza się głowica to X i Y.

    Dla pojedyńczego pomiaru powinieneś wtedy wystawić pakiet:
    X(0, ..., n) bajtów, Y(0, ..., n)bajtów , Z(0, ..., n)bajtów.

    Chyba, że po kolei przemiatasz całą powierzchnię XY i nie będziesz wysyłał/zapisywał ich współrzędnych, bo wynikają one z pozycji wartości Z w, zapisywanym w pliku, ciągu znaków.
    Np.: dla rozdzielczości XY = 1000 x 1000 mamy 1000000 wartości Z.

    Wtedy, na 8 pinach µC przesyłasz bajty danych, na pinach +2 wystawiasz identyfikator bajtu. Możesz liczyć do czterech, więc można przesłać liczbę w trzech bajtach, a pierwszy lub czwarty stan traktować jako przerwę/oczekiwanie/sleep.
  • #20
    maya30
    Level 12  
    Witam! Jestem pod wrażeniem Twojego projektu. Pracuję w automatyce od kilku lat i ztakimi problemami mam doczynienia często. Lecz preferuje urządzenia, które są renomowanych marek. Opisany przez Ciebie skaner jak równierz coś odwrotnego-obrabiarka jest stosowany od wielu lat w automatyce. Dziś z powodzeniem używa się kopiarek czyli obu urządzeń w jednym. Jeżeli jesteś zainteresowany to mam trochę materiałów na ten temat ale drukowanych. Również schematy gotowych urządzeń, które pracują w naszej firmie.

    Powinieneś również pokopać w dziale "automatyka".

    Również tu http://www.degatron.isn.pl/abc.html w dziale enkodery masz abecadło a tam troszkę informacji.

    Więcej GG-6984515
  • #21
    miciek79
    Level 11  
    ucy74>>>>>

    Komunikaty sa 8-bajtowe w kolejności takiej:

    dla warosci X:

    a. wysyłana jest część przed rzecinkiem 8 bajtów
    b. Wysułana jest część po przecinku 8 Bajtów

    dla y, z analogicznie co daje liczbne xxx,xx yyy,yy zzz,zz
    wiec potrzebne sa dodatkowe 2 linie (bajty) na potwierdzenia z uK i komp[utera....

    Dodano po 2 [godziny] 5 [minuty]:

    A moze jest jakiś standardowy uniwersalny program do zbierania danych z portu lpt, ??? czy moze ktoś wie coś na ten temat.???
  • #22
    ucy74
    Level 20  
    miciek79 wrote:
    a. wysyłana jest część przed rzecinkiem 8 bajtów
    b. Wysułana jest część po przecinku 8 Bajtów
    Piszesz o ośmiu bajtach a masz na myśli chyba osiem bitów. Jeśli tak to w jednym bajcie nie umieścisz liczby 999.
    W dwubajtowej zmiennej możesz wystawić liczbę całkowitą od zera do 65535. Trzy bajty dają Ci maksymalnie ponad 16,7 miliona. W czterobajtowej możesz opisać liczbę zmiennoprzecinkową.

    Jeśli faktycznie chcesz sygnałów potwierdzających wysyłanie i odbiór to wystarczą trzy jednobitowe linie i ośmiobitowa linia danych:

    stop: 000 00000000,
    raz: 100 xxxxxxxx - wysyłamy pierwszy bajt,
    dwa: 010 xxxxxxxx - wysyłamy drugi bajt,
    trzy: 110 xxxxxxxx - wysyłamy trzeci bajt,
    ack: xx1 xxxxxxxx - odbieramy potwierdzenie,

    Czerwony jest stan wejścia na które ma trafić potwierdzenie z komputera.

    i tak po kolei, dla każdej z osi, dla każdego punktu...

    Możesz dodawać następne linie mówiące o którą oś chodzi, albo wstawić tą informację do danych pojawiających się w spoczynku etc.
  • #23
    miciek79
    Level 11  
    dokladnie ... mialem na mysli 8 bitow..

    napisze moze jak ja to widze, poniewaz minimalna liczba jaką wskaże skaner to liczba 000,00 natomiast maksymalna 254,99. (255 jest traktowane wszedzie jako wolna magistrala)

    Zakładam i tak odbywa sie transmisja danych równoległych wewnątrz urządzenia że:

    1. całkowita liczba składa się z dwóch części tj, starszej czyli przed przecinkiem i młodszej po przecinku. xxx , xx
    2. Mikrokontroler wysyła zgłoszenie że jest gotowy do wysłania danych
    3. Pierwsze wysyłam część (8bitów) starszą czyli to co przed przecinkiem,
    później chce żeby program komputerowy na siłe wstawił tam sam przecinek, wysłał do uK potwierdzenie na moment - drugą linią
    4.Kolejnym etapem jest wysłanie drugiej części liczby czyli tego co po przecinku (8bitów ale maksymalna warośc to 99(d) ) . Czyli analogicznie Uk wysyła zgłoszenie ze chce wysłac liczbę wasytawia ją na port na tak długo az pojawi sie potwierdzenie czyli wyflada to tak:


    WE WY D0 D7
    1 1 --- 1 1 1 1 1 1 1 1 nic sie nie dzieje wolna magistrala

    0 1 --- 1 1 1 1 1 1 1 0 przed przecinkiem liczba 254 wystawiona

    1 0 --- 1 1 1 1 1 1 1 1 przed przecinkiem liczba 254 odebrana

    1 1 --- 1 1 1 1 1 1 1 1 nic sie nie dzieje wolna magistrala

    0 1 --- 0 1 1 0 0 0 1 1 po przecinku liczba 99 wystawiona

    1 0 --- 0 1 1 0 0 0 1 1 po przecinku liczba 99 odebrana

    to wszystko liczy i jeden program i drugi jezeli to wszystko odbedzie sie trzy razy wtedy wiemy ze przeszła pierwsza cześć danych, Czy to dobre myslenie czy da sie tak napisac soft na PC???
  • Helpful post
    #24
    And!
    Admin of Design group
    (w odpowiedzi na mail)
    Zapewne chodziło o program logerLPT... niestety nie mam do niego źródeł gdyż dawno przepadły. To prymitywny (lecz czasem użyteczny program) napisany w Delphi. Sęk w tym że do odczytu portu LPT użyłem wstawki w asm i program jest bezużyteczny pod XP i NT.

    Możesz użyć :
    -jednej linni nazwijmy ją data_ready którą zeruje uP gdy dane już są na którą czeka PC
    -jednej linni data_taken którą zeruje PC czekając następnie na ustawienie przez uP linni data_ready (co informuje PC że uP zdjoł dane z magistrali gdyż wie że PC potwierdził ich odebranie)
    poczym procedura rozpoczyna się od początku (czyli tak jak napisałeś)

    pozatym można dodać jedną linnię która gdy jest na niej 1 oznacza dla PC że to dane przed przecinkiem, a gdy 0 to że po przecinku.

    Rozwiązań może być sporo gdyż LPT daje sporo linni:
    http://spin.siedziba.pl/hwb/connector/parallel/parallelecp.html

    np można dodać jeszcze linnię która przełącza urządzenie w tryb komend i można np. coś skonfigurować z PC w urządzeniu.
    Obsługa LPT:
    https://www.elektroda.pl/rtvforum/topic277744.html
    https://www.elektroda.pl/rtvforum/topic340335.html

    Port szeregowy dałby mniej kabelków mniej sztywny kabel i mniejszą wtyczkę. Pozatym możnaby oprzeć całość komunikacji odrazu na ramkach (z LPT też można ale dzięki wielu sygnałom i małej ilości komunikatów nie opłaca się robić ramki)
    np. urządzenie przesyłałoby ciąg
    $D200.45 co oznaczało by daną
    $E1 co oznaczałoby np. błąd numer 1
    a komuter przesłaby
    $R np. reset, albo
    $C1 jakaś komenda nr. 1
    a to wszytko na 3 przewodach GNR RXD TXD
    Jedyny problem więcej kodu.

    RS232 da się prosto kontrolawać prze PC (np. ComPortLibrary) a w uP odebranie i nadawanie jest sprzętowe i może dodatkowo generować przerwanie.
    https://www.elektroda.pl/rtvforum/topic118948.html
  • #25
    miciek79
    Level 11  
    pislaem kiedys program na Lpt w Delphi wyly tam wstawski z ASM ale jako cale słowo 8 bitowe jakie są polecenia odpowiadające tym:

    JB P0.1
    JNB P0.1
    chodzi mi konktetnie o operacje na bitach ???

    jak zapisywac dodebrane słowa do pliku lub tablicy???

    Dodano po 4 [minuty]:

    Czy moze jest jakis standardowy program zczystujący z poru lpt dane strobowany sygnałem zewnętrznym?

    Dodano po 3 [minuty]:

    co do ilości kody w mikrokontrolerze powoli konczy sie miejsce wiec jedynie stac go na zaladowanie kodu do transmisji rownoległej....
  • #26
    And!
    Admin of Design group
    Więc nadal używaj zapisu 8 bit.
    Ale przed wysłaniem wykonaj operacje na zmiennej gdzie trzymasz daną do wysłania.
    Aby bit ustawić wykonaj operacje sumy logicznej , aby bit wyzerować mnożenie logiczne.
    Przy odczycie wyzeruj w zmiennej odbiorczej wszystkie bity poza tym który sprawdzasz, a potem sprawdź czy zmienna równa 0 jeżeli tak to bit 0 jak nie to 1.
  • #29
    miciek79
    Level 11  
    problemy były wielkie .... szczegolnie zeby dostac sie do portu LPT.. ostatecznie program napisalem w Vbasic. Transmisja odbywa sie za pomoca 4 lini gdzie niestety wysyłam kazda cyfre osobno. Spowodowane jest to tym ze na czterech liniach mozna zapisac tylko 15 liczb, (jest jeszcze piata linia ale opanowalem ja jak juz napisalem program) więc wysyłam kazda osobno. Ciekawa rzecza jest to ze wysylam 1 a odbiera komputer 8, wysylam 2 odbiera 16 itd, ale to przez przesuniecie danych wiec wystrczylo podzielic to co odbiera prze 8. itd itd. Wszystkie punkty wyslane zapisywane sa do pliku tekstowego na dysk komputera. Mozna je dac np do excela i rysowac sobie jakies wykresy. Ostatecznie więc zmeczylem ta prac..i jestem niezmiernie zadowolony, bo pare wlosow wypadlo mi pare wyrwalem a pare zsiwlo. Pozdrowienia dal wszystkich!!!
    A i najwazniejsze !!!! PORT LPT nadal mi dziala!!!! a wiele przezyl!!! szczegolnie ze pierwsza wersja kabla to istny pająk!!:)

    Dodano po 8 [minuty]:

    Ostatecznie w programie zmienilem ze juz nie trzeba naciskac przycisku "Pobierz" jet timer który sprawdza czy sterownik jest gotowy do wysłania danych. Calość transmisji odbywa sie zaraz po nacisnieciu przycisku F1 na panelu sterownika