Znaleziono 9 wyników

autor: jarekk
17 wrz 2007, 13:31
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

Ja stosuje zewnętrzny przetwornik. Pokręciłem trochę - stosuje zewnętrzny szeregowy przetwornik cyfrowo - analogowy ( C/A a nie A/C jak mi się napisało). Na dwóch kanałach wystawia on napięcie referencyjne do komparatorów ( wchodzi tam też napięcie reprezentujące prąd).
autor: jarekk
24 lut 2007, 17:28
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

Wszystko zastało napisane od podstaw przeze mnie w assemblerze AVR'a ( oprócz m88def.inc) .Wszystkie potrzebne pliki znajdują się z zipie. Do tego trzeba dodać darmowe AvrStudio ( ze strony Atmela lub www.avrfreaks.com ) i możesz wszystko sam skompilować.
autor: jarekk
24 lut 2007, 09:31
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

Leoo pisze: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ą?
Przetwornik jest szeregowy ( DAC7612 ). Procesor używa sprzętowego SPI'a pracującego z 10MHz zegarem ( sam procesor 20MHz). Całość transmisji + wystawienie napięcia coś chyba poniżej 2uS (jak sprawdzałem ostatnio) - sprawdze jeszcze raz oscyloskopem (wieczorem).
autor: jarekk
22 lut 2007, 12:20
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

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)
autor: jarekk
21 lut 2007, 21:57
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

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ć ?
autor: jarekk
19 lut 2007, 22:32
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

Dzieciak Nr.2 trochę podchowany, przeprowadzka załatwiona. Uff zajęło tylko pół roku he he.

Ale teraz mogę trochę pokontynuować mój ulubiony projekt:
Obrazek

Docelowo 80V 6A
Jest to 3 prototyp, w trakcie końcowego uruchamiania.
Zbudowany na Mega88
autor: jarekk
30 lis 2006, 13:55
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

Ja uruchomiłem 1/8 kroku - przebiegi pracy chopera były bardzo stabilne (zrezygnowałem nawet w docelowej płytce z filtru 2 rzedu na wzmacniaczu operacyjnym obrabiającym mierzony prąd).

Ze względu na sposób kodowania sinusa mam możliwość pracy do 1/128 kroku.


Aby jednak to wykorzystać dodałem mnożnik kroków - każdy sygnał step wykonuje skofigurowaną wcześniej liczbe kroków. Powyżej pewnej częstotliwości układ przełącza się wenętrznie na pracę półkrokową - aby dać jak największą moc przy dużej prędkości.
Jak częstotliwość spada - to wraca do mikrokroku.



Używam innego algorytmu - nie jest to PWM tylko fixed-off time ( tak jak w 3977).
Czy PWM daje lepsze rezultaty ?
autor: jarekk
30 lis 2006, 12:48
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

U mnie jest dość spory zapas - kodu wyszło 1.6k, mogę go podkręcić nawet do 100kHz ( wszystko chodzi w pętli bez przerwań). Końcówka na IRF530/IR2181, chopper z zewnętrznym przetwornikiem szeregowym D/A
autor: jarekk
30 lis 2006, 10:06
Forum: Elektronika CNC
Temat: Sterowniki na procesorach AVR
Odpowiedzi: 48
Odsłony: 30377

rchobby pisze:Ostatnimi dniami pracowałem na projektem uniwersalnego sterownika do silników unipolarnych/bipolarnych (zmiana końcówki mocy)
Chętnie obejrzę - ja taki też mam - z wymienną końcówką mocy( w końcowej fazie projektu, czekam na ostatnią wersję płytki). Jakiej technologi kolega używa ? ( ja mam Mega88 + IR21xx)

Wróć do „Sterowniki na procesorach AVR”