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

[ATtiny2313][Bascom] Sterowanie silnika pwm - działa.

janbernat 22 Paź 2008 00:32 5789 3
  • #1 22 Paź 2008 00:32
    janbernat
    Poziom 38  

    Code:

    '$sim
    'to jest programik do sterowania silniczkiem w obu kierunkach
    'za pomocą sygnału do sterowania serwa w odbiorniku zdalnego sterowania.
    'sygał odbierany przez wejście odwracające komparatora analogowego z progiem 1.1V
    'Sterowniki do silników modeli samolotów,chociaż są lekkie, nie mają zwykle możliwości zmiany
    'kierunku obrotów silnika.(I tylko dlatego modele samolotów nie mogą latać do tyłu...)
    'no może śmigłowiec...
    'Ale w przypadku modelu poduszkowca jest to bardzo wskazane.
    'Sterownik MUSI być lekki.
    'programik ten steruje mostkiem z si4532 x2 (SMD)-3.6A z dodatkiem tranzystorów(SMD) itp.
    'w TME są lepsze -do 7A
    'oczywiście attiny 2313 też SMD.
    'zasilacz ldo normalny (nie mam smd)
    'mostek ściągnięty z
    'http://www.cadvision.com/blanchas/hexfet/np-s.htm
    'żeby potem nie było że kradnę własność intelektualną.
    'malutka płytka- jak zwalczę eagla to zrobię.
    'A może KTOŚ to zrobi?
    'no ale eagla i tak muszę opanować.
    'czekam na KRYTYCZNE uwagi.

    $crystal = 12000000
    $regfile = "attiny2313.dat"

    Config Portb.2 = Output                           'to jest wyjście pwm0, to raczej być musi
    Config Portd.5 = Output                           'to jest wyjście pwm1, to raczej być musi
    Config Portb.1 = Input                            'to jest wejście komparatora analogowego, to raczej być musi
    Portb.1 = 0                                       'a to nie wiem czy być musi

    Dim Czas As Word
    Dim Czas_temp As Word
    Dim Czas_p As Word
    Dim Czas_obl As Word
    Dim Czas_posr As Word

    Const Czas_neutr = 17700                          'powinno być 18000 dla 1.5 ms, ale tu tak jest
    Const Czas_neutr_min = Czas_neutr - 300           'to jest czas(obrót potencjometru) dla jakiego pwm0 i pwm1 są=0.Można to zmienić
    Const Czas_neutr_max = Czas_neutr + 300
    Const Czas_max = Czas_neutr + 6000                'to dla 2ms
    Const Czas_min = Czas_neutr - 6000                ' to dla 1ms
    Const Czas_0 = 30                                 'to jest pwm_min, poniżej którego TEN silnik się nie kręci (można zmienić)

    Set Tccr0b.cs00                                   'start timer0




    Set Tccr0a.wgm00                                  'mod pwm prawdłowej częstotliwości
    Set Tccr0a.com0a1                                 'wyjście pwm1 enable
    Set Tccr0a.com0b1                                 'wyjście pwm2 enable

    Set Acsr.acbg                                     'próg napięcia na wejsciu + komparatora=1.1V
    Set Acsr.acie                                     'zezw. na przerw. komparatora enable
    Reset Acsr.acis0                                  'przerwanie komparatora na obu zboczach
    Reset Acsr.acis1

    Reset Tccr1b.cs10                                 'timer1 praca jako timer, prescaler=1, licznik stop
    Reset Tccr1b.cs11
    Reset Tccr1b.cs12

    Enable Interrupts

    On Aci _pomiar                                    'jak komparator wykryje zmianę napięcia to sprawdż co się stało


    Do

    If Czas <> Czas_temp Then                         'jak obróciłeś potencjometrem wnadajniku, to...

             If Czas < Czas_min Then Czas = Czas_min
             If Czas > Czas_max Then Czas = Czas_max

            If Czas > Czas_min And Czas < Czas_neutr_min Then
             Czas_obl = Czas_neutr_min - Czas
             Czas_posr = Czas_obl \ 25                'tego nie ma w obliczeniach stałych, można to poprawić
             Czas_p = Czas_0 + Czas_posr
                If Czas_p > 255 Then Czas_p = 255     'no bo jak timer się przekręci.. nie sprawdziłem
             Ocr0b = Czas_p
             Ocr0a = 0
            End If

            If Czas > Czas_neutr_max And Czas < Czas_max Then
             Czas_obl = Czas - Czas_neutr_max
             Czas_posr = Czas_obl \ 25                'tego nie ma w obliczeniach stałych, można to poprawić
                If Czas_p > 255 Then Czas_p = 255     'no bo jak timer się przekręci.. nie sprawdziłem
             Czas_p = Czas_0 + Czas_posr
             Ocr0a = Czas_p
             Ocr0b = 0
            End If

            If Czas > Czas_neutr_min And Czas < Czas_neutr_max Then
             Ocr0a = 0
             Ocr0b = 0
            End If

       Czas = Czas_temp
    End If

    Loop

     _pomiar:                                           'co się stało?
                                                       'stan na wyjściu komparatora się zmienił z 0 na 1 lub z 1na 0
                                                       'jeśli sygnał na wejściu komparatora wzrósł powyżej 1.1V

    If Acsr.aco = 0 Then                              'to wyjscie komparatora(ACO) jest=0
        Set Tccr1b.cs10                                'start timer1
        Else                                           'a jak nie
        Czas = Timer1                                 'odczytaj czas (liczbę zliczonych impulsów) z timer1
        Reset Tccr1b.cs10                             'zatrzymaj licznik
        Timer1 = 0                                    'wyzeruj licznik(żeby po następnej zmianie wyjścia komparatora mógł liczyć od początku)
    End If

    Return


    Poprawiłem tytuł i znaczniki. [c_p]

    0 3
  • #3 28 Paź 2008 22:36
    janbernat
    Poziom 38  

    dzięki za zmianę na kod.(nie potrafię tego dobrze zrobić)
    Ale znowu jest jako tekst.
    AT90S2313 zmieniłem na ATtiny 2313 w bibliotece Eagle'a.(.lbr)
    Zrobiłem schemat w Eagl'u.
    jak to wysłać?
    Ale jeszcze nie .brd(brd jest do opracowania).
    Jak wysłać .lbr i .sch na forum nie wiem.
    CO TO SĄ PUNKTY NIE WIEM!

    0
  • #4 28 Paź 2008 22:44
    dawid512
    Poziom 32  

    Zainwestować w PDFcreator który zrobi ci wirtualna drukarkę i wyniku tego otrzymasz plik w pdf-ie.

    0