Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Prośba o sprawdzenie schematu -robot, który omija przeszkody

baskiin 21 Aug 2008 17:44 6673 36
Automation24
  • #1
    baskiin
    Level 11  
    Witam wszystkich

    Od dłuższego czasu śledzę temat robienia robotów i sam postanowiłem spróbować swoich sił w tej dziedzinie.

    Zrobiłem schemat, na razie na kartce w formacie .jpg

    I tu mam prośbę

    Czy schemat, który zamieściłem poniżej jest poprawnie skonstruowany?

    Proszę o wszelkie uwagi i wskazówki co do koniecznych zmian w moim schemacie

    Już pewien etap pracy mam za sobą, bowiem mechanika jest już gotowa
    tu zamieszczam link http://www.robocik.cba.pl

    Z góry dziękuję za pomoc

    https://obrazki.elektroda.pl/48_1219333122.jpg
  • Automation24
  • Helpful post
    #2
    MirekCz
    Level 35  
    1.Ściągnij i naucz się obsługiwać jakiś program EDA, np. eagle

    2.Po co te wszystkie diody na wejściu? Obniżają tylko napięcie, zupełnie bez sensu. No i mostek też chyba bez sensu, bo wystarczy na płytce oznaczyć "+" i "-", lub ew. wsadzić jedną diodę i jeżeli źle podłączysz to układ nie będzie działał, ale nic nie spalisz

    3.L293D wejście na zasilania silnika podłącz bezpośrednio z 9V(lub z 9V+dioda), a nie ze stabilizatora 5V - wszystkie zakłócenia idą na linie 5V no i stabilizator może nie wytrzymać obciążenia. No a 100nF powinno być między VCC cyfrowym a masą, a jak dobrze pamiętam rozkład nóżek L293D to ty masz między zasilaniem silników i masą...

    4.Nie masz wyjścia na programator, chyba, że chcesz wyciągać układ, ale to jest bardzo upierdliwe na dłuższą metę i odradzam skoro masz wolne piny

    To tak na pierwszy rzut tyle
  • Helpful post
    #3
    teedd
    Level 18  
    Witaj.
    Schemat na pierwszy rzut oka wydaje się być poprawny - chociaż wiadomo, że diabeł tkwi w szczegółach.
    Jeśli można trochę zmienić schemat, to sugerowałbym zwolnienie 2 wyjść portu C - np. sterować 1-2EN oraz 3-4EN z PD3 i PD4. Do zwolnionych końcówek portu C mógłbyś podłączyć fotorezystory i przy pomocy przetwornika analogowo-cyfrowego czytać wartość ich rezystancji. Dzięki temu robocik mógłby mieć opcję poruszania się wzdłuż wyznaczonej wcześniej trasy - namalowanej czy też wyciętej z papieru i położonej na podłodze białej linii - niekoniecznie prostej ;).
    Powodzenia - teedd
  • #4
    baskiin
    Level 11  
    Przede wszystkim dziękuję za tak szybką odpowiedź. :)

    Schemat wykonałem w programie gEDA pod Linuxem.

    Zamieszczam tu dwa obrazki jeden to oryginalny zrzut ekranu z gEDY, a drugi to ten sam tylko że z białymi liniami przewodów. I przyznam, że ten drugi jest trochę bardziej czytely.

    nawiązując do wypowiedzi użytkownika MirekCz

    1. Podstawowa obsługa programu już opanowana (oczywiście została do zrobienia płytka PCB, a tego jeszcze nie umiem) :)

    2. Te 2 diody skasowałem, bo faktycznie nie założyłem, że mostek Gretza to też kilka diod (a właściwie dwie, które biorą udział w obwodzie), które to też obniżają napięcie. A poza tym jak zapewne jest to widoczne na zdjęciach na stronie http://www.robocik.cba.pl mechanika, rama itd. jest zrobione z drewna i na pewno jak na model to trochę waży, więc zasilanie baterią 9V na długo by nie starczyło (jeden silniczek pobiera ok. 200 mA gdy się go mocniej przyciśnie to jakieś 350-400 mA - zmierzone w lab.), dlatego postanowiłem na czas testów stosować zasilacz (10W, DC 9V, 850mA Max) podłączany pod gniazdko i będę po prostu chodził z przedłużaczem (bo akumulator np. żelowy, który ma dobrą wydajność prądową bardzo dobrą, ale kosztuje ok. 30zł i póki robot nie będzie chodził jak należy to wstrzymam się z jego kupnem) a niestety nie wiem gdzie w zasilaczu natrafię na plus a gdzie na minus, więc jak wlutuję gniazdko od wtyczki zasilacza to i tak i tak będzie działać.

    No chyba, żeby zrobić ewentualnie gdzieś obok alternatywnie podłączenie przez jedną diodę, która zabezpieczy przed spaleniem układu.
    Bo szczerze mówiąc mam ten mostek w takiej obudowie z 4 nóżkami i nie wiem jaki jest spadek napięcia na każdej z diod w mostku.
    Bo zdaje się że na L7805 musi być powyżej 7,5V. Ale tą kwestię się jeszcze rozważy.

    3. Tu mam pytanie, bo będę sterować i jednym i drugim silnikiem przez PWM, to czy i Vcc1 (nóżka 16) i Vcc2 (nóżka 8) podłączami bezpośrednio pod 9V czy tylko jedną z nich. Bo dodam, że oba silniczki muszą chodzić tak samo szybko.

    4. Programuję przy pomocy zewnętrznego programatora Si Prog dr. Borkowskieo także te piny nie będą potrzebne.



    W odpowiedzi na post użytkownika teedd

    odpowiadam, iż robot jak to widać na stronie http://www.robocik.cba.pl
    ma czujniki mechaniczno-odbiciowe (muszę tylko dorobić coś w stylu sprężynek - trąbek, które mają zapobiec bezwładności robota), więc gdy dojedzie do przeszkody to się po prostu wdusi. W schemacie są to S1, S2, S3. Program założy co jakie reakcje ma podjąć a dane bodźce. Tak więc nie jest to robot typowy w stosunku do tych, których jest tu na elektroda.pl sporo tzn. linefollower i beam.

    W (dalszej=4-5 miesięcy) przyszłości mam zamiar dorobić do niego jakiś wyświetlacz LCD, czujnik już właśnie optyczny czy aby przypadkiem nie zbliża się do schodów i może jakieś moduły do zdalnego sterowania.

    pierwszy obrazek
    <img src="https://obrazki.elektroda.pl/3_1219403127.jpg">
    https://obrazki.elektroda.pl/3_1219403127.jpg

    Drugi obrazek
    <img src="https://obrazki.elektroda.pl/59_1219403207.jpg">
    https://obrazki.elektroda.pl/59_1219403207.jpg
  • Helpful post
    #5
    fred117
    Level 21  
    Witam!
    Oto moje propozycje:
    -zamiast mostka - dioda i to najlepiej z niskim spadkiem napięcia.
    -bezpiecznik przed mostkiem/dioda.
    -przy przyciskach i resecie dodaj filtry.
    Prośba o sprawdzenie schematu -robot, który omija przeszkody
    -w celu zaoszczędzenia energii najlepiej użyć stabilizatorów impulsowych (polecam serie lm25xx) zamiast 7805.
    -dobrym rozwiązaniem byłoby też osobne zasilanie procesora i silników
    (widziałem jak robocik szalał bo silniki powodowały skoki napięcia 2,5V).
    -kondensatory filtrujące dla każdego układu scalonego(na płytce umieszczane jak najbliżej układu).
    Kwarc również jak najbliżej procka.

    Pozdrawiam.
  • Helpful post
    #6
    Anonymous
    Anonymous  
  • Helpful post
    #7
    MirekCz
    Level 35  
    W L293D masz 2 wejścia. Jedno to napięcie "cyfrowe" (dajesz 5V - to samo co na mikrokontroler), drugie to napięcie silników i tu dajesz 9V (lub 9V z diodą)
  • #8
    baskiin
    Level 11  
    Witam wszystkich

    Na początku oczywiście gorące podziękowania dla wszystkich użytkowników za udzielenie pomocy i fachowych porad tu na forum i mailownie.

    Dziś po południu zamieszczę poprawiony schemat, gdyż w ten weekend byłem na weselu i dwa dni mi wypadły z kalendarza.

    Pozdrawiam

    ______________________________________________________

    Witam ponownie wszystkich użytkowników.

    Zgodnie z sugestiami poprawiłem schemat na bardziej czytelny.

    Poprzedni zakładał nazwijmy to fizyczny rozstaw elementów na płytce.

    No i mam również kilka pytań:

    1. Czy dobrze zrozumiałem oddzielne zasilanie silników i procka?

    2. Czy jeszcze gdzieś przydałby się jakiś filtr?

    3. Czy jak mam 7805 z radiatorem to czy mogę zastosować go jako stabilizator napięcia czy jednak lepiej wziąć stabilizator impulsowy np. polecany lm25xx (lm2594)?

    4. Czy do tego stabilizatora lm25xx podłącza się do wejścia Adjust rezystor i wtedy do masy? Czy ten stabilizator to jest coś w stylu, iż regulując rezystancję opornika reguluję tym samym napięcie na wyjściu układu?

    5. Silniki testowałem w warsztacie na praktykach i wytrzymały 6V.
    Czy jak chcę sterować silnikami przez PWM to czy muszę dać jakieś diody w szereg z nimi, bo boję się, że się spalą przy 9V (ale jutro przetestuję)? Czy PWM wysterowane tak, żeby dawało odpowiednie napięcie wystarczy jako zabezpieczenie dla silników?

    Schemat:

    Prośba o sprawdzenie schematu -robot, który omija przeszkody


    Schemat z białymi liniami (lepsza widoczność):

    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    Przed chwilą patrzałem jak wyglądają obrazki w przeglądarce i lepiej ściągnąć je na komputer. Dużo lepiej się prezentują.
  • Automation24
  • Helpful post
    #9
    fred117
    Level 21  
    Po pierwsze należy ustalić na jakie napięcie są te silniczki.
    Z tego co widzę to są to motorki wymontowane z jakiejś zabawki (napięcia zasilania 3..5V) jeżeli mam racje to:
    -ad1:
    Najlepszym rozwiązaniem byłoby zasilić proca i logiczna cześć drivera np. bateria a silniki i cześć "mocową" drivera z akumulatora/zasilacza (oczywiście połączone masy).
    Jeżeli nie jest to możliwe (w końcu baterie tez kosztują) należy użyć 2 osobnych stabilizatorów jeden dla procka i logiki drivera i drugi dla drivera i silników. Ze względu na mały pobór prądu przez proc i "delikatonsc" układu można tu zastosować 7805.
    Natomiast dla silników stabilizator impulsowy.
    -ad2:
    Jak pisałem dla każdego układu przy każdym zasilaniu kondensator elektrolit i ceramiczny(przy zasilaniu silników można zaszaleć z pojemnościami co by impulsy indukowane w silnikach nie wydostawały się z tego obwodu).
    -ad3:
    To czy zastosujesz LM25xx czy 7805 to kwestia tego czy chcesz oszczędzać zasilanie. Jeżeli całość ma być zasilana z akumulatorka to przy zastosowaniu 7805 będziesz miał sprawność około 50%, a przy lm25xx około 80-90% co znacznie wpływa na grzanie się układu, jego rozmiar, wagę i czas działania.
    -ad 4:
    Wszystko zależy od zastosowanego układu. Są wersje ze sztywnym napięciem (wyprowadzenie feedback bezpośrednio do wyjścia)i są z regulowanym(feedback przez regulowany dzielnik do wyjścia). Przejżyj datasheet'y.
    -ad5:
    To ze silnik chwilowo wytrzyma 9V nie znaczy ze jest na takie napięcie
    dobrze by było wiedzieć skąd je masz i jeżeli są na niższe napięcie lepiej zastosuj dla nich osobny stabilizator (patrz wyżej).
    Do każdego silnika podłącz diodę (np. 1N4148) w kierunku zaporowym(co by ograniczyć impulsy z cewek silników).

    Pzdr
  • #10
    baskiin
    Level 11  
    Witam wszystkich

    Jak zwykle dziękuję za kolejne posty w sprawie schematu.

    Zamieszczam tu kolejną wersję schematu
    Prośba o sprawdzenie schematu -robot, który omija przeszkody


    I tą samą, wybieloną
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    Między zworkami J1 i J2 muszą być podłączone diody w celu obniżenia napięcia z 9V na ok 6V. Muszę tylko dopasować diody z odpowiednim spadkiem a w konsekwencji też ich ilość.
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    Tylko mam pytanie czy jak podłącze te kondensatory równolegle z silnikami to czy nie będzie za dużo mocy szło na kondensatory, w czasie gdy nie są jeszcze naładowane?
  • Helpful post
    #11
    fred117
    Level 21  
    Witam!
    Po pierwsze caly czas laczysz zasialacze rownolegle, co nie ma wiekszego sensu.
    Jak mowilem:
    Bateria za nia dioda i 7805(tam nie musi byc bezpiecznika bo prady sa na tyle male ze spalisz proca a bezpiecznik nawet sie nie zagrzeje). Za styabilizatorem podlaczenie zasilania do proca i do zasilania logicznej czesci drivera.
    Idziemy dalej:
    Pod zasilacz przez bezpiecznik i diode podpinasz lm2575-5.0 (napiecie wyjsciowe 5V) i zasilasz nim czesc mocowa drivera.
    Przy silnikach nie stosujesz zadnych bezpiecznikow oraz diod do obnizania napicia. Jedyne co mozesz wpiac a wlasciwie powinienes to diode zabezpieczajaca (o tym pisalem w poprzenim poscie).
    Po raz kolejny przypominam o koniecznosci dodania kondensatorow pod KAZDE wejscie zasilania czyli 1x przy procku i 2x przy driverze.
    PS masy baterii i zasilacza laczysz ze soba (oczywiscie na plytce grubymi sciezkami zadnym kabelkiem czy zaplatanym przewodzikiem).

    Pzdr
  • Helpful post
    #12
    bobbyAIR
    Level 20  
    Tak apropo zworek J1 i J2 to weź pod uwagę że L293 ma koło 2.5V spadku napięcia więc na 9V to nie licz na wyjściach. Prędzej będzie to 6.2-6.5V
  • Helpful post
    #13
    fred117
    Level 21  
    2.5V :0
    To co to za driver :/
    Lepiej zastosować coś innego przecież to czysta strata mocy.

    Pzdr
  • Helpful post
    #14
    bobbyAIR
    Level 20  
    Normalny, Myślałeś że da sie przełączać moc bez jej utraty - to byłoby perpetuum mobile :D
  • Helpful post
    #15
    wd40
    Level 21  
    Po co Ci ta dioda na wejściu?
    Jak dajesz bezpiecznik, to za nim możesz dać diodę ale spolaryzowaną odwrotnie - katoda za bezpiecznik, anoda do masy. Jak źle podłączysz baterię to spali się bezpiecznik, a w najgorszym razie na wejściu stabilizatora pojawi się -0,3V (przy diodzie Schottky'go), co spokonie wytrzyma. W ten sposób zabezpieczasz polaryzację baterii bez spadków napięć.
    Po co te filtry - jak możesz filtorwać wejścia programowo? - robot staje się coraz cięższy. Najprościej tak jak początkowo to zrobiłeś wyłączniki podciągasz poprzez 10K.
    Po co kondensatory przed stabilizatorem? - dam uciąć rękę, że przy tej mocy silników i nadwyżki napięcia baterii 4V, bateria będzie spełniać ich funkcję.
  • Helpful post
    #16
    fred117
    Level 21  
    Raczej nie inaczej :P Jednak chodziły mi po głowie spadki rzędu 0.2-0.7V, a tu niespodzianka.
    W takim razie nie wiem czy nie lepiej zastosować zwykły tranzystor bipolarny i podłączyć silnik pod niego.
    Jak myślicie ???
    Wg mnie mniejsze straty (w efekcie końcowym na pewno założyciel tematu chciałby zasilać to wszystko z baterii/akumulatora),szybkość działania, a każdy tranzystor średnich mocy można wysterować niewielkim prądem i 3,3/5V i jakiś opornik spokojnie wystarczy żeby go nasycić.

    Co do postu kolegi wd40:
    Oporniki i kondziołki smd będą ważyć może 0.5g no niech będzie nawet 2g, a uprości to program (dodatkowa pętla dla każdego przycisku to jednak komplikacja) ponadto przy resecie filtr jest konieczny.

    Pzdr
  • Helpful post
    #17
    wd40
    Level 21  
    fred117 wrote:
    Co do postu kolegi wd40:
    Oporniki i kondziołki smd będą ważyć może 0.5g no niech będzie nawet 2g, a uprości to program (dodatkowa pętla dla każdego przycisku to jednak komplikacja).

    Spójrz sobie na obecnie produkowane klawiatury z procesorem - nie znajdziesz tam filtracji. Uproszczenie programu będzie niewielkie nawet w przypadku klawaitury (bo filtrację można zrobić jako dodatkową procedurę). Poza tym wejścia to chyba zderzaki więc reakcja programu musi być na pierwszy impuls (igiełkę) a nie tak jak przy odczycie klawiatury - gdy przycisk się ustabilizuje.
  • Helpful post
    #18
    fred117
    Level 21  
    Taka "igiełka" może się wyindukować w przewodach chociażby od załączenia silnika lub od zewnętrznego źródła.
    Z doświadczenia wiem ze filtrowanie przez soft nie jest tak skuteczne jak hardware'owe zwłaszcza przy dużych zakłóceniach z zewnątrz (czytaj silniki).
    Osobiście widziałem jak robocik z soft'owym filtrem nie zważał na żadne przeszkody ani sygnały o zatrzymaniu się. Nakład pracy przy hardzie jest znacznie mniejszy niż przy sofcie.

    Pzdr
  • Helpful post
    #19
    wd40
    Level 21  
    fred117 wrote:
    Nakład pracy przy hardzie jest znacznie mniejszy niż przy sofcie.

    Zależy dla kogo.
    Poza tym wydaje mi się, że Ctrl-C i Ctrl-V z gotowego programu jest prostsze niż projektowanie płytki. :)
  • Helpful post
    #20
    fred117
    Level 21  
    Może pozostawmy wybór koledze baskiinowi.
    Niech spróbuje tego i tego i sam zdecyduje co dla niego lepsze.

    Ps Myślę ze swoj sposób naświetliłem wystarczająco. Proponowałbym zrobić to samo (metody i sposoby filtracji soft) w celach naświetlenia problemu.

    Pzdr
  • Helpful post
    #21
    bobbyAIR
    Level 20  
    WD40 filtrowanie softowe to można stosować jeśli ma się dwuprzyciskowe menu. Wyobraź sobie np implementacje MODBUS w wersji RTU gdzie system mysi być typu RTU. Nie ma możliwości filtrować softowo - procesor nie ma na to czasu. Każdy takt to skarb. Zaczynająć przygodę z elektronika lepiej od razu projektowac ją po bożemu
  • #22
    baskiin
    Level 11  
    Witam wszystkich.

    Zwyczajowo dziękuję na początku za wszystkie posty i wypowiedzi na temat schematu.

    Zamieszczam schemat poprawiony.

    Obrazek pierwszy z widocznymi Vcc:
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    Obrazek drugi z połączonymi Vcc:
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    1. I tu mam pytanie do użytkownika fred117:
    Czy ja dobrze rozumiem ten podział zasilania, który mi pan zaprezentował. Jeśli nie jest to widoczne w schematach to tu zamieszczam pomocniczy rysunek.
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    2. I jeszcze pytanie w sprawie tych kondensatorów na każde wejście zasilania procka i drivera
    Prośba o sprawdzenie schematu -robot, który omija przeszkody
    Czy to co jest oznaczone 1 nie jest już filtrem i czy w zaznaczeniu nr 2 przerwać obwód w miejscu iks-ów i dać kondensator jak to narysowałem

    Czy w zaznaczeniach 3 i 4 dodać kondensatory tak jak to narysowałem
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    Jeśli wciąż źle myślę to czy mógłby Pan (fred117) narysować poprawnie te filtry, tu zamieszczam zrzuty takie jak wyżej, ale bez dorysowanych elementów:
    Prośba o sprawdzenie schematu -robot, który omija przeszkody
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    3. W kwestii filtrowania, to byłbym skłonny do hardware'owego. Powodem tego jest to, iż program do obsługi robota będzie pewnie sporo miejsca zajmował a do tego jeszcze filtry software'owe. No nie wiem czy mi się to wszystko zmieści w pamięci. Z resztą ( aluzja ) firewall'e sprzętowe też są lepsze niż te w postaci oprogramowania.
    No, ale nie spierajmy się o to.:)
    Wybieram sprzętowe filtrowanie, ale również dziękuję za równie solidne zargumentowanie metody programowej.

    4. Co do bezpiecznika i diod przed stabilizatorami to chce je zastosować.
    Tu po prostu jestem pewien, że układ mi się nie spali, choć to rozwiązanie użytkownika wd40 również jest ciekawe. A spadki na tych diodach nie spowodują obniżenia napięcia do 7,5V w 7805 czy do 7V w LM2575.

    A te bezpieczniki przy silnikach umieściłem po to, iż w razie gdyby silnik się zaciął to (prąd rośnie do nieskończoności) nie wiem czy bezpiecznik 800mA zdąży się spalić, zanim będzie miało to wpływ na mostek H łącznie z jego spaleniem.

    5. Czy użyć mostka H L293B, który ma 1A na kanał czy zostawić ten L293D z 600mA na kanał. Przypominam, że testowałem silniki i przy przytrzymaniu wirnika prąd wzrastał do 400mA i była to największa wartość jaką pokazał miernik.

    6. Co oznacza 1A load? czy to, że maksymalny prąd jaki da stabilizator to 1A?
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    7. Zworki przy silników zostawiam w razie czego. Diod już tam nie dołączam.

    8. Pytanie do użytkownika fred117. Jak zamontować tą diodę przy silnikach jako filtr skoro oba silniki będą chodzić w obie strony? Czy ta dioda przepuszcza prąd w oba czy w jeden kierunek?

    9. Tu zamieszczam zasadę działania zderzaka
    Prośba o sprawdzenie schematu -robot, który omija przeszkody

    10. Jeśli tym razem schemat jest niepoprawny to: Gdzie jest, a w zasadzie, które wejścia w driverze to część mocowa, a która to logika? Bo już sam nie wiem.

    11. I wreszcie. Czy jak steruje obrotami silników przez PWM to czy to działa tak, że procek daje powiedzmy wzór jakie mają być przerwy w impulsie, i tu pytanie czy napięcie do tych impulsów jest brane z procka czy z zasilania drivera z części mocowej (pin 8 )
  • Helpful post
    #23
    fred117
    Level 21  
    Po pierwsze. Nie Pan - czuję się przez to staro :P
    Rada co do projektowania nie oznaczaj wszystkich zasilań jako Vcc (przez to cały czas myślałem ze chcesz je połączyć, bardzo dobre jest oznaczanie V3.3 V5 V15 itd.).
    Co do podziału zasilania to prawie idealnie (nie umieściłeś linij zasilania logicznej części drivera).
    Prośba o sprawdzenie schematu -robot, który omija przeszkody
    Przy spadku na driverze 2.5-3V (datasheet w wykonaniu texasa) nie wiem czy jest sens wrzucać LM2575 (na pewno nie 5V lepiej regulowany ustawić na sztywno na np. 7V) chyba ze zdecydujesz się na inny driver.
    Co do filtrów zasilania przy pozycji nr 1 i 2 wszystko jest ok.
    Pozycje 3 i 4 powinny zawierać obydwa 1 kondensator elektrolityczny i 1 ceramiczny (w sumie 4 kondziolki).
    Bezpiecznik na silniku nic ci nie da. Prąd rozruchowy jest bardzo zbliżony wielkością do prądu, który jest pobierany podczas zatrzymania silnika wiec albo bezpiecznik nie zadziała albo zadziała przy każdym rozruchu.
    No chyba że zastosujesz bezpieczniki zwłoczne ale wtedy pójdzie prędzej elektronika niż bezpiecznik.
    Co do wersji drivera to jeżeli koszty Cie nie ograniczają to lepszy wytrzymalszy, a na dodatek pewnie ma mniejsze spadki napięć.
    Nie przypuszczałem ze silniki maja być dwukierunkowe. W takim wypadku najlepiej zastosować dwie diody zenera na np. 10V połączone katodami o trochę większej mocy 1 lub 2 waty (są również specjalne do takich celów).

    PS 1A load to maksymalny prąd ciągły przy jakim nic złego się nie stanie
    (z doświadczenia wiem ze zwarcie na nich daje około 2x prąd nominalny
    czyli coś w okolicy 2A).

    Pzdr
  • #24
    baskiin
    Level 11  
    Witam wszystkich po dłuższej przerwie

    Trochę zmienię teraz temat, ale dotyczy on mojego projektu

    Płytkę już zlutowałem, zmontowałem, czekam jedynie na przesyłkę z mostkiem H, więc póki co o testach mogę zapomnieć.

    Napisałem program do obsługi robota w BASCOM-ie, ale wyskakuje mi błąd i nie wiem co jest nie tak

    Error : 61 Line : 152 Label not found [_ENDIF0 ]

    Oto co oznacza kod błędu:
    61 Etykiety nie znaleziono

    Struktura programu wygląda mniej więcej tak:
    -Deklaracje portów
    -Deklaracje procedur i zmiennych
    -Główny program
    -Procedury do programu
    -Podprocedury, które urzyto w procedurach


    A oto program:
    
    'Robot  BUCKETHEAD    na ATmega8
    
    '--------Konfiguracja portow------
    $regfile = "m8def.dat"
    $crystal = 12000000
    Config Portd = Input
    Portb = &B11111000
    Config Portc = Output
    Portc = &B00000000
    
    '--------Deklaracja zmiennych i podprogramow-------
    Declare Sub Prawo
    Declare Sub Lewo
    Declare Sub Przod
    Declare Sub Tyl
    Declare Sub Stoj
    Declare Sub Omijanie
    Declare Sub Sprawdzanie_stanu_czujnikow
    Declare Sub Jakie_czujniki
    Declare Sub Przedni_czujnik
    Declare Sub Lewy_czujnik
    Declare Sub Prawy_czujnik
    Declare Sub Tyl_delay(byval Y As Word)
    Declare Sub Lewy_delay(byval Y As Word)
    Declare Sub Prawy_delay(byval Y As Word)
    Dim D1 As Byte
    Dim D2 As Byte
    Dim D0 As Byte
    Dim X As Word
    Dim Y As Word
    
    '--------PROGRAM GLOWNY----------
    Do
      If Pind.1 = 1 And Pind.2 = 1 And Pind.0 = 1 Then Przod
        Else
          Call Stoj
          Call Omijanie
      End
    Loop
    
    
    '--------Podprogramy ruchu------
    Sub Prawo
      Portc.0 = 0 : Portc.5 = 1 : Portc.3 = 1 : Portc.2 = 0
    End Sub
    
    Sub Lewo
      Portc.0 = 1 : Portc.5 = 0 : Portc.3 = 0 : Portc.2 = 1
    End Sub
    
    Sub Przod
      Portc.0 = 1 : Portc.5 = 0 : Portc.3 = 1 : Portc.2 = 0
    End Sub
    
    Sub Tyl
      Portc.0 = 0 : Portc.5 = 1 : Portc.3 = 0 : Portc.2 = 1
    End Sub
    
    Sub Stoj
      Portc.0 = 0 : Portc.5 = 0 : Portc.3 = 0 : Portc.2 = 0
    End Sub
    
    '------Procedura omijania-----
    Sub Omijanie
      Do
        Call Sprawdzanie_stanu_czujnikow
        Call Jakie_czujniki
      Loop Until D1 = 1
    End Sub
    
    '------Sprawdzanie stanu czujnikow------
    Sub Sprawdzanie_stanu_czujnikow
       If Pind.1 = 0 Then D1 = 0
       If Pind.2 = 0 Then D2 = 0
       If Pind.0 = 0 Then D0 = 0
       End
    End Sub
    
    '------Wywolanie procedur adekwatnych do wcisnietego czujnika----
    Sub Jakie_czujniki
       If D1 = 0 And D2 = 1 And D0 = 1 Then Przedni_czujnik
       If D1 = 1 And D2 = 0 And D0 = 1 Then Lewy_czujnik
       If D1 = 1 And D2 = 1 And D0 = 0 Then Prawy_czujnik
       If D1 = 0 And D2 = 1 And D0 = 0 Then Prawy_czujnik
       If D1 = 0 And D2 = 0 And D0 = 1 Then Lewy_czujnik
       End
    End Sub
    
    '------Procedury reakcji na czujniki-------
    Sub Przedni_czujnik
      Do
       Waitms 5
       Call Tyl_delay(500)
       Call Prawy_delay(700)
       D1 = 1
       D2 = 1
       D0 = 1
      Loop Until D1 = 1
    End Sub
    
    Sub Lewy_czujnik
      Do
       Waitms 5
       Call Tyl_delay(500)
       Call Lewy_delay(300)
       D1 = 1
       D2 = 1
       D0 = 1
      Loop Until D1 = 1
    End Sub
    
    Sub Prawy_czujnik
      Do
       Waitms 5
       Call Tyl_delay(500)
       Call Prawy_delay(300)
       D1 = 1
       D2 = 1
       D0 = 1
      Loop Until D1 = 1
    End Sub
    
    '-----Funkcje przedluzajace jazde w tyl i boki----
    Sub Tyl_delay(byval Y As Word)
      X = 0
      While X < Y
        Call Tyl
        Waitms 1
        X = X + 1
      Wend
    End Sub
    
    Sub Prawy_delay(byval Y As Word)
      X = 0
      While X < Y
        Call Lewo
        Waitms 1
        X = X + 1
      Wend
    End Sub
    
    Sub Lewy_delay(byval Y As Word)
      X = 0
      While X < Y
        Call Prawo
        Waitms 1
        X = X + 1
      Wend
    End Sub
    
    
    End
    
    



    Jeśli ktoś wie co może tu być nie tak to będę ogromnie wdzięczny za pomoc
  • Helpful post
    #25
    mirekk36
    Level 42  
    Witam,

    posłuchaj, gdy piszesz program w Bascomie to zawsze trzymaj się takich zasad jak używasz instrukcji IF

    1.) prosty IF

      If a = 1 Then Gosub JakasProcedura


    2.) bardziej złożony

      If a = 1 Then
        b = a + 1
        Call Inna_procedura
      Endif


    3.) jeszcze bardziej złożony

      If a = 1 Then
        b = a + 7
        Call Procedurka2
      Else
        b = a + 2
        Call Procedurka3
      Endif


    nie staraj się pisać w jednej linii, albo jak najmniej jeśli to nie jest specjalnie konieczne a szczególnie z IF'ami - a zobaczysz, że pozbędziesz się wielu błędów

    .... i właśnie w tym twoim programiku jest taki BUG (babol), co więcej - właśnie w pętli głównej:

    '--------PROGRAM GLOWNY----------
    Do
      If Pind.1 = 1 And Pind.2 = 1 And Pind.0 = 1 Then Przod
        Else
          Call Stoj
          Call Omijanie
      End
    Loop


    jeśli pisałbyś zgodnie z tymi zasadami powyżej to pętla główna wyglądałaby tak:


    '--------PROGRAM GLOWNY----------
    Do
      If Pind.1 = 1 And Pind.2 = 1 And Pind.0 = 1 Then 
         Przod
      Else
          Call Stoj
          Call Omijanie
       Endif
    Loop



    były 2 błędziorki - widzisz je?

    pierwszy - to wywołanie procedury Przod przeniosłem poniżej Then
    drugi - to na zakończenie całego IF'a dałeś samo End zamiast Endif

    Dodano po 8 [minuty]:

    jak ja w Bascomie zaczynam pisać IF'a i wiem, że będzie z Else to najpierw, robię wcięcie i wpisuję całą konstrukcję:

    If cośtam = 1 Then
    Else
    Endif

    a potem ustawiam sobie kursor na końcu linijki z Then , klikam enter, robię jeszcze jedno wcięcie i wypełniam część IF'a przed Else, a później podobnie, - kursor na końcu Else - ENTER, Wcięcie - i kod pomiędzy Else i końcem Endif

    Dodano po 7 [minuty]:

    aha w dalszej części też masz spore niekonsekwencje z tymi twoimi IF'ami - ale kompilator się jakoś nie burzy. Jednak popraw to - bo zgubi cię to kiedyś; Napisałeś kilka razy tak:

       If Pind.1 = 0 Then D1 = 0 
       If Pind.2 = 0 Then D2 = 0 
       If Pind.0 = 0 Then D0 = 0 
       End 


    to akurat z procedury Sprawdzanie_stanu_czujnikow,

    po co na końcu tych IF'ów jest ten zagubiony w kosmosie "End" ????? - wywal te niepotrzebne End'y bo masz ich w ten sam sposób napisanych kilka razy

    zgodnie z 1-szą zasadą jaką napisałem na górze powinno być tylko tak:

       If Pind.1 = 0 Then D1 = 0 
       If Pind.2 = 0 Then D2 = 0 
       If Pind.0 = 0 Then D0 = 0 


    mam nadzieję, że teraz już chyba wszystko jasne - przynajmniej jeśli chodzi o IF'y

    pozdrawiam
  • #26
    baskiin
    Level 11  
    Poprawiłem te błędy i okazało się, że program się elegancko kompiluje.

    W tym jednym złożonym IF-ie nie miałem na końcu end if, bo mi błędy wyskakiwały.

    No ale pokasowałem zbędne end-y, oraz dodałem end if i działa.
    Wielkie dzięki za te uwagi dotyczące programowania w BASCOM-ie.

    I teraz co dalej trzeba zrobić, tzn
    Mam już zapisany, poprawnie skompilowany plik buckethead.bas
    i za pomocą programatora mam go wgrać na mikrokontroler czy może trzeba w programie Bascom-AVR jeszcze nad plikiem popracować.

    A tu zamieszczam najnowsze zdjęcia robota BUCKETHEAD
    www.robocik.cba.pl


    (Dla tych, którzy nie wiedzą Buckethead to gitarzysta Guns N' Roses, The Deli Creeps i pseudonimami gitarzystów będę chyba nazywał swoje elektroniczne dzieła)

    A tu jeszcze rozkład czujników:
    Prośba o sprawdzenie schematu -robot, który omija przeszkody
  • Helpful post
    #27
    mirekk36
    Level 42  
    jak skompilował ci się poprawnie plik to otrzymałeś w wyniku tej operacji plik nazwa.HEX i to ten plik wgrywa się już do procka za pomocą programatora.

    Ale zależy jaki masz programator?? jeśli STK200 to nie musisz się przejmować tym jak nazywają się pliki po kompilacji - po prostu w Bascomie klikasz klawisz programuj (po uprzednim ustawieniu w opcjach programatora STK200 właśnie) i Bascom sam wgra odpowiednie pliki do procka - i po zawodach ;)
  • #28
    baskiin
    Level 11  
    Tak, plik buckethead.hex pojawił się również.

    No ja używam SiProg zbudowanego na podstawie schematu i opisu montażu sporządzonego przez dr Pawła Borkowskiego
    Oto link do strony:
    SiProg

    A programuje się w programie PonyProg

    Można go ściągnąć ze strony:
    http://www.lancos.com/ppwin95.html

    Dzięki jeszcze raz za pomoc.

    A tu ponownie zamieszczam link do najnowszych zdjęć robota BUCKETHEAD
    www.robocik.cba.pl
  • #29
    baskiin
    Level 11  
    Zrobiłem robota z pomocą i poradami kolegów z elektrody, LINK jest na dole postu.
    Długo nie poruszałem wątku, bo myślałem, że sam się z tym uporam.
    Jednak mi się nie udało.

    A problem wygląda tak jak w temacie, czyli w powietrzu wszystko się kręci jak powinno, gdy nacisnę guziczki-czujniki to koła zmieniają kierunek obrotu
    i robią to co mają robić,

    ALE gdy postawię robota na ziemi to nie ma siły jechać

    Zasilałem go zasilaczem 9V, 800mA - max, 10W

    Czy powinienem podłączyć zamiast tego zasilacza baterię 9V, tą taką kwadratową, żeby mieć lepszą wydajność prądową.
    Chcę wiedzieć gdzie leży przyczyna, bo jakby nie ruszyło to czy może to być coś z wysterowaniem .


    Link do tematu o robocie



    Post był raportowany. Temat scaliłem. [c_p]
  • Helpful post
    #30
    wader_669
    Level 28  
    z wysterowaniem raczej nie. Masz albo do bani zrobiona przekladnie, albo zasilacz jakis zrabany. Wyglada na to ze silniczki jak sa na ziemi maja taki opor i nie dostarczasz ich tyle energi ze nie sa wstanie ruszyc w tym momencie zawsze silniki pobieraja najwiecej pradu, to tez moze powodowac spadki napiecia i resetowanie sie procesora.