Znaleziono 9 wyników
Wróć do „Sterowniki na procesorach AVR”
- 17 wrz 2007, 13:31
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
- 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ć.
- 24 lut 2007, 09:31
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
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).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ą?
- 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)
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)
- 21 lut 2007, 21:57
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
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.)
- 19 lut 2007, 22:32
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
- 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 ?
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 ?
- 30 lis 2006, 12:48
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
- 30 lis 2006, 10:06
- Forum: Elektronika CNC
- Temat: Sterowniki na procesorach AVR
- Odpowiedzi: 48
- Odsłony: 30377
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)rchobby pisze:Ostatnimi dniami pracowałem na projektem uniwersalnego sterownika do silników unipolarnych/bipolarnych (zmiana końcówki mocy)