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

sterowanie dopływem powietrza pieca co silnikiem krokowym

26 Sty 2011 16:54 5995 17
  • Poziom 10  
    Sterowanie ciągu Pieca CO silnikiem krokowym


    --------------------------------------------------------------------------------

    Proszę opomoc w dostosowaniu programu sterowania piecem Co do obsługi przez silnik krokowy . Sterownik pochodzi ze strony Mirley -Prosty sterownik co.
    Mam juz zwolnione w atmedze cztery porty PD7,PD6,PD5iPD4 na którym jest wentylator .W zasadzie w tym sterowniku mozna pominąć i pompe na PD3 - i tak jej nie mam.- więc było by troche miejsca.Silnik ma służyc do podnoszenia klapki dopływu powietrza, czyli otwierac przy niskiej temperaturze a zamykac po osiagnieciu temperatury ustalonej.Jak to zrobić i gdzie wstawic sterowanie silnika.
    Oto kod:
    Code:
    $regfile = "m8def.dat" 
    
    $crystal = 16000000

    'Config Porta = &B00111111 : Porta = &B11111111
    Config Portb = &B11111000 : Portb = &B11111111
    Config Portc = &B11111111 : Portc = &B11111111
    Config Portd = &B00011111 : Portd = &B11111111

    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 'mirley UPT M16
    Config Lcd = 16 * 2
    Cls
    Cursor Off Noblink

    Config 1wire = Pind.2


    Sw_port Alias Pinb 'nazwa portu
    Pompa Alias Portd.3
    Went Alias Portd.4
    Buzz Alias Portd.1
    Light Alias Portd.0

    Ds1r Alias Pind.7
    Ds2r Alias Pind.6
    Ds3r Alias Pind.5

    Led_a Alias Portb.5
    Led_p Alias Portb.3
    Led_w Alias Portb.4


    Config Timer0 = Timer , Prescale = 256
    Enable Timer0 : On Timer0 Prztimer0


    Enable Interrupts
    '********** Konfiguracja uC Koniec ************

    '****************** Zmienne *******************
    '***********************************************
    Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte 'sw
    Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit 'Lcd
    Dim Mig As Bit , Poz_ust As Byte
    Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte


    Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit 'DS18B20
    Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
    Dim T(4) As Word

    Dim T_min As Word , T_alarm As Word

    Dim Dzielnik(2) As Byte 'dzielniki timera
    Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwa?
    Dim Hbyte(2) As Byte , Hword(3) As Word , N As Byte , Hbit As Bit , M As Byte

    Dim Buzz_en As Bit
    Dim Tryb_letni As Bit '0- tryb zimowy, 1- tryb letni

    '************* Zmienne Koniec ****************

    '************ Warunki Poczatkowe ***************
    '***********************************************
    Light = 0

    Lcd " Sterownik C.O."
    Lowerline
    Lcd " Wersja 0.96"

    Wait 1

    If Ds1r = 1 And Ds2r = 0 And Ds3r = 0 Then
    Ds_adr = 30
    Gosub Ds_reg
    Cls
    Lcd "Ds Piec"
    End If
    If Ds1r = 0 And Ds2r = 1 And Ds3r = 0 Then
    Ds_adr = 40
    Gosub Ds_reg
    Cls
    Lcd "Ds Bojler"
    End If
    If Ds1r = 1 And Ds2r = 1 And Ds3r = 0 Then
    Ds_adr = 50
    Gosub Ds_reg
    Cls
    Lcd "Ds Zbiornik"
    End If
    If Ds1r = 0 And Ds2r = 0 And Ds3r = 1 Then
    Ds_adr = 60
    Gosub Ds_reg
    Cls
    Lcd "Ds Kuchnia"
    End If


    For N = 1 To 8
    Hbyte(1) = 30 + N
    Readeeprom Ds1(n) , Hbyte(1)
    Hbyte(1) = 40 + N
    Readeeprom Ds2(n) , Hbyte(1)
    Hbyte(1) = 50 + N
    Readeeprom Ds3(n) , Hbyte(1)
    Hbyte(1) = 60 + N
    Readeeprom Ds4(n) , Hbyte(1)
    Next N

    Readeeprom T_min , 2
    Readeeprom T_alarm , 4
    Readeeprom Hbyte(1) , 6

    Tryb_letni = Hbyte(1).0
    If T_min < 100 Or T_min > 950 Then T_min = 400
    If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 850


    Wait 1
    Wyswietlono = 1
    Wyswietlanie = 1
    Autosave = 5
    Autolight = 0

    '******* Warunki Poczatkowe Koniec ***********

    '************** Petla glowna ******************
    '***********************************************
    Do
    '*********************************************** co 4ms
    If Flaga_4ms = 1 Then
    Flaga_4ms = 0

    Gosub Przyciski
    If Wyswietlono = 1 Then Gosub Wysw_lcd

    End If
    '***********************************************

    '*********************************************** co 500ms
    If Flaga_500ms = 1 Then
    Flaga_500ms = 0

    Mig = Not Mig

    'Portd.6 = Buzz_en

    If Pompa = 0 Then Led_p = Mig Else Led_p = 1
    If Went = 0 Then Led_w = Mig Else Led_w = 1
    Led_a = Buzz

    Wyswietlanie = Poz_wysw

    End If
    '***********************************************

    '*********************************************** co 1s
    If Flaga_1s = 1 Then
    Flaga_1s = 0

    If Light = 0 Then
    Incr Autolight
    If Autolight >= 20 Then Light = 1
    Else
    Autolight = 0
    End If

    If Poz_wysw <> 1 Then
    Incr Autopowrot
    If Autopowrot = 6 Then
    'Poz_wysw = 1
    Wyswietlanie = 1
    Poz_ust = 0
    End If
    Else
    Autopowrot = 0
    End If


    If Autosave < 5 Then
    Incr Autosave
    If Autosave = 5 Then
    'tu zapis do eeprom
    Writeeeprom T_min , 2
    Writeeeprom T_alarm , 4
    Hbyte(1) = 0
    Hbyte(1).0 = Tryb_letni
    Writeeeprom Hbyte(1) , 6
    Poz_ust = 0
    End If
    End If

    Gosub Temperatura
    Gosub Sterowanie

    End If
    '***********************************************

    Loop
    End
    '************ Petla glowna Koniec **************

    '************ Przerwanie timer 0 ***************
    '***********************************************
    Prztimer0:
    Timer0 = 5
    Set Flaga_4ms
    Incr Dzielnik(1)
    If Dzielnik(1) = 125 Then
    Dzielnik(1) = 0
    Set Flaga_500ms
    Incr Dzielnik(2)
    If Dzielnik(2) = 2 Then
    Dzielnik(2) = 0
    Set Flaga_1s
    End If
    End If
    Return
    '******** Przerwanie timer 0 Koniec ************

    '***********************************************
    '***************** Przyciski **************
    Przyciski:
    Sw = Sw_port And &B00000111 'maska na piny nieu?ywane jako sw
    If Sw <> &B00000111 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 68 Then
    Licznik_sw = 0
    Select Case Stan_sw
    Case &B00000011: 'incr
    '***********************************************************
    Select Case Poz_wysw
    Case 3:
    Select Case Poz_ust
    Case 0:
    Poz_ust = 1
    Case 1:
    If T_min < 950 Then T_min = T_min + 10
    Case 2:
    If T_alarm < 950 Then T_alarm = T_alarm + 10
    End Select
    Autosave = 0
    Case 4:
    If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
    Autosave = 0
    'Case 5:

    End Select
    If Buzz = 0 Then Buzz_en = 0
    Autopowrot = 0
    Light = 0
    Autolight = 0

    Case &B00000101: 'ustaw next
    '***********************************************************
    If Poz_ust = 0 Then
    Wyswietlanie = Poz_wysw + 1
    If Wyswietlanie = 5 Then Wyswietlanie = 1
    Else
    Select Case Poz_wysw
    Case 3:
    Incr Poz_ust
    If Poz_ust = 3 Then Poz_ust = 0
    Case 4:
    Incr Poz_ust
    If Poz_ust = 2 Then Poz_ust = 0

    End Select
    End If
    If Buzz = 0 Then Buzz_en = 0
    Autopowrot = 0
    Light = 0
    Autolight = 0

    Case &B00000110: 'decr
    '***********************************************************
    Select Case Poz_wysw
    Case 3:
    Select Case Poz_ust
    Case 0:
    Poz_ust = 1
    Case 1:
    If T_min > 100 Then T_min = T_min - 10
    Case 2:
    If T_alarm > 100 Then T_alarm = T_alarm - 10
    End Select
    Autosave = 0
    Case 4:
    If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
    Autosave = 0

    'Case 5:

    End Select
    If Buzz = 0 Then Buzz_en = 0
    Autopowrot = 0
    Light = 0
    Autolight = 0

    End Select
    End If
    Else
    Stan_sw = Sw
    Licznik_sw = 60
    End If

    Return
    '***********************************************

    '***********************************************
    '************** LCD ***********
    Wysw_lcd:
    If Wyswietlanie <> 0 Then
    Wyswietlono = 0
    Select Case Wyswietlanie
    Case 1: 'temp piec bojler
    '**************************************************************
    If Poz_wysw <> 1 Then
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
    'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' o kreskowane

    Cls
    Lcd "Piec:"
    Lowerline
    Lcd "Bojler:"
    End If

    For N = 1 To 2
    Hword(1) = T(n) / 10
    Hword(2) = 12
    If Hword(1) >= 10 Then Decr Hword(2)
    If Hword(1) >= 100 Then Decr Hword(2)
    If Minusy.n = 1 Then Decr Hword(2)
    Locate N , Hword(2)
    Hword(2) = T(n) Mod 10
    If Minusy.n = 1 Then Lcd "-"
    Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
    Next N

    Case 2: 'temb banka,dom
    '**************************************************************
    If Poz_wysw <> 2 Then
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien

    Cls
    Lcd "Zbiornik:"
    Lowerline
    Lcd "Kuchnia:"
    End If

    For N = 3 To 4
    Hword(1) = T(n) / 10
    Hword(2) = 12
    If Hword(1) >= 10 Then Decr Hword(2)
    If Hword(1) >= 100 Then Decr Hword(2)
    If Minusy.n = 1 Then Decr Hword(2)
    M = N - 2
    Locate M , Hword(2)
    Hword(2) = T(n) Mod 10
    If Minusy.n = 1 Then Lcd "-"
    Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
    Next N

    Case 3:
    '**************************************************************
    If Poz_wysw <> 3 Then
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
    'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' o kreskowane

    Cls
    Lcd "T.Min:"
    Lowerline
    Lcd "T.Alarm"
    End If

    If Poz_ust = 1 And Mig = 1 Then
    Locate 1 , 10
    Lcd " "
    Else
    't minimalna
    Hword(1) = T_min / 10
    Hword(2) = 12
    If Hword(1) >= 10 Then Decr Hword(2)
    If Hword(1) >= 100 Then Decr Hword(2)
    Locate 1 , Hword(2)
    Hword(2) = T_min Mod 10
    Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
    End If

    If Poz_ust = 2 And Mig = 1 Then
    Locate 2 , 10
    Lcd " "
    Else
    't alarmowa
    Hword(1) = T_alarm / 10
    Hword(2) = 12
    If Hword(1) >= 10 Then Decr Hword(2)
    If Hword(1) >= 100 Then Decr Hword(2)
    Locate 2 , Hword(2)
    Hword(2) = T_alarm Mod 10
    Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
    End If


    Case 4:
    '**************************************************************
    If Poz_wysw <> 4 Then
    Cls
    Lcd "Tryb: "
    End If

    Locate 1 , 7
    If Poz_ust = 1 And Mig = 1 Then
    Lcd " "
    Else
    If Tryb_letni = 1 Then Lcd "Letni" Else Lcd "Zimowy"
    End If


    Case 5:
    '**************************************************************
    If Poz_wysw <> 5 Then
    Cls
    Lcd "Przedmuch:"
    Lowerline
    Lcd "Przerwa:"
    End If


    End Select
    Poz_wysw = Wyswietlanie
    Wyswietlanie = 0
    Wyswietlono = 1
    End If
    Return
    '************** LCD Koniec ***********

    '********** rejestracja DS *********
    Ds_reg:
    Disable Interrupts
    1wreset
    1wwrite &H33
    Ds(1) = 1wread(8):
    Enable Interrupts
    If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
    Ds_ok = 1
    For N = 1 To 8
    Hbyte(1) = Ds_adr + N
    Writeeeprom Ds(n) , Hbyte(1)
    Next N
    Else
    Ds_ok = 0
    End If
    Return
    '****** rejestracja DS Koniec ******

    '************* Temperatura ***********
    Temperatura:
    Disable Interrupts
    1wreset
    Select Case Ktory_ds
    Case 0:
    1wwrite &HCC
    1wwrite &H44
    Case 1:
    1wwrite &H55
    1wwrite Ds1(1) , 8
    1wwrite &HBE
    Lsb = 1wread():
    Msb = 1wread():
    Case 2:
    1wwrite &H55
    1wwrite Ds2(1) , 8
    1wwrite &HBE
    Lsb = 1wread():
    Msb = 1wread():
    Case 3:
    1wwrite &H55
    1wwrite Ds3(1) , 8
    1wwrite &HBE
    Lsb = 1wread():
    Msb = 1wread():
    Case 4:
    1wwrite &H55
    1wwrite Ds4(1) , 8
    1wwrite &HBE
    Lsb = 1wread():
    Msb = 1wread():
    End Select

    Enable Interrupts

    If Ktory_ds > 0 Then
    T(ktory_ds) = Msb * 256
    T(ktory_ds) = T(ktory_ds) + Lsb
    Minusy.ktory_ds = Msb.7

    If Minusy.ktory_ds = 1 Then
    T(ktory_ds) = Not T(ktory_ds)
    T(ktory_ds) = T(ktory_ds) + 1
    End If

    T(ktory_ds) = T(ktory_ds) * 10
    T(ktory_ds) = T(ktory_ds) / 16
    Else
    If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
    End If

    Incr Ktory_ds
    If Ktory_ds = 5 Then Ktory_ds = 0

    Return
    '********** Temperatura Koniec *********


    '************ Sterowanie ***************
    '***********************************************
    Sterowanie:


    If Tryb_letni = 1 Then
    If T(1) >= T_min Then
    Hword(1) = T(2) + 70
    Hword(2) = T(2) + 30
    If T(1) >= Hword(1) Then Pompa = 0
    If T(1) <= Hword(2) Then Pompa = 1
    Else
    Pompa = 1
    End If
    Else
    If T(1) >= T_min Then
    Pompa = 0
    Else
    Pompa = 1
    End If
    End If


    If T(1) >= T_alarm Or T(2) >= T_alarm Then
    If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
    Else
    Buzz = 1
    Hword(1) = T_alarm - 50
    If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
    End If
    'tutaj sterowanie wentylatorem

    Return
    '******** Sterowanie Koniec ************


    Programowanie Ds przeniosłem pod przyciski.
    Czy da sie to zrobic ?
    Nie znam sie na programowaniu na tyle by sobie z tym poradzic.

    Mam nadziele ze teraz dobrze wstawiłem mój temat. Jesli nie to gdzie go wstawic![/code]
  • Sklep ElwronSklep Elwron
  • Poziom 20  
    Cześć

    Widzę że masz kod Mirka ale przeze mnie przerobiony.

    Jaki masz sterownik silnika krokowego - załącz kilkanaście fotek i sam mechanizm

    Podaj dane - ile impulsów potrzeba na pełne otwarcie - no i doda się w zależności od sterownika silnika kilka biegów w zależności od temperatury.

    Robię sterowniki wiec w tym kierunku pokombinuje sie troszeczkę w celach nauki i pomocy dla ciebie

    Pozdrawiam
    Grzesiek
  • Poziom 10  
    Myślałem o ULN2803 lub 2003 jako typowy sterownik . wykorzystujący wyjścia pd7,pd6,pd5,pd4 czyli 13,12,11,6 lub 5 nóżki atmegi8 .te porty można wykorzystać do wysterowania silnikiem - powinien działać tak jak wentylator włanczac i wyłanczac sie przy ustawionej temperaturze .pompy nie mam wiec port jest też nie potrzebny .
    Silników umnie do wyboru - unipolarne i bipolarne .Co do mechanizmu to jest kilka pomysłów : silnik steruje bezposrednio srubą M6 ( czyli wkreca i wykreca zależnie od Temp.zadanej )otwarcie i zamykanie najlepiej ustawiane na LCD programowo 15 do 40 obrotów i stop . drugi to przez przekładnie dla zwiekszenie mocy . wtej chwili akurat nam sterownik wykonałem układ na attinie 2313 AVT2745 i silniczek unipolar chodzi pieknie . Jutro jak wykonam w osi polączenia z nasadką klucza 10 otwór na tokarce to wypróbuje czy to zda egzamin i zamieszcze fotki . planuje to wykorzystac do sterownika piecem przez przekaźnik na wyjsciu wentylatora zmiana kierunku i krancówki jako wylącznik.
  • Poziom 20  
    Do sterowania potrzebujesz jeszcze 2 linie na przełączniki krańcowe no i sterowanie silnikami, :
    2 linie krańcówki
    4 linie silnik
    3-4 to przyciski
    1 buzer
    6 lcd
    1 czujnik temp
    do tego zasilanie, kwarc,

    policz czy M8 da rade - pomyśl o M16 lub 32

    pozdrawiam
  • Sklep ElwronSklep Elwron
  • Poziom 10  
    witam .
    Projekt mirleya juz ma wszystko tylko trzeba dodac silnik i go powiązac z tym programem w oparciu o temp -opis wyżej.oczywiscie po modyfikacji kodu. czyli 4p -silnik . czy krańcówki przyciski są ewentualnie +1 do ręcznego sterowania przy rozpalaniu? nie koniecznie ,mozna programowo wpisac na ile ma otworzyć się klapka i zamknąć przy zadanej temperaturze . Prosty kod powinien się zmieścić w medze8. Jeśli nie to wówczas 16 lub 32 wtedy bardzej rozbudowany programik
    Uważam iż dla wtajemniczonych w programowanie nie jest to trudne.

    Jeszcze nie zmontowałem tego pomysłu z silniczkiem -silniczek jest dość mocny powinien dać radę bez przekładni . Aczkolwiek zastanawiam się nad silnikiem bipolarnym a właściwie orginalnym siłowniczkiem tylko sterowanie dla bipolarnego .
  • Poziom 10  
    Obrazki wysłałem ale coś nie tak .
    jak to zrobić zeby byłu w tym temacie ?
  • VIP Zasłużony dla elektroda
    Poczekać chwilę, jak się załadują i pokaże kod do wklejenia.
  • Poziom 38  
    Sterowanie obrotami silnika powinno być w przerwaniu od timera.
    Trzeba wstawić flaga_1ms.
    No i dodać jakiś licznik kroków.
    To jest ostatni kod popełniony w Bascomie:
    Code:

    'Program do sterowania małych silników krokowych za pomocą ATMega168 it.p. i układu L6219 lub LB1845
    'sterowanie ćwierćrokowe, zasilanie 40V

    $regfile "m168def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    $lib "Lcd4busy.lib"
    Const _lcdport = Portd
    Const _lcdddr = Ddrd
    Const _lcdin = Pind
    Const _lcd_e = 1
    Const _lcd_rw = 2
    Const _lcd_rs = 3
    Ddrb = &HFF
    sei

    Config Timer0 = Timer , Prescale = 64             ' teraz da na 1/4 kroku ok. 2.048ms- ale można skrócić
    Enable Ovf0
    On Ovf0 Step_delay
    Config Pinc.0 = Input
    Set Portc.0
    Kier_lewo Alias Pinc.0                            'jak wciśniemy ten przycisk to się kręci w lewo
    Config Pinc.1 = Input
    Set Portc.1
    Kier_prawo Alias Pinc.1                           'a jak ten- to w prawo
    Ph1 Alias Portb.0                                 'kierunek przepływu prądu w uzwojeniu Ph1
    Ph2 Alias Portb.1                                 'kierunek przepływu prądu w uzwojeniu Ph2
    I01 Alias Portb.2                                 'napięcie dostarczane do uzwojeń- 1 , 2/3 lub 1/3 Imax
    I11 Alias Portb.3
    I02 Alias Portb.4
    I12 Alias Portb.5

    Set I01                                           ' na początek ustawiamy mały prąd
    Set I11
    Set I02
    Set I12

    Dim Next_step As Word                             'next_step będzie miał 16 stanów- sterowanie 1/4 kroku
    Next_step = 1                                     'stan początkowy 1- żeby miało się co kręcić w rotate

    Cls
    Cursor Off
    Locate 1 , 1
    Lcd "Eppur si muove"

    Do
    '
    '
    '
    '
    Loop
    End


    Step_delay:

    Timer0 = 200                                      'no to skracamy- teraz jest co 0.448ms- ten silnik się jeszcze kręci- ale na jakimś innym moze to trzeba zmienić

    If Kier_lewo = 0 And Kier_prawo = 1 Then
       Rotate Next_step , Left
       Gosub Kroki

    End If

    If Kier_prawo = 0 And Kier_lewo = 1 Then
       Rotate Next_step , Right
       Gosub Kroki

    End If

    Return


    Kroki:

        Select Case Next_step

             Case 1
                   'Set I12 : Set I02 : Reset I11 : Reset I01 : Reset Ph2 : Reset Ph1
                'Portb = &B00110000
                Portb = &H30
             Case 2
                    'Set I12 : Reset I02 : Reset I11 : Reset I01 : Reset Ph2 : Reset Ph1
                'Portb = &B00100000
                Portb = &H20
             Case 4
                   'Reset I12 : Set I02 : Reset I11 : Set I01 : Reset Ph2 : Reset Ph1
                'Portb = &B00010100
                Portb = &H14
             Case 8
                    'Reset I12 : Reset I02 : Set I11 : Reset I01 : Reset Ph2 : Reset Ph1
                'Portb = &B00001000
                Portb = &H8
             Case 16
                  'Reset I12 : Reset I02 : Set I11 : Set I01 : Reset Ph2 : Set Ph1
                'Portb = &B00001101
                Portb = &HD
             Case 32
                  'Reset I12 : Reset I02 : Set I11 : Reset I01 : Reset Ph2 : Set Ph1
                'Portb = &B00001001
                Portb = &H9
             Case 64
                ' Reset I12 : Set I02 : Reset I11 : Set I01 : Reset Ph2 : Set Ph1
                'Portb = &B00010101
                Portb = &H15
             Case 128
                  'Set I12 : Reset I02 : Reset I11 : Reset I01 : Reset Ph2 : Set Ph1
                'Portb = &B00100001
                Portb = &H21
             Case 256
                   ' Set I12 : Set I02 : Reset I11 : Reset I01 : Set Ph2 : Set Ph1
                'Portb = &B00110011
                Portb = &H33
             Case 512
                  ' Set I12 : Reset I02 : Reset I11 : Reset I01 : Set Ph2 : Set Ph1
                'Portb = &B00100011
                Portb = &H23
             Case 1024
                 '  Reset I12 : Set I02 : Reset I11 : Set I01 : Set Ph2 : Set Ph1
                'Portb = &B00010111
                Portb = &H17
             Case 2048
                '    Reset I12 : Reset I02 : Set I11 : Reset I01 : Set Ph2 : Set Ph1
                'Portb = &B00001011
                Portb = &HB
             Case 4096
                '    Reset I12 : Reset I02 : Set I11 : Set I01 : Set Ph2 : Reset Ph1
                'Portb = &B00001110
                Portb = &HE
             Case 8192
                '   Reset I12 : Reset I02 : Set I11 : Reset I01 : Set Ph2 : Reset Ph1 :
                'Portb = &B00001010
                Portb = &HA
             Case 16384
                 '  Reset I12 : Set I02 : Reset I11 : Set I01 : Set Ph2 : Reset Ph1
                'Portb = &B00010110
                Portb = &H16
             Case 32768
                '    Set I12 : Reset I02 : Reset I11 : Reset I01 : Set Ph2 : Reset Ph1
                'Portb = &B00100010
                Portb = &H22
          End Select

    Return
     

    Można z tego wyłuskać potrzebne fragmenty.
    Całość jest tu:
    https://www.elektroda.pl/rtvforum/topic1572274.html
    Potem przeszedłem na C.
    Jak w ruskim opowiadaniu:
    Iz liesa dobiegał diewiczyj gołos.
    Postiepienno priechodiaszcyj w żenskij.
    Marna transkrypcja- ale nie mam cyrylicy.
  • Poziom 10  
    Tak tylko wjaki sposób sterowanie krokowcem powiązać z temperatura. od tak wstawić w miejsce wentylatora lub pompy .
    Napewno zmienić trzeba sam początek czyli określić wyjścia dla krokowca.
    Kodów dla serowania jest dużo .tylko jak wstawiam i sprawdzam to wywala błedy to nie tak prosto chop i już .
    Zdjęcia o których wcześniej mówiłem
    To oginalny siłownik z bipolarnym silnikiem
    https://obrazki.elektroda.pl/2422738300_1297455277.jpg

    A oto mój prototyp na szybkieko do testów
    https://obrazki.elektroda.pl/2184586700_1297455457.jpg
    będzie sterował tą klapką
    https://obrazki.elektroda.pl/6394808300_1297455736.jpg
    mam nadzieje że zdjęcia teraz będą.

    Dzisiaj robiłem próby z silniczkiem - klapka unosi się z pmała przekładnia byłoby lepsze . w tym układze musi wszystko być prawie idealnie dopasowane żeby silniczek miał jak najmniejsze opory.
  • Poziom 38  
    Sterowanie krokowcem należy uprościć i wstawić w przerwanie od timer w którym należy wstawić flaga-1ms.
    I wkażdym wywołaniu sprawdzać warunek od temperatury.
  • Poziom 19  
    Słuchaj, a nie lepiej zastosować zwykły silnik - potrzebne są tylko 2 porty, albo nawet jeden i dało by się wykorzystać oryginalny kod sterujący wentylatorem. Potrzebny jest tylko układzik zmieniający polaryzację zasilania na przekaźnikach. Sterowanie było by oczywiście tylko zamknięta/otwarta, regulacja krańcówkami.

    sterowanie dopływem powietrza pieca co silnikiem krokowym

    Mechanicznie najlepiej rozwiązać to na przekładni ślimakowej (warto przeszukać stare magnetowidy itp), napędzającej wałek - śrubę z gwintem np. M6, a do poruszającej się po nim nakrętki dolutować np. jakieś uszko do przegubu.
  • Poziom 10  
    witam .
    Tak też uczyniłem wykorzystałem sterowanie od wentylatora przez przekaźniczek układem- sterownikiem silnika krokowego jak wyżej wspomniałem. Steruje dół góra. Co do dc to nie jest to takie całkiem proste - trzeba to zrobić przez przekładnie najlepiej ślimakowa wtedy jest mnie kółek zębatych, otym też pomyślałem . Natomiast dla silniczka krokowego jak wszystko jest dopasowane - niema takiej konieczności ( nie traci się na mocy przy małych obrotach ) I to właśnie już dzisiaj zamontowałem i jest obiektem testów jak od godz 13.00 do chwili obecnej sprawdza się .układ z fotki nie jest zbyt super zmontowany - jak przejdzie testy będą poprawki i obudowa.zamiast przekaźniczka trzeba będzie wstawić tranzystory aby nie obciążać wyjścia atmegi8. na razie działa
    A teraz co dopisania sterowania silnikiem w podanym wyżej kodzie to się zgadzam tylko że nie jestem programistą , a dopiero zaczynam i zbieram materiały -proste sprawy nie ma problemu ale coś więce to problem no i czasowa jest to zabawa. sam błedny kod na ATTine 2313 zajął mi 1,5 tygonia i okazoło się mały błąb albo nie dopisanie i już jest ok .

    jak ten kod wstawić do kodu wyżej :
    Code:

    '          Sterownik silnika krokowego
    '         Copyright Piotr Gorecki 2002
    ' -------------------------------------------
            $regfile = "ATtiny2313.dat"
            $crystal = 4000000
    Dim Praca As Bit , Przyciski As Byte , Licznik As Byte , Predkosc As Byte
    Config Portb = &B00001111                                   'młodsze-wyjścia do silnika, starsze-wejscia DIP-switch S1
    Config Portd = &B10000000                                   ' 2 najmłodsze bity - wejscie przycisków,
    ' 4 następne -predkosc z DIP-switch'a S2 ostatni bit - wyjście=brzęczyk piezo
    Config Timer0 = Timer , Prescale = 64
    Enable Interrupts : Enable Ovf0
    Portb = &B11110000                                          'na początek wyłącza silnik i podciąga wejscia S1
    Portd = 255                                                 'włącza rezyst podciągajace na wejsciach PD.0, PD.5 i wyłacza brzęczyk

    On Timer0 Podprogramik


    Do : Loop : End                                             'pusta pętla

    Podprogramik:
    Przyciski = Pind And 3                                      'uzyskujemy stan przycisków - dwa najmłodsze bajty
    Predkosc = Pind And &B0111100                               'i stan czterech bitów DIP-switcha S2
    Shift Predkosc , Left , 2                                   'przesuwamy to na najstarsze pozycje
    Predkosc = Predkosc Or 15                                   'a do 4 młodszych wpisujemy jedynki
    Timer0 = Predkosc                                           'ładujemy tę wartość do Timera0, zmieniając czas do najbliższego przepełnienia
    Select Case Przyciski                                       'sprawdzamy stanu przycisków
       Case 0:                                                  'gdy naciśnięte oba przyciski włącza brzęczyk piezo
          Praca = 0 : Reset Portd.6                             'włączony między PD.6 a plus zasilania
       Case 1:
          Praca = 1 : Incr Licznik                              ' naciśnięty S3 - w górę
       Case 2:
          Praca = 1 : Decr Licznik                              ' naciśnięty S4 - w dół
       Case 3:
          Praca = 0 : Set Portd.6                               ' w spoczynku wyłącz brzęczyk
    End Select
    Licznik = Licznik And 3                                     'zeruje 6 zbędnych bitów ośmiobitowego licznika
    If Praca = 1 Then
    Portb = Lookup(licznik , Tabela)
    Else
    Wylacz:
    Stop Timer1
    Portb = 0                                                   'wyłącz zasilanie tranzystorów i silnika

    End If


    tu są wyłączniki krancowe.

    Return


    Dodano po 22 [minuty]:

    a to fotki

    sterowanie dopływem powietrza pieca co silnikiem krokowym

    Dodano po 3 [minuty]:

    Taką klapka steruje

    sterowanie dopływem powietrza pieca co silnikiem krokowym

    Dodano po 6 [minuty]:

    a tak wygląda po zamontowaniu

    sterowanie dopływem powietrza pieca co silnikiem krokowym

    Dodano po 2 [minuty]:

    a to orginalny siłownik z bipolarnym silniczkiem

    sterowanie dopływem powietrza pieca co silnikiem krokowym
  • Poziom 19  
    Możesz tez zastosować małe serwo modelarskie (trzeba usunąć blokadę ze środka i będzie wykonywać pełne obroty). Posiada ono spory moment i moc bo ma już w sobie przekładnie. Przekaźniki do µP zawsze podłącza się przez dodatkowy tranzystor. Co do krokowca i krańcówek to tylko komplikuje sprawę - w końcu możesz ustawić określoną liczbę kroków do granicznego otwarcia i zamknięcia. Programowo to chyba najlepiej rozwiązać stosując pętle for wykonywaną tyle razy ile jest kroków. Najlepiej zastosować jakieś flagi sterujące procedurami otwarcia/zamknięcia.
  • Poziom 10  
    właśnie o coś takiego mi chodzi bez krańcówki ,tylko programowo obliczając na ile kroków na się zamknąć lub otworzyć zależnie od temperatury ustawionej. O servie myslałem nawet mam , lecz bardziej przypadł mi do wyobrażni silnik krokowy i programowe sterowanie , moze nie koniecznie atmegą 8. Lecz to jest to -już przy atmega 32, można dodac jeszcze wentylator i pompe, włanczane jeśli ktoś posiada lub zamierza zamontować( możliwość wyłączenia lub właczenia z klawiatury bez konieczności ponownego programowania).
  • Poziom 38  
    Jakąś krańcówkę trzeba dać- dla ustalenia pozycji początkowej po włączeniu urządzenia, po zaniku zasilania czy po resecie.
  • Poziom 10  
    Tak to może być problem przy zaniku napiecia .A może dodać zelowy akumulator.
  • Poziom 38  
    Zawsze trzeba dać jakąś krańcówkę.
    W końcu nawet po pierwszym podłączeniu jakąś pozycję początkową musi mieć.
  • Poziom 10  
    Tak masz rację aby ustalić początkową pozycję powinna być krąńcówka . wydawało mi się że nie będzie potrzebna ale sprawdziłem kilka orginalnych projektów opartych na silniku krokowym i niestety są optyczne ale są w jednym położeniu. i tu juz prawdopodobnie atmeg 8 jest za mała chciaż jak pozbyć się diody od pompy ?to jest miejsce -wykorzystanie pinów , lecz program to............