Sterowniki na procesorach AVR
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 2
- Posty: 421
- Rejestracja: 24 gru 2005, 12:59
- Lokalizacja: Bielsko-Biała
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:)
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:)
Tagi:
-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 3962
- Rejestracja: 18 wrz 2004, 12:51
- Lokalizacja: k/w-wy
- Kontakt:
zanim poda się algorytm - lepiej zastanowić się nad zadaniami jakie chcemy realizować...KrissMon pisze:Proszę o jakiś algorytm lub jakieś linki jeżeli to możliwe
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ń

SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 9
- Posty: 1701
- Rejestracja: 17 mar 2006, 08:57
- Lokalizacja: Gdańsk
Zapraszam do obejrzenia programu z mojego kontrolera (Mega88):KrissMon pisze: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
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: Zaznacz cały
.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 ]
Jak należy to rozumieć ?markcomp77 pisze: 2. zabezpieczenia realizowane programowo
8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)
- Załączniki
-
- stepper.zip
- źrodła + projekt (AvrStudio)
- (104.86 KiB) Pobrany 932 razy
-
- Nowy użytkownik, używaj wyszukiwarki
- Posty w temacie: 2
- Posty: 7
- Rejestracja: 21 lut 2007, 17:55
- Lokalizacja: Kalisz
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 ??
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 ??
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 9
- Posty: 1701
- Rejestracja: 17 mar 2006, 08:57
- Lokalizacja: Gdańsk
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)
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)
-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 3962
- Rejestracja: 18 wrz 2004, 12:51
- Lokalizacja: k/w-wy
- Kontakt:
jarekk pisze:Jak należy to rozumieć ?markcomp77 pisze:2. zabezpieczenia realizowane programowo
np. kontrola przekroczenia dozwolonego maksymalnego prądu => zabezpieczenie przed zwarciem - potrzeba szybkiej reakcji (ew. sprzętwo)
wykrywanie stanów które nie powinny się pojawićjarekk pisze:Jak należy to rozumieć ?markcomp77 pisze:8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)
-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
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm