Strona Główna CNC FORUM
Amatorskie maszyny CNC

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum
Akcesoria CNC

Poprzedni temat «» Następny temat
Sterowniki na procesorach AVR
Autor Wiadomość
bogus105 
Znawca tematu



Pomógł: 1 raz
Dołączył: 24 Gru 2005
Posty: 95
Skąd: Bielsko-Biala
Wysłany: 2007-02-20, 20:15   

drodzy koledzy, a może by któryś z was wrzucił na forum jakiś algorytm, który co nieco przybliży budowę własnego programu dodrivera? sam od 5 lat (totalny brak miejsca na zabawę elektroniką:() nie bawiłem się programowaniem, wcześniej Atmele na asemblerku teraz mam troszkę więcej czasu i wróciłbym do praogramowania, ale mam już plecy niezłe przez tąpauzę...
no to jak? PAINTBRUSH i skrobnijcie cosik...
jak wogóle rozwiązać sterowanie dwoma krokówkami na podstawie HPGL? chodzi mi o rozwiązanie problemu przybliżania podczas obliczania ścieżki (bo rozdzielczość maszyny jest skończona a i programowa także) na podstawie współrzędnych dwóch punków?
chcę zrobić taki sterwniczek który będzie w stanie funkcjonować jak 'drukarka' - czyli podłączony do kompa via COM lub LPT będzie sterował XY plus pisak

dzięki za sugestie i uwagi co jak SIĘ ROBI:)
 
 
x 
Specjalista poziom 1



Pomógł: 9 razy
Dołączył: 29 Mar 2006
Posty: 209
Skąd: okolice Warszawy
Wysłany: 2007-02-20, 22:44   

A nie stosuje się zwykłych algorytmów do rysowania odcinka? Tylko z uwzględnieniem zwalniania i przyśpieszania na końcach. Jest szybki algorytm Smith-a z obliczeniami wyłącznie na liczbach całkowitych.
_________________
"Później doświadczyłem jeszcze jednego zjawiska: gdzieś w połowie roboty okazuje się, że mieliśmy pomysł tylko na tę połowę roboty." - Adam Cebula (wnioski po budowie gołębnika)
 
 
KrissMon 
Nowy użytkownik


Dołączył: 21 Lut 2007
Posty: 3
Skąd: Kalisz
Wysłany: 2007-02-21, 17:58   

Witam.
Chciałem się przywitać (pierwszy post na forum) i zapytać.

Co właściwie powienien robić taki program umieszczony w tym mikrokontrolerze (np. tiny2313). Chodzi tylko o podział kroków??

Proszę o jakiś algorytm lub jakieś linki jeżeli to możliwe
 
 
markcomp77 
Specjalista poziom 3



Pomógł: 43 razy
Dołączył: 18 Wrz 2004
Posty: 1967
Skąd: k/w-wy
Wysłany: 2007-02-21, 21:34   

KrissMon napisał/a:
Proszę o jakiś algorytm lub jakieś linki jeżeli to możliwe


zanim poda się algorytm - lepiej zastanowić się nad zadaniami jakie chcemy realizować...

zadania do realizacji:

1. ustawianie właściwego prądu na cewkach silnika w reakcji na STEP/DIR
i monitorowanie ENABLE
2. zabezpieczenia realizowane programowo
3. morfing kroków
4. kompensacja rezonansu
5. redukcja prądu cewek przy bezczynności
6. monożenie kroku
7. ew. obsługa enkodera
8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)

zapraszam do tworzenia listy dobrych życzeń ;)
_________________
z poważaniem
MARKcomp77
 
 
 
jarekk 
Specjalista poziom 3


Pomógł: 21 razy
Dołączył: 17 Mar 2006
Posty: 638
Skąd: Gdańsk
Wysłany: 2007-02-21, 21:57   

KrissMon napisał/a:
Co właściwie powienien robić taki program umieszczony w tym mikrokontrolerze (np. tiny2313). Chodzi tylko o podział kroków??

Proszę o jakiś algorytm lub jakieś linki jeżeli to możliwe


Zapraszam do obejrzenia programu z mojego kontrolera (Mega88):

Zawiera w wersji podstawowej ( steper_simple):
1. ustawianie właściwego prądu na cewkach silnika w reakcji na STEP/DIR
i monitorowanie ENABLE
2. kompensacja rezonansu ( przez mikrokrok i decay control)
3. redukcja prądu cewek przy bezczynności

W wersji pełenej ( jeszcze nie gotowa ) dochodzi:
1. Mnożenie kroków
2. Dynamiczna zmiana mikrokroku w czasie pracy ( aby zapewnić jak największą szybkość pracy)

Główna pętla programu (wersja podstawowa -aby nie zaciemniać):

Kod:


.include "m88def.inc"                  ; Processor definitions   
.include "system_macros.inc"            ; Register allocation, processor specific
.include "rom_table_init_simple.gen"  ; Created automatically   
.include "stepper_cfg_simple.inc"      ; Configuration for specific motor   
.include "pin_macros.inc"              ; I/O definitions   
.include "bridge_macros.inc"            ; Bridge control   
.include "curr_reduction.inc"           ; Current reduction
.include "decay_macros.inc"                ; Decay control algorithms
.include "table_macros.inc"                ; ROM & RAM table processing   
.include "da_macros.inc"                ; D/A converter support   



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;************************ Initialization ****************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;** Watchdog initialization

;    WATCHDOG_INIT_SLOW
   
;** Stack initialization

    STACK_INIT

;** I/O initilization

    CONFIGURE_IO_PORTS
    BRIDGE_A_DISABLE_FAST
    BRIDGE_B_DISABLE_FAST

;** SPI initialization

    SPI_INITIALIZE
   
;** Timer initialization for idle timeout

    CURR_REDUCTION_INIT
    CLEAR_CURR_REDUCTION_TIMEOUT

;** Initialize step configuration

    ROM_TABLE_INIT

;** Initialize decay control

    CMP_DECAY_INIT
    CMP_DECAY_PREPARE_NEXT

;** Change watchdog timeout from init mode to operational mode

;    WATCHDOG_INIT_FAST

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; *************** Microstep common control  loop ********************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main_loop:
   
    wdr

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 'Enable' signal processing
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    CHECK_ENABLE
    cpi temp,0
    brne enable_is_high       

enable_is_low:
    ; check for change from 'enable' to 'disable'
    clr temp
    cp ENABLE_MODE,temp
    breq main_loop       
    ; Ok, this is a change from 'enable' to 'disable'
    ; We need to disable bridge control
    ; and setup D/A converter to 'adjust' mode
    BRIDGE_A_DISABLE_FAST       
    BRIDGE_B_DISABLE_FAST
    SPI_TRANSFER_ADJUST

    rjmp main_loop           

enable_is_high:
    ; check for change from 'disable' to 'enable'
    clr temp
    cp  ENABLE_MODE,temp
    brne enable_continue

    ; Ok, this is a change from 'disable' to 'enable'
    ; We need to update D/A converter (from 'adjust' mode )
    ; and reenable bridges

    SPI_TRANSFER
    BRIDGE_A_ENABLE           
    BRIDGE_B_ENABLE       
    inc ENABLE_MODE   

enable_continue:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Check if current reduction should be applied
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
    CHECK_CURR_REDUCTION
    cpi temp,0
    breq no_current_reduction
    SPI_TRANSFER                ; execute current reduction

no_current_reduction:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Process comparator inputs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    CMP_DECAY_CHECK_A
    CMP_DECAY_CHECK_B

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Check if next step should be executed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    CHECK_STEP
    cpi temp,0
    brne step_to_make

    rjmp main_loop; no next step (to large distance for relative branch)



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;******************* Step initialization    *************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

step_to_make:

    CLEAR_CURR_REDUCTION_TIMEOUT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; Next step should be executed - load new step data

    ROM_TABLE_STEP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; Execute transfer to D/A converter

    SPI_TRANSFER

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; Execute new bridge control

    BRIDGE_A_ENABLE           
    BRIDGE_B_ENABLE           

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; Prepare new decay control

    CMP_DECAY_PREPARE_NEXT

rjmp main_loop
   

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ********************* ROM step tables ******************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       

#include "rom_table_data_simple.gen"    ; Created automatically   
                                         ; in externl tool

   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ********************* RAM step tables ******************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
           

.dseg                   

sinus_table_step:
.byte (STEP_NUMBER * 2)
sinus_table_step_half:
.byte (STEP_NUMBER * 2)
sinus_table_step_end:

decay_table:
.byte (STEP_NUMBER * 4)
decay_table_end:


[ Dodano: 2007-02-21, 22:01 ]
markcomp77 napisał/a:

2. zabezpieczenia realizowane programowo
8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)


Jak należy to rozumieć ?

stepper.zip
źrodła + projekt (AvrStudio)
Pobierz Plik ściągnięto 253 raz(y) 104,86 KB

 
 
KrissMon 
Nowy użytkownik


Dołączył: 21 Lut 2007
Posty: 3
Skąd: Kalisz
Wysłany: 2007-02-22, 08:51   

Wielkie dzięki za listing, szkoda że nie jest w C (akurat programuje w C,C++ i C#) ale jakoś go rozszyfruje, zauważyłem że w niektórych prostych implementacjach sterownika na mikrokontrolerach używany jest tylko STEP/DIR bez ENABLE, czy na początek do testów mogę go sobie darować??

I jeszcze jedno, pomysł mam taki aby użyć jakiegoś większego procka np. mega 644 (20MHz) i zrobić na nim sterownik do trzech silników na raz. Czy to mozę się udać czy są jakieś przeciwwskazania ??
 
 
jarekk 
Specjalista poziom 3


Pomógł: 21 razy
Dołączył: 17 Mar 2006
Posty: 638
Skąd: Gdańsk
Wysłany: 2007-02-22, 12:20   

Mój chodzi z 20MHz i daje max. częstotliwość czoperowania ok 150kHz.

Nie wiem czy się opłaca robić 3 w jednym procku - to się może nie wyrobić ( ale nigdy nie wiadomo, 20Mhz to jednak dużo). Ja mam tak zoptymalizoweany kod, że więcej nie wejdzie ( brakowałby rejestrów, a nie mocy obliczeniowej).

Bez enable można żyć w czsie testów, ale już nie dla docelowego rozwiązania - zresztą ENABLE jest bardzo proste do implementacji

Jeszcze jedna sprawa - mój kod w assemblerze został tak "wpasowany" w rozwiązanie, że robiąc podobną rzecz w C miałbyś kod działający 3-5 razy wolniej (szacunkowo)
 
 
astony 
Specjalista poziom 1


Pomógł: 1 raz
Dołączył: 26 Mar 2006
Posty: 180
Skąd: jaworzno
Wysłany: 2007-02-22, 19:55   

Jarekk'u- dzięki za udostępnienie kodu :lol: . Może się wreszcie nuczę jak to się robi :oops:
markcomp77 - mozesz mnie wpisać na listę dobrych życzeń trzy razy (XYZ) -> cnc też ma trzy litery :lol:
_________________
PYKNIJ na GG 5133624 to skocze na forum -> PLEASE
 
 
 
markcomp77 
Specjalista poziom 3



Pomógł: 43 razy
Dołączył: 18 Wrz 2004
Posty: 1967
Skąd: k/w-wy
Wysłany: 2007-02-22, 20:40   

jarekk napisał/a:
markcomp77 napisał/a:
2. zabezpieczenia realizowane programowo

Jak należy to rozumieć ?

np. kontrola przekroczenia dozwolonego maksymalnego prądu => zabezpieczenie przed zwarciem - potrzeba szybkiej reakcji (ew. sprzętwo)


jarekk napisał/a:
markcomp77 napisał/a:
8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)

Jak należy to rozumieć ?

wykrywanie stanów które nie powinny się pojawić
-kontrola poprawnego działania uC - WDT
-zgłoszenie błędu w przypadku wywołania nie stosowanych przerwań procesora


dzięki za pokazanie kodu <<-- bardzo ciekawa lektura edukacyjna... zwłaszcza, że "dopadło mnie" i muszę oprogramować coś na AVR ;) -

jak przeanalizuję ten kod to może zadam jeszcze parę pytań...

---

najbardziej ciekawi mnie w jaki sposób można by zrobić kompensację rezonansu... ostatnio czymś takim chwalą się twórcy sterowników gecko
_________________
z poważaniem
MARKcomp77
 
 
 
Leoo 
Specjalista poziom 3


Pomógł: 150 razy
Dołączył: 15 Lis 2006
Posty: 1908
Skąd: Tarnobrzeg
Wysłany: 2007-02-23, 21:55   

Mam pytanko.
Przetwornik D/A jest szeregowy. Ile czasu upływa od rozpoczęcia transmisji do pojawienia się właściwego napięcia na obu jego wyjściach i jaki to ma wpływ na prędkość obrotową?
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group

sponsorem forum jest www.akcesoria.cnc.info.pl
Informacje na witrynie cnc.info.pl są podawane tylko w celach edukacyjnych oraz hobbystycznych. Jedynie użytkownik wysyłający wiadomość lub plik ponosi pełnoprawną odpowiedzialność za ich treść. Jeżeli wynikną z tego konsekwencje prawne, cnc.info.pl może przekazać wszelkie informacje właściwym organom państwowym na temat danego użytkownika oraz pomóc w jego zlokalizowaniu. Zgodnie z ustawą o ochronie danych osobowych cnc.info.pl nie przekazuje informacji odnośnie użytkowników firmom i osobom prywatnym. Hasła, adresy e-mail oraz numery IP są szyfrowane w bazie danych i jedynie administrator jest w stanie odczytać te informacje. Cnc.info.pl jest przeciwna łamaniu zabezpieczeń oraz łamaniu praw autorskich, jednak niektóre osoby nie przestrzegają naszego regulaminu. Jeżeli zobaczyłeś wiadomość lub plik, który twoim zdaniem jest nielegalny lub narusza twoje dobra osobiste, prosimy o natychmiastowy kontakt:
Administrator

www.akcesoria.cnc.info.plsilniki krokoweŁożyska linioweśruby trapezowe i kulowe
Strona wygenerowana w 0,28 sekundy. Zapytań do SQL: 12