Sterownik silonika krokowego na ATTiny2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
tajfun311
-
Posty: 2
Rejestracja: 30 sie 2008, 9:40
Lokalizacja: Tychy
Kontakt:

Sterownik silonika krokowego na ATTiny2313

Post autor: tajfun311 » 04 wrz 2008, 15:08

Witam Wszystkich!

Jestem nowy na forum i zwracam się z gorącą prośbą o pomoc.
Dopiero zaczynam zabawę z mikroprocesorami, choć w moim wieku już trudniej się uczyć.
Przetestowałem już część oślej łączki, a w tej chwili próbuję poskładać program sterownika silnika krokowego na ATTiny2313. Właśnie jest teraz potrzebny. Napisałem taki pierwszy programik (trochę nie tak jak się pisze z dobrą znajomością języków programowania, ale działa. Silnik pracuje tylko podczas trzymania wciśniętego przycisku. Tak ma być. Ale jest jeszcze pewna niedoróbka, a mianowicie silnik nie zatrzymuje się zaraz po zwolnieniu przycisku tylko po zakończeniu pętli. Tutaj przydała by się poprawka. Druga sprawa to: potrzeba dopisać część sterowania szybkością silnika, ale z tym nie mogę sobie poradzić. Bardzo proszę o pomoc. Dołączam to co udało mi się stworzyć, proszę ewentualnie o dopisanie tego co trzeba wstawić. Silnik powinien mieć regulację skokową w 4-5 pozycjach na dodatkowych przyciskach w górę i w dół.

Kod: Zaznacz cały

Rem          sterowanie silnikiem krokowym unipolar
$regfile = "attiny2313.dat"
$crystal = 4000000
Config Portb = &B11111111               
       Portb = &B11111111                  
Config Portd = &B1110000                
       Portd = &B1110111                    
Dim X As Byte
X = 50

Do                                                     
  If Pind.0 = 0 Then                            
  Portb.2 = 0 : Waitms X : Portb.2 = 1
  Portb.3 = 0 : Waitms X : Portb.3 = 1  
  Portb.4 = 0 : Waitms X : Portb.4 = 1  
  Portb.6 = 0 : Waitms X : Portb.6 = 1
 End If

 If Pind.1 = 0 Then                             
 Portb.6 = 0 : Waitms X : Portb.6 = 1
 Portb.4 = 0 : Waitms X : Portb.4 = 1   
 Portb.3 = 0 : Waitms X : Portb.3 = 1  
 Portb.2 = 0 : Waitms X : Portb.2 = 1
 End If
Loop
End

Do sterowania prędkością należałoby wykorzystać PinD.2 i PinD.3

Pozdrowienia dla wszystkich!!!


Proszę używać tagów [code]/[/code]. marcing
Ostatnio zmieniony 04 wrz 2008, 15:51 przez tajfun311, łącznie zmieniany 1 raz.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 04 wrz 2008, 15:13

Aby sterować szybkością musiałbyś zmieniać wartość zmiennej X. Większa wartość to szybciej, mniejsza wolniej. Co do dokończenia pętli to ja bym ci proponował utworzyć tablicę z kolejnymi krokami i jeżeli trzymasz przyciśnięty przycisk to pobiera kolejną wartość z tablicy a jak przycisk puszczony to nic nie robi. Kierunek obrotów wtedy będzie się zmieniał w ten sposób że jeżeli każesz mu do przodu to pobiera wartość z komórka+1 a jak każesz do tyłu to komórka-1

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 04 wrz 2008, 16:15

Można by też posłużyć się przerwaniami- ja próbowałem obie te metody i ta z przerwaniem jest o niebo lepsza. Choć tu założenia są inne wyniki tez uzyskasz lepsze jeśli zastosujesz przerwania.

I podstawa- podaj więcej szczegółów n/t sterownika- końcówki mocy itp.

tajfun311
-
Posty: 2
Rejestracja: 30 sie 2008, 9:40
Lokalizacja: Tychy
Kontakt:

Post autor: tajfun311 » 04 wrz 2008, 16:36

Przepraszam że nie wstawiłem kodu do Tagów.!!
Oczywiście, wiem że należy zwiększać wartość zmiennej X, ale nie wiem jak i gdzie to wstawić. Jak tworzyć tabelę też nie wiem. Jestem jeszcze za słaby w te klocki. Jeżeli mogę proszę, dopiszcie co i jak trzeba. Ja będę miał sposób do analizy jak i skąd co się bierze i będę bardzo wdzięczny. A co do końcówki mocy to będzie na ULN2803.

Z góry dziękuję za dalszą pomoc!!!!!

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 04 wrz 2008, 18:21

Skoro ULN2803 to zapewne masz silnik unipolarny.
Zerknij do elportalu:
:arrow:

https://elportal.pl/pdf/k10/55_06.pdf

Tyle tylko, że Ty musisz skorzystać z przerwań lub jak pisze Kolega powyżej z tablicy z której będziesz pobierał -warunkowo- kolejne elementy za pomocą polecenia LOOKUP

ODPOWIEDZ