Elektroda.pl
Elektroda.pl
X
HELUPOWER
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie piecem węglowym

29 Paź 2015 21:27 1359 12
  • Poziom 9  
    Witam!
    Mam zamiar zrobić zamykanie dżwiczek od pieca sterowane termostatem i silnikiem krokowym silnik mam unipolarny 6 wyprowadzeń .Nie umiem w tym wypadku zrobić żeby silnik zrobił tylko te 4 kroki i zatrzymał się lub zrobił parę obrotów i zatrzymał się!.Po prostu nie umiem jeszcze zatrzymać działania w pętli void loop.
    Mam 65 lat i proszę o wyrozumiałość, pomoc lub jakieś sugestie.Platforma arduino uno. Dopiero dwa tygodnie mam styczność z arduino.

    Taki oto kod wypociłem:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    znowu noce nie przespane .Zadałeś mi niezła lekturę .ale dzieki za pomoc. tylko gdzie mam umieścić funkcję for \bo stale mam błąd

    Moderowany przez dondu:

    Poprawiłem SYNTAX, ale na przyszłość sam już poprawnie go używaj wg instrukcji: https://www.elektroda.pl/rtvforum/viewtopic.php?p=14652518#14652518

    Druga prośba: nie odpowiadaj na post edytując swój poprzedni post - tracimy chronologię dyskusji.

  • HELUPOWER
  • Pomocny post
    Poziom 34  
    Witamy kolegę. Jak widać na naukę nigdy nie jest za późno. Cyfrowy świat nie jest tylko dla młodych. M. S. 52l.

    Nie znam narzecza arduino ale zapoznaj się z pętlą for, której przebieg "programuje" się na konkretną ilość razy. Np.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    więcej na
    http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-petla-for.html

    Przy sterowaniu silnikiem krokowym warto też rolować zmienną (w pętli for). W zmiennej zapisujemy kombinację bitów sterujących silnikiem, i modyfikujemy za pomocą przesunięcia bitowego. Przykładowo ustawiamy na początku zmienną 8 bitową (z której potrzebujemy 4 bity) o wartości (bitowo) 00010001 i przesuwamy bity w lewo lub w prawo. Przykładowo w wyniku przesunięcia w lewo o jeden bit otrzymamy 00100010. Po każdym przesunięciu liczbę wpisujemy do rejestru odpowiadającego za stan portu, poprzez który sterujemy silnikiem. Zmienna pamięta ostatni stan więc powrót od sterowania silnikiem jest prosty. Należy pamiętać aby po zatrzymaniu silnika ustawić port sterujący w stanie nieaktywnym np. (bitowo) 00000000. Inaczej będzie płynął prąd w jednym uzwojeniu zatrzymanego silnika, więc ten w niebo wzięty nie będzie.

    więcej na
    http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-przesun-bity-lewo.html

    P. S. Warto zapoznać się z całym kursem
    http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html

    Po zgłębieniu mikrokontrolerów świat nie będzie już taki sam.
  • Poziom 36  
    lmwmbi napisał:
    Witam!
    Mam zamiar zrobić zamykanie dżwiczek od pieca sterowane termostatem i silnikiem krokowym silnik mam unipolarny 6 wyprowadzeń .


    Jeżeli masz silnik z 6 wyprowadzeń to jest to silnik uniwersalny, który może byc podłaczony także jako bipolarny wykorzystując tylko końcowe przewody cewek. Środkowe odczepy pozostaw nie podłączone. Zwiększysz przez to jego wydajnośc o około 40%.
    Nie ważne jakiej mocy jest ten silnik, nie mozesz go podłączyc bezpośrednio do processora (Arduino). Konieczny jest odpowiedni układ mocy (sterownik /driver).
    Porzuc koncept tworzenia własnego algorytmu i wybierz uproszczoną do max. metodę stosowania gotowych driverów, gdzie kontrola takim silnikiem ogranicza się do podania stanu wysokiego lub niskiego na jeden pin zależnie od zadanego kierunku obrotów i dostarczenia impulsów na inny pin, gdzie jeden impuls skutkuje obrót wałka silnika o jeden krok. Pozwala on także na dokładną kontrolę maxymalnego porądu pobieranego przez silnik, co w efekcie umożliwia zasilanie silnika wielokrotnie (!!!) wyższym napięciem niż tradycyjny 'własnej roboty' układ dla unipolarnej versji. Zapopnaj się z ukladami z tej strony:
    https://www.pololu.com/category/120/stepper-motor-drivers

    Są one dostepne także w Polsce, a ich cena nie jest też zbytnio wygórowana.
    Możesz je znależc w Botland .pl w grupie: 'Sterowniki silników krokowych' i pewnie też istnieją inni dystrybutorzy.
    Krzystaj ze strony Pololu - tam masz więcej szczegułów odnośnie podłączenia i wstepnej regulacji w zastosowaniu do własnego silnika. Nawet znajdziesz tam video clip jak to robic.

    e marcus
  • HELUPOWER
  • Poziom 9  
    zastosowałem układ ULN 2003 trochę się grzeje przy 12 v ale jeśli będzie pracował chwilowo i z radiatorkiem to zaraz nie padnie. Ale w dalszym ciągu nie umiem zatrzymać tej pętli w kodzie powyżej .Jak silnik dostanie impuls z termostatu to kreci się cały czas a ja chciałbym żeby się zatrzymał po wykonaniu tych czterech kroków które ma zadane i czekał na następny sygnał z termostatu.Nie chce tego robić na krańcówkach bo to przecież bez sensu gdy mam do dyspozycji taką platformę jak arduino. Wiem ze kod jest pewnie dla Was smieszny i prosty do minimum ale można na początek tak się bawić bo inaczej jeszcze nie umiem a za 4 może 6 lat zrobię coś lepszego.
    Pan powyżej wpisał mi polecenie if ale ni jak nie umiem go jeszcze zastosować. Chyba jestem już za stary na te cuda techniki!! Pozdrawiam Paweł

    Dodano po 3 [minuty]:

    Dziś uczyłem sie jak odpowiedziec na wasze sugestie na elektrodzie zajęło mi to całe przed południe. Miałem coś umieścić w jakimś tam SYNTAX ? ale chyba się udało.
  • Poziom 34  
    Cytat:
    Pan powyżej wpisał mi polecenie if ale ni jak nie umiem go jeszcze zastosować.


    Po pierwsze nie pan tylko kolega, po drugie nie if tylko for, po trzecie trzeba wgłębić się w kursy i analizować małe fragmenty programów już napisanych i samemu pisać, a dzień po dniu będzie się wszystko powoli wyjaśniać samo. Niestety, nawet 18 latek mikrokontrolerów nie ogarnie w 3 dni. CIERPLIWOŚCI!

    Inni koledzy mnie chyba zabiją, ale powiem tak. Zawodowego programisty z kolegi już się nie zrobi więc na własne potrzeby coś drobnego ustrugać to i w Bascomie można. Jeśli na płytce arduino siedzi AVR to wcale nie znaczy, że trzeba korzystać z dedykowanego oprogramowania. Wymieniam tu Bascom dlatego, że mimo wszystko łatwiej w nim ruszyć od zera. Sam zaczynałem od Bascoma jakieś 10 lat temu i wcale nie przeszkadzało mi to w przesiadce na ARM'y i programowanie w C. (Do dziś zresztą wolę AVR'a na szybko oprogramować w Bascomie).

    Ta dygresja ma służyć koledze do pogłębienia świadomości w zakresie istniejących możliwości.

    Można też zainwestować w książkę i przerobić zawarte w niej przykłady, a sterownik będzie gotowy na sezon 2016/2017.

    Uprzedzając pytanie napiszę jeszcze, że AVR to procki z rodziny Attiny, Atmega itp.
  • Poziom 9  
    zdaję sobie sprawę że to trudne i chciało by się od razu budować cuda.Nawet tu na elektrodzie nie umiałem zadać pytania ale już chyba umiem .Do puki się nie spróbuje to wszystko wydaje się proste.Wszystkie wieczory siedzę przed komputerem i czytam kursy programowania .Nie wiem czy mi życia starczy bo jestem niecierpliwy.Ale zabawa fajna ! Tylko ten moderator stale coś chce a to jakiś syntax a to jeszcze coś i jakieś punkty mi zabiera.Ja to muszę ogarnąć jakoś.
    Pozdrawiam
  • Poziom 36  
    lmwmbi napisał:
    zastosowałem układ ULN 2003 trochę się grzeje przy 12 v ale jeśli będzie pracował chwilowo i z radiatorkiem to zaraz nie padnie. Ale w dalszym ciągu nie umiem zatrzymać tej pętli w kodzie powyżej .Jak silnik dostanie impuls z termostatu to kreci się cały czas a ja chciałbym żeby się zatrzymał po wykonaniu tych czterech kroków które ma zadane i czekał na następny sygnał z termostatu.Nie chce tego robić na krańcówkach bo to przecież bez sensu gdy mam do dyspozycji taką platformę jak arduino.

    Sam fakt używania platformy Arduino wcale nie przesądza sukcesu stosowanego programu i konceptu projektu.
    Po pierwsze: Aby program wykonywał zamierzony cel musisz dokładnie (!) zrozumiec jego funkcjonalnośc.
    Napiszę ci słownie co twój program przedstawia:
    Sprawdzaj ciągle temperaturę, i jezeli temperatura jest wyższa od zadanej, kręc silnikiem w prawo. Ta (w programie) sekwencja 4-ch kroków jest po to aby w ogóle kręcic wałkiem silnika i nie mówi że proces należy w tym miejscu zakończyc, lecz wprost przeciwnie; mówi wróc na poczatek pętli i wykonuj co zadane...
    Czy po tych pierwszych czterech krokach wystapiły jakieś zmiany warunkujące dalsze kręcenie silnika ? Z pewnością nie, a nawet gdyby temperatura spadła minimalnie ponizej zadanej, to w dalszej części warunku (if...) masz wpis że ma kręcic w przeciwnym kierunku również nie określoną ilośc kroków niezależnie od różnicy temperatur.
    Tak na marginesie. Stosowanie silnika krokowego w tym konkretnym projekcie jest bardziej skomplikowane niż by sie wydawało. Brak sprzężenia zwr. chocby nawet przy załączaniu pozwalające zlokalizowac "HOME POS" czyli pozycję spoczynkową/ wyjściową od której będziesz liczył kroki zamykania lub otwierania elementu kontrolowanego. Zawsze jest szansa (z różnych przyczyn) że układ zgubi orientację/synchronizację aktualnego położenia elementu sterowanego a wtedy nie jest wiadomo ile kroków i w jakim kierunku ma je wykonac.
    Lepszym rozwiązaniem byłoby zastosowac RC Servo. Przynajmniej zawsze jest znana jego pozycja względem zera. Chociaż tu również musi byc specyzowana zależnośc położenia nazwijmy "Przepustnicy" od załóżmy temperatury(?).
    Przy regulacji ilości fizycznych jak temperatura, wilgotnośc etc. należy liczyc się z pewną zwłoką reakcji urządzeń pomiarowych, dlatego wymagane jest wprowadzenie pewnego zakresu histerezy. Zwłoka ta nie jest ściśle sprecyzowana i niekiedy może prowadzic do relatywnie szybkich oscylacji w pobliżu punktu równowagi pomiędzy załączeniem i wyłączeniem urzadzenia , w tym wypadku silnika.
    Odnośnie Arduino i kontroli silnika krokowego:
    Przeanalizuj ze zrozumieniem podany przykład w Arduino:

    W górnym menu wybierz:
    File/Examples/Stepper/stepper_oneStepAtAtime

    e marcus
  • Poziom 27  
    Trochę tutaj napisaliście i nie chce mi się czytać więc napiszę trzy złote rady odnośnie napotkanych problemów:

    1. Aby programować cokolwiek trzeba poznać podstawowe polecenia, są uniwersalne dla wiekszości jezyków (upraszczam ale nie ma sensu w tym przypadku w to wnikać). Poza zamiennymi, operacjalmi matematycznymi i logicznymi są też instrukcje warunkowe i pętle. Wystarczy wpisać kurs C++ w Google i wyskoczy masa poradników z kompletnym opisem. Arduino używa języka C a nie C++ ale w gruncie rzeczy to prawie identyczne języki, różnią się głównie nazwami poleceń w bibliotekach.

    2. Odbierając jakiś sygnał w elektronice nie mamy pewności jak zachowa się obiekt. Jeśli zamkniesz drzwiczki to temperatura nie zmaleje natychmiast. Trzeba po zamknięciu drzwiczek poczekać kilka sekund a nawet minut aż termostat przestanie uruchamiać program na Arduino.
    Innym sposobem jest tzw ustawianie flag, czyli zmiennej która informuje o wykonaniu konkretnej rzeczy.
    Przykładowo możesz w pętli napisać program, który ciągle będzie zamykał drzwiczki od pieca, ale najpierw będzie sprawdzał poprzez taką flagę, czy one są juz zamknięte . Po prostu po zamknięciu dajesz jej wartość np 1 i już program będzie wiedział że są zamknięte i żeby nie kręcić silnikiem, pomimo że termostat nadal daje sygnał o wysokiej temperaturze.

    3. Piec to wysokie temperatury, a elektronika bardzo nie lubi wysokich temperatur. Upewnij się że zarówno silnik jak i elektronika nie nagrzewają się od pieca powyżej 60 stopni.
  • Poziom 9  
    Dzięki za podpowiedzi. Cały czas czytam kursy i próbuję ,zmieniam nadpisuję i sprawdzam co wyszlo. Mam nadzieję że nie uszkodzę arduino. Moze masz rację z tym serwo ale przecież z tej platformy idzie zrobić cuda i zaadoptować do tego silnik krokowy.Już kombinuję z funkcją for i coś zaczyna drgnęlo do przodu.Jak na razie zabawa przednia.Pozdrawiam!
  • Poziom 36  
    lmwmbi napisał:
    Dzięki za podpowiedzi. Moze masz rację z tym serwo ale przecież z tej platformy idzie zrobić cuda


    Na to nie licz. Owszem, można zrobic wiele, nie koniecznie trafnych rozwiązań pod wzgdlędem funkcjonalnym i ekonomicznym. Aby wysterowac stepper musisz liczyc impulsy podane do jego drivera. Taka jest natura silników krokowych - Modulowane zasilanie impulsowe. W twoim projekcie, processor zawsze musi znac aktualne połozenie kontrolowanego elementu aby wiedziec ile i w jakim kierunku podac kolejne krki.
    Owszem mozesz je liczyc w lewo i prawo (góra i dół) ale musi byc ustalona jakaś pozycja wyjściowa, nazwijmy to pozycja zerowa, która u ciebie jest trudna do określenia (bez stosowania czyjnikow krańcowych i dodatkowych dla nich fragmentów programu), a ponadto jest ulotna.

    e marcus

    e marcus
  • Poziom 27  
    Wystarczy dodać enkoder obrotowy i już wiadomo gdzie jest silnik. Inna sprawa że taki z pozycją zerową kosztuje dość sporo. Ale można kupić zwykły magnetyczny (odporność na zabrudzenie w kotłowni) za około 30zł i czujniki krańcowe.
    Ja bym całkiem zrezygnował z silnika krokowego na rzecz silnika DC z wbudowaną dużą przekładnią. Tanie chinczyki są np na tej stronie http://magma.sklep.pl/product-pol-3635-Silnik-elektryczny-12V-5-6obr-do-modeli-zabawek.html
    Czujniki trzeba zastosować te same a sterować enkoderem, ale za to silnik wyjdzie znacznie taniej.
  • Poziom 36  
    strikexp napisał:
    Wystarczy dodać enkoder obrotowy i już wiadomo gdzie jest silnik. Inna sprawa że taki z pozycją zerową kosztuje dość sporo. Ale można kupić zwykły magnetyczny (odporność na zabrudzenie w kotłowni) za około 30zł i czujniki krańcowe.



    Eh, taki may drobiazg 'enkoder absolutny' ; - nowy wart tyle co cały piec.
    - optyczny w zamkniętej obudowie, nie używany lecz wymontowany z 3 fazowego servo-silnika DC może dostac za darmo.
    - magnetyczny resolver, (Smartsyn - Tamagawa Seiki) też moge mu sprezentowac - mam ich kilka, tylko jest pytanie: czy potrafi je odpowiednio obsłużyc?

    Zwykły silnik DC (z przekładnią, opt) i wyłączniki krańcowe nie dają możliwości ustawienia lub odczytu pozycji pośrednich.

    Jeżeli zastosuje stepper i sensory krańcowe to żaden encoder/resolver nie jest potrzebny. Przy każdym starcie (inicjacja podobna do printera) odpowiednia subrutyna w programie odnajdzie 'Home Pos' - reszta już jest łatwa. Może zakupic (po przystępnej cenie) stepper z wbudowaną przekładnią.
    Jest cała masa urzadzeń z zastosowaniem stepperów bez encoderów lecz maja sensory dla home pos.

    A teraz podsumuj jak taka kombinacja ma się pod względem kosztów, trudnosci w wykonaniu i oprogramowaniu w porównaniu do RC servo....

    e marcus

    e marcus
  • Poziom 27  
    Silnik krokowy nigdy nie zastapi enkodera, wystarczy przyblokować silnik a zgubi prawidłową pozycję.
    Źle doradzasz, lepiej jest zrobić tak jak ja mówię. Teoretycznie żaden enkoder nie jest potrzebny jesli mają być tylko dwie pozycje zamknięte-otwarte. Wtedy wystarczy użyć czujników krańcowych i jedynie sprawdzać czas pracy silnika tak aby wykryć zablokowanie i go wyłączyć awaryjnie. Ale to juz autor tematu musi powiedzieć jak to dokładnie wygląda u niego.