logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

sterowanie dopływem powietrza pieca co silnikiem krokowym

potjan 26 Sty 2011 16:54 6304 17
  • #1 9060013
    potjan
    Poziom 11  
    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:
    $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!
  • #2 9094009
    IMEX
    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
  • #3 9118533
    potjan
    Poziom 11  
    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.
  • #5 9121974
    potjan
    Poziom 11  
    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 .
  • #6 9132856
    potjan
    Poziom 11  
    Obrazki wysłałem ale coś nie tak .
    jak to zrobić zeby byłu w tym temacie ?
  • #8 9134377
    janbernat
    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:
    
    '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.
  • #9 9137918
    potjan
    Poziom 11  
    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.
  • #10 9138039
    janbernat
    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.
  • #11 9140485
    j4rek
    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.
  • #12 9142778
    potjan
    Poziom 11  
    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 :
    
    '          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
  • #13 9147479
    j4rek
    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.
  • #14 9160724
    potjan
    Poziom 11  
    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).
  • #15 9160897
    janbernat
    Poziom 38  
    Jakąś krańcówkę trzeba dać- dla ustalenia pozycji początkowej po włączeniu urządzenia, po zaniku zasilania czy po resecie.
  • #16 9161519
    potjan
    Poziom 11  
    Tak to może być problem przy zaniku napiecia .A może dodać zelowy akumulator.
  • #17 9161818
    janbernat
    Poziom 38  
    Zawsze trzeba dać jakąś krańcówkę.
    W końcu nawet po pierwszym podłączeniu jakąś pozycję początkową musi mieć.
  • #18 9169772
    potjan
    Poziom 11  
    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............
REKLAMA