Sterowniki na procesorach AVR

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC

bogus105
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 2
Posty: 421
Rejestracja: 24 gru 2005, 12:59
Lokalizacja: Bielsko-Biała

#31

Post napisał: bogus105 » 20 lut 2007, 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:)



Tagi:

Awatar użytkownika

x
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 243
Rejestracja: 29 mar 2006, 23:24
Lokalizacja: Laski, gm. Izabelin

#32

Post napisał: x » 20 lut 2007, 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.


KrissMon
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 7
Rejestracja: 21 lut 2007, 17:55
Lokalizacja: Kalisz

#33

Post napisał: KrissMon » 21 lut 2007, 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

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#34

Post napisał: markcomp77 » 21 lut 2007, 21:34

KrissMon pisze: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ń ;)
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 9
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#35

Post napisał: jarekk » 21 lut 2007, 21:57

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
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: 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 ]
markcomp77 pisze: 2. zabezpieczenia realizowane programowo
8. wykrywanie stanów zabronionych (troszeczkę co innego niż 2.)
Jak należy to rozumieć ?
Załączniki
stepper.zip
źrodła + projekt (AvrStudio)
(104.86 KiB) Pobrany 932 razy


KrissMon
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 7
Rejestracja: 21 lut 2007, 17:55
Lokalizacja: Kalisz

#36

Post napisał: KrissMon » 22 lut 2007, 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
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 9
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#37

Post napisał: jarekk » 22 lut 2007, 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 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 183
Rejestracja: 26 mar 2006, 23:23
Lokalizacja: jaworzno

#38

Post napisał: astony » 22 lut 2007, 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

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#39

Post napisał: markcomp77 » 22 lut 2007, 20:40

jarekk pisze:
markcomp77 pisze: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 pisze:
markcomp77 pisze: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
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm


Leoo
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 4
Posty: 4017
Rejestracja: 15 lis 2006, 22:01
Lokalizacja: Tarnobrzeg

#40

Post napisał: Leoo » 23 lut 2007, 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ą?

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”