Pytanie o kod


Witam

Chciałbym sie dowiedziec czy ten kod będzie działał tak jak należy czyli:

kiedy wcisne przycisk 1 (Sw1) to silnik krokowy bedzie otrzymywał prze tranzystor oczywiscie stan niski co 100ms na inną cewkę co będzie oczywiście powodowało że bedzie się kręcil np. w prawo i co 300 ms będzie sie zapalała dioda led 1 (Ll)
kiedy wcisnę przycisk 2 (Sw2) to będzie sie działo to samo tylko że silnik poleci z ta sama szybkoscią w druga strone i zapali sie druga dioda (Lp co 300ms)

$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = Output
        Portb = &B11111111
Config Portd = Input
        Portd = &B1111111
 
Sw1 Alias Pind.1
Sw2 Alias Pind.2
C1 Alias Portb.1
C2 Alias Portb.2
C3 Alias Portb.3
Ll Alias Portb.4
Lp Alias Portb.5
 
Do
  Do
  If Sw1 = 0 Then
  Ll = 0
  Waitms 100
  C1 = 0
  C2 = 1
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 0
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 1
  C3 = 0
  End If
  Loop
  Do
  If Sw2 = 0 Then
  Lp = 0
  Waitms 100
  C1 = 1
  C2 = 1
  C3 = 0
  Waitms 100
  C1 = 1
  C2 = 0
  C3 = 1
  Waitms 100
  C1 = 0
  C2 = 1
  C3 = 1
  End If
  Loop
Loop




Portret użytkownika mirley

Re: Kod

drugie pętle do loop wewnątrz tej głównej sa niepoprawne.... nigdy nie wykona się ta druga pętla do loop bo program będzie krążył cały czas w tej pierwszej. Poza trym nie wiem jakim silnikiem chcesz sterować co ma 3 cewki. Może czegoś nie wiem ale takiego jeszcze nie widziałem.

Poza tym to trzeba sprawdzić w praktyce, z kodu wynika że dioda led Ll zawsze będzie się świeciła, stan 0 będzie zawsze

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

Co do diody to jest to bez

Co do diody to jest to bez znaczenia chcialem zyby mrugla kiedy silnik wykona jeden obrót ale jesli tak nie bedzie to to nie bedzie problem.

Co do sterowania to jak najlepiej zorganizowac sterowanie silnikiem krokowym.
Co do cewek to sie pomylilem chodzilo o 6 cewek.
Jestem początkujący w BASCOM.

Portret użytkownika mirley

Re: Silnik krokowy

Poczytaj najpierw informacje o silnikach krokowych http://www.wobit.com.pl/download/pdf/silniki/podstawowe%20informacje.pdf dodatkowo był jeszcze cykl artykułów w EdW na ten temat. Ile twój silnik ma wyprowadzeń? Może chodziło Ci o 6 wyprowadzeń? skąd masz taki silnik? daj link do opisu lub napisz gdzie kupiłeś lub z czego wymontowałeś? Od typu silnika zależy jego sterowanie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

Moj silnik ma 4 wyprowadzenia

Moj silnik ma 4 wyprowadzenia (1 minus i 3 do cewek)dal mi go kumpel ale nie pamieta z czego to silnik. Ma ok. 2,5-3cm. średnicy i ok 3 dlugosci

Portret użytkownika rafliczek22

czy taki kod bedzie

czy taki kod bedzie poprawny

$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portb = Output
        Portb = &B11111111
Config Portd = Input
        Portd = &B1111111
 
Sw1 Alias Pind.1
Sw2 Alias Pind.2
C1 Alias Portb.1
C2 Alias Portb.2
C3 Alias Portb.3
Ll Alias Portb.4
Lp Alias Portb.5
 
Enable Interrupts
 
Do
 
   If Reset Sw1 Then : Waitms 100 : Reset C1 : Set C2 : Set C3 : Waitms 100 : Set C1 : Reset C2 : Set C3 : Waitms 100 : Set C1 : Set C2 : Reset C3 : End If
 
   If Reset Sw2 Then : Waitms 100 : Set C1 : Set C2 : Reset C3 : Waitms 100 : Set C1 : Reset C2 : Set C3 : Waitms 100 : Reset C1 : Set C2 : Set C3 : End If
 
   If Reset Sw1 Then : Waitms 300 : Toggle Ll : End If
 
   If Reset Sw2 Then : Waitms 300 : Toggle Lp : End If
Loop

Portret użytkownika mirley

Re: Silnik krokowy

Po pierwsze zacznij od programu, który w pętli głównej ma:

Waitms 100
  C1 = 0
  C2 = 1
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 0
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 1
  C3 = 0

Po co próbujesz oprogramować przyciski diody i wszystko na raz jak nawet jedna z tych rzeczy nie chce Ci działać. Trzeba zrobić to pokolei. Poza tym na waitach możesz napisać sobie taki programik jak dałem Ci wyżej. Cokolwiek innego chcesz dodać to będzie do kitu. każdy wait wstrzymuje działanie programu i jak dioda Będzie Ci zaświecać to silnik bedzie czekał. Trzeba to zrobić na timerach, pomogę ci to napisać ale najpierw musisz mi powiedzieć więcej na temat tego silnika.

Po pierwsze czy mierzyłeś miernikiem wyprowadzenia silnika i faktycznie są to trzy cewki zwarte w jednym punkcie a nie np dwie oddzielne cewki? Czy podłaczałeś silnik do napięcia i pokolei za pomocą przewodu (dotykając do wyprowadzeń silnika)podawałeś napięcia na cewki aby sprawdzić czy silnik się przekręca?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

Quote:Czy podłaczałeś silnik

Quote:
Czy podłaczałeś silnik do napięcia i pokolei za pomocą przewodu (dotykając do wyprowadzeń silnika)podawałeś napięcia na cewki aby sprawdzić czy silnik się przekręca?
- TAK

A jesli chodzi o diode to mogę ją sobie odpuscic. A jak by to zrealizowac na timerach i dlaczego tak nie moze byc???

Portret użytkownika mirley

Re: Silnik Krokowy

Na początek może być za pomocą wait, ale jeśli będziesz chciał uzyskać jakąkolwiek precyzję lub dołożyć do programu cokolwiek innego, np odczytywanie stanu klawiatury, która coś robi, sprawdzanie stanów na innych pinach i wyświetlanie czegoś to będzie problem ....

Na początek uruchom program w wersji najprostszej tak jak opisałem wyżej, potem dodasz sprawdzanie przycisku i zobaczysz czy działa. Na koniec dodasz dwa przyciski z dwoma kierunkami obrotu:

Przyciski powinny działać (zwieranie do masy) w Do loop tak jak pisałeś wcześniej:

if Sw1 = 0 then
  C1 = 0
  C2 = 1
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 0
  C3 = 1
  Waitms 100
  C1 = 1
  C2 = 1
  C3 = 0
  Waitms 100
end if

Pamiętaj że przy takim zapisie waitms 100 jeden krok silnika trwa długo w zależności od tego ile jest kroków na obrót da Ci to jeden obrót na kilka - kilkanaście sekund

Tak na marginesie nikt nie powiedział że na waitach nie może być, tylko pisząc coś odrobine bardziej złożonego zobaczysz sam że jest to niewygodne i dlatego od razu mówię że trzeba się przyzwyczajać do timerów i przerwań.

Narazie wypróbuj te różne fragmenty programu i napisz czy się to wogóle kręci, potem możesz zmniejszyć waitms 100 na 50 i zobaczyc czy przyspieszył dwukrotnie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

Witam Zrobiłem to i

Witam

Zrobiłem to i podłaczyłęm silnik i wszystko ladnie pykało tylko potem dałem 50ms i silnik wydawał sie krecic szybciej i płynniej na 100ms "skakał".

Teraz chciałbym przerobic kod zeby sterowac szybkością tylko nie wiem jak wyelminować to "skakanie".
I jak zrealizowac timery ponieważ na razie ich za bardzo nie rozumiem..

Portret użytkownika mirley

Re: Silnik krokowy

Silnik krokowy zawsze będzie skakał, czym dasz mniejsze opóźnienie tym wydaje się że płynniej działa, bo nie widzisz kroków. Możesz jeszcze spróbować sterowania półkrokowego, gdzie zasilane są jedna lub dwie cewki naraz. To znaczy zasilana jest pierwsza cewka, potem pierwsza i druga potem druga, druga i trzecia, trzecia, trzecia i pierwsza, pierwsza..... itd. Nie wiem czy dla twojego silnika takie sterowanie będzie dobre ale warto spróbować.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

Zrobilem tak jak powiedziales

Zrobilem tak jak powiedziales i silnik dzialal bardzo dobrze, z dioda sobie tez poradzilem w ten sposob ze gdy na c1 jest 0 wtydy zapala dioda, na razie dla moich potrzeb i tak to wystarczy.

Dzieki za wszystkie posty mirley.

Portret użytkownika mirley

Re: Silnik krokowy

Pamiętaj tylko że jeśli idą dwie cewki naraz to pobór prądu jest większy, ale jednocześnie silnik może więcej uciągnąć, ma większy moment obrotowy. Różnica jest znaczna... a przynajmniej w takich silnikach z czterema cewkami.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kw

Witam. Przystosowałem kod z

Witam.
Przystosowałem kod z pierwszego postu do swoich potrzeb. Tyle ,że potrzebuję aby silnik zatrzymywał się kiedy puszczę Sw1/Sw2 i ruszał dalej od tego miejsca. Da się w prosty sposób coś dopisać czy trzeba napisać program bardziej skomplikowany od nowa? Szukałem w necie ale nie znalazłem nic interesującego , a samodzielne próby dopisania kodu wywalały błędy.

Portret użytkownika kw

Prawie mi się udało. Oto

Prawie mi się udało. Oto fragment kodu

Dim Sw1 As Byte
 
Sw1 = 0
 
Do
   If S1 = 1 And S2 = 1 Then
     Portb = &B00000000
      End If
 
   If S2 = 0 Then
     Sw1 = Sw1 - 1
      End If
 
   If S1 = 0 Then
      Sw1 = Sw1 + 1
       End If
 
   If Sw1 >= 8 Then
      Sw1 = 0
       End If
If Sw1 = 1 Then
P1 = 1                                                      '1
P2 = 1
A = 1
B = 0
C = 1
D = 0
Waitms 30
End If
.
.
.......

Kręci w jedną stronę jak trzeba, a w drugą cofa tylko do momentu gdy Sw1=0 i się zatrzymuje. Próbowałem różnych kombinacji ale nie działa. Jaki warunek trzeba jeszcze dopisać? Czy robić to przez polecenie case ?

Portret użytkownika mirley

Re: KOD

Sprawdź tak:

Do
   If S1 = 1 And S2 = 1 Then
     Portb = &B00000000
   End If
 
   If S2 = 0 Then
     Sw1 = Sw1 - 1
     if Sw1 = 255 Then Sw1 = 7 
   End If
 
   If S1 = 0 Then
      Sw1 = Sw1 + 1
      if Sw1 = 8 Then Sw1 = 0
   End If
 
If Sw1 = 1 Then
P1 = 1                                                      '1
P2 = 1
A = 1
B = 0
C = 1
D = 0
Waitms 30
End If
.
.
.......

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kw

Pomogło. Mam jeszcze jakieś

Pomogło. Mam jeszcze jakieś skoki i brzęczy na postoju ale najważniejsze że działa tak jak chciałem. Spróbuje jeszcze dokleić impulsator bo sterowanie potencjometrem to dla mnie za wiele. Obecnie wygląda tak

Dim Sw1 As Byte
 Sw1 = 0
Do
   If S1 = 1 And S2 = 1 Then
   P1 = 0
    P2 = 0
     A = 0
      B = 0
       C = 0
        D = 0
   End If
 
   If S2 = 0 Then
    Waitms 10
     Sw1 = Sw1 - 1
      If Sw1 = 255 Then
       Sw1 = 15
   End If
    End If
    If S1 = 0 Then
     Waitms 10
      Sw1 = Sw1 + 1
  End If
 
   If Sw1 = 16 Then
  Sw1 = 0
  End If

Dziękuję za podpowiedź.