|
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 . Może się wreszcie nuczę jak to się robi
markcomp77 - mozesz mnie wpisać na listę dobrych życzeń trzy razy (XYZ) -> cnc też ma trzy litery |
_________________ 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ą? |
|
|
|
 |
|
|