Strona 1 z 2

TMC 239 sterowanie ISP

: 13 mar 2006, 20:10
autor: mag32
Witam.
Skonstruowałem sterownik silnika krokowego oparty o TMC 239, korzystając z noty aplikacyjnej producenta i schematu o zwiękrzonej mocy.
Ale nie w tym rzecz.
Problem polega na tym, że wysyłam do układu polecenia z procesora AVR AtMega128, a silnik zachowuje się jakby miał czkawkę, nie obraca się tylko przeskakuje po różnych trudnych do określenia pozycjach.

Wobec tego moje pytanie:
» Jak powinna wyglądać transmisja z procesora do tego układu tak by kręcić silnikiem półkrokami ? [na przykład, choć niekoniecznie]
» Z jaką prędkością można przesyłać dane do układu, CPU prauje na 8MHz

Widziałem plik przygotowany przez Markompa gdzieś w innym wątku z podziałem 1/8 ale gdy wysyłam te sekwencje to dzieje się właśnie to co opisałem wcześniej, chociaż wydaje mi się iż błędu tam nie ma.

: 13 mar 2006, 20:32
autor: Adalber
Napisz więcej jak wysyłasz dane do procka ,korzystasz ze sprzętowego SPI czy wysyłasz po bicie? . Jeśli korzystasz ze sprzętowego SPI jak wyglądają bajty?

: 13 mar 2006, 20:35
autor: Luki
W czym napisałeś program sterujący do at128 ( C czy BASCOM )?

: 13 mar 2006, 21:04
autor: mag32
Program jest w C, korzystam ze sprzętowego ISPa wysyłam najpierw część starszą uzupełnioną od lewej zerami a potem drugibajt.
Czyli 0b00001111,0b10111110 na przykład.
Pierwsze 4 zera powinny być przez tmc239 ignorowane.

Jak wyglądają bajty ?

11 10 9 8 7 6 5 4 3 2 1 0 Nr bitu


1 0 0 0 0 0 1 1 1 1 1 0
1 0 0 1 1 0 1 1 1 1 1 0
1 0 1 1 0 0 1 1 1 1 0 0
1 1 0 0 0 0 1 1 1 0 1 0
1 1 0 1 1 0 1 1 0 1 1 0
1 1 1 0 1 0 1 1 0 0 0 0
1 1 1 1 0 0 1 0 1 1 0 0
1 1 1 1 1 0 1 0 0 1 1 0
1 1 1 1 1 0 1 0 0 0 0 0
1 1 1 1 1 0 1 0 0 1 1 1
1 1 1 1 0 0 1 0 1 1 0 1
1 1 1 0 1 0 1 1 0 0 0 1
1 1 0 1 1 0 1 1 0 1 1 1
1 1 0 0 0 0 1 1 1 0 1 1
1 0 1 1 0 0 1 1 1 1 0 1
1 0 0 1 1 0 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 1 1 1 1 0 1
1 1 0 0 0 1 1 1 1 0 1 1
1 1 0 1 1 1 1 1 0 1 1 1
1 1 1 0 1 1 1 1 0 0 0 1
1 1 1 1 0 1 1 0 1 1 0 1
1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1
1 1 1 1 1 1 1 0 0 1 1 0
1 1 1 1 0 1 1 0 1 1 0 0
1 1 1 0 1 1 1 1 0 0 0 0
1 1 0 1 1 1 1 1 0 1 1 0
1 1 0 0 0 1 1 1 1 0 1 0
1 0 1 1 0 1 1 1 1 1 0 0
1 0 0 1 1 1 1 1 1 1 1 0

: 13 mar 2006, 21:30
autor: Adalber
Te dane które zamieściłeś to moja robota,ale to nie ma znaczenia silnik powinien się kręcić będzie tylko głośniej piszczał (jest błąd -ciągle włączone bity MDA i MDB).
Po wysłaniu 2 bajtów zmieniasz stan linii CSN na wysoki ?

: 14 mar 2006, 08:49
autor: mag32
CSN jest zmieniane co 2 bajty, wygląda to tak

portb0_l; //CSN=0
SPDR=0b00001111;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b10111110;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h; //CSN=1
delayms(200); //Przerwa przed wysłaniem kolejnej instrukcji

A co mam w takim razie zrobić z tym MDA i MDB :?:

: 14 mar 2006, 10:03
autor: Adalber
Co do bitów MDA i MDB to dłuższa opowieść generalnie bity te ustawiamy gdy napięcie wyjściowe ma "schodzić w strone zera".Przeglądnij wątek tmc239 na stronie 2 masz trochę opisane na ten temat .Przyglądnij się dokładnie kolorowym tabelom zamieszczonym przez markcomp77.Jak coś nie będzie jasne to pytaj.(w tych tabelach masz gotowe dane do pracy półkrokowej)
W SPI sprawdziłeś ustawienie fazy i polaryzacji sygnału zegarowego?

: 14 mar 2006, 10:20
autor: mag32
W SPI sprawdziłeś ustawienie fazy i polaryzacji sygnału zegarowego?

Nie sprawdzałem, a możesz mi to przybliżyć, nie za bardzo wiem o co chodzi.

...MDA i MDB to dłuższa opowieść...

Właśnie sprawdzam / przeglądam.

[ Dodano: 2006-03-14, 10:58 ]
Jak to jest z tym PHA, PHB ? Co one dokładnie powodują ?
Rozumiem to tak, że podanie na PHA jedynki spowoduje załączenie górnej pary tranzystorów mostka A, czyli jak się to ma do przepływu prądu przez uzwojenia, jakoś nie mogę tego za bardzo zrozumieć, a to podstawa sensu uruchomienia tego sterownika.

[ Dodano: 2006-03-14, 13:59 ]
Program wygląda tak jak poniżej, sekwencja jest według tabeli z tematu TMC239.

int main(void)
{
DDRB=_BV(0)|_BV(1)|_BV(2);
PORTB=_BV(PB0);
SPCR=_BV(MSTR)|_BV(SPR0)|_BV(SPE)|_BV(CPHA)|_BV(CPOL);
unsigned char odp;
for(;;)
{
portb0_l;
SPDR=0b00000000;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b10011110;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00000101;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b10110100;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00000111;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b10000011;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00001101;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b00010111;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00000000;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b11011111;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00000101;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b11110101;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00000111;//7
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b11000010;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;

portb0_l;
SPDR=0b00001101;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
SPDR=0b01010110;
while(!(SPSR|(1<<SPIF)));
odp=SPDR;
portb0_h;
opoznienie;
}
}

Mimo to silnik się nie obraca, czuć drgania, i trzyma dość mocno ale w jednej pozycji.

dołączam też schemat z Eagla.

: 14 mar 2006, 14:13
autor: Adalber
Nie znam procesorów ATmega i nie wiem jak tam rozwiązany jest interfejs SPI ,jakie wartości bitów sterujących tym interfejsem są domyślne musisz poczytać odpowiedniego PDFa w at89s8252 jest to zrobione pewnie podobnie bo to ta sama firma .Generalnie chodzi o to czy zegar w stanie spoczynku ma wartość 1 czy 0 .Tmc odczytuje wartość bitu gdy jest zbocze narastające SCK .
Jeśli chodzi o PHA to działanie jest następujące,oczywiście upraszczam PHA =1 wtedy "otwierają" się tranzystory lewy górny i prawy dolny ,prąd przez cewkę płynie w prawo ,gdy PHA=0 to otwiera się prawy górny i lewy dolny i prąd płynie w drugą stronę .Tak byłoby dokładnie gdyby nie czoper .
Ściagnij sobie note aplikacyjną układu LMD18245.pdf na stronie 7 jest zasada działania czopera ,można przyjąc ,że jeśli PHA jet=1 to mamy wykres nad osią gdy PHA=0 to pod.

: 14 mar 2006, 14:27
autor: mag32
Coraz więcej rozumiem.
Jak wg Ciebie powinien zachować się TNC239 gdy jest włączony ENN-GND a nie dostaje żadnych informacji z CPU.
Wygląda na to że trzyma Silnik w jednej pozycji. Zgadza się ? Słychać wtedy cichy Pisk - pewnie Chopper.