Strona 1 z 2
Atmega162/Atmega32 BA6845FS
: 17 gru 2016, 09:18
autor: karol75
Mam problem z układem BA6845FS jest to sterownik silnika krokowego do 1A 12V
PDF BA5845FS
Zasilam go z napięcia 7,5V (napięcie nie zależne od silnika)
Podpięty jest do Atmega162(lub Atmega32)
Efekt jest taki że rzuca silnikiem, a jeżeli już załapie to kręci się albo przypadkowo albo w złą stronę.
Kod: Zaznacz cały
uint8_t step = 0;
#define MPort PORTC
#define IN11 2
#define IN21 1
#define IN12 3
#define IN22 4
...
void nextstep(uint8_t dir)
{
if(step==0)
{
MPort &= ~((1<<IN11)|(1<<IN21));
}
if(step==1)
{
MPort &= ~((1<<IN11));
MPort |= (1<<IN21);
}
if(step==2)
{
MPort |= (1<<IN11)|(1<<IN21);
}
if(step==3)
{
MPort |= (1<<IN11);
MPort &= ~((1<<IN21));
}
step++;
if(step>3)step=0;
}
int main (void)
{
//Inicjacja Silnika
DDRC = ((1<<IN11)|(1<<IN21)|(1<<IN12)|(1<<IN22));
MPort = (1<<IN11)|(1<<IN21)|(1<<IN12)|(1<<IN22);
MPort |= (1<<IN12)|(1<<IN22);
...
}
Chodzi o sekwencję.
Jak prawidłowo powinno się nim sterować?
Re: Atmega162/Atmega32 BA6845FS
: 17 gru 2016, 22:04
autor: pitsa
karol75 pisze:
Jak prawidłowo powinno się nim sterować?
Najpierw powoli - jak żółw – ociężale.
Re: Atmega162/Atmega32 BA6845FS
: 19 gru 2016, 09:35
autor: karol75
pitsa pisze:quote]
Najpierw powoli - jak żółw – ociężale.
I teraz jako moderator oceń swój post i to co wnosi on do dyskusji.
Re: Atmega162/Atmega32 BA6845FS
: 19 gru 2016, 10:50
autor: pitsa
Napisałem ci, że brakuje w kodzie "najpierw powoli" między każdym krokiem.
Dołóż "spowolnienie" po każdym przeskoku zasilania i zobacz, że przestanie "rzucać".
Możesz też skorzystać z "accelstepper".
Re: Atmega162/Atmega32 BA6845FS
: 19 gru 2016, 10:57
autor: karol75
Może ja nie czytam między wierszami więc nie rozumiałem.
Spróbuję z opóźnieniami.
Problem w tym że jeżeli wstawię opóźnienia wtedy znacznie spowolni się prędkość obrotowa silnika.
Re: Atmega162/Atmega32 BA6845FS
: 19 gru 2016, 10:59
autor: pitsa
I o tym jest słowo "najpierw". Potem przyspieszasz jak lokomotywa.

Re: Atmega162/Atmega32 BA6845FS
: 19 gru 2016, 18:40
autor: karol75
Nie, nie tutaj był problem
zmieniłem sekwencję
void nextstep(uint8_t dir)
{
if(step==0)
{
MPort &= ~((1<<IN11)|(1<<IN21));
}
if(step==1)
{
MPort |= (1<<IN11);
MPort &= ~((1<<IN21));
}
if(step==2)
{
MPort |= (1<<IN11)|(1<<IN21);
}
if(step==3)
{
MPort &= ~((1<<IN11));
MPort |= (1<<IN21);
}
step++;
if(step>3)step=0;
//_delay_ms(10);
}
i działa akceptowalnie.
dziękuję za odpowiedzi
: 11 sty 2017, 19:55
autor: karol75
Niestety to nie koniec moich zmagań
po zmianie czasów rozdzielających kroki silnika (inne operacje) zaczął znowu głupieć.
Doszedłem do wniosku że muszę dokładnie zbadać temat i to co ustaliłem:
Po lewej piny sterujące po prawej napięcia na wyjściu
po lewej stany logiczne, po prawej napięcia zmierzone na wyjściu bez podłączonego silnika.
IN OUT
11_______21_____12_____22_______________11_____21_____12_____22
--------------------------------------------------------------
_1_______1_______1_______1________________7_______0_______0_______5,5
_1_______0_______1_______1________________7_______7_______0_______5,5
_0_______0_______1_______1________________0_______7_______7_______0
_0_______1_______1_______1________________0_______0_______7_______0
_1_______1_______0_______1________________5_______0_______1_______5
_1_______0_______0_______1________________1_______7_______0_______0
_0_______0_______0_______1________________1_______7_______0_______1
_0_______1_______0_______1________________5_______0_______0_______3
_1_______1_______0_______0________________5_______3_______0_______3
_1_______0_______0_______0________________1_______1_______0_______0
_0_______0_______0_______0________________1_______1_______0_______0
_0_______1_______0_______0________________5_______3_______0_______3
_1_______1_______1_______0________________7_______5_______0_______5
_1_______0_______1_______0________________7_______3_______0_______5
_0_______0_______1_______0________________0_______0_______7_______0
_0_______1_______1_______0________________0_______1_______7_______0
Silnik podłączony jest do Wyprowadzeń OUT
cewki podłączone są
1 cewka OUT 11 i 12
2 cewka OUT 21 i 22
: 11 sty 2017, 21:00
autor: pitsa
karol75 pisze:po prawej napięcia zmierzone na wyjściu bez podłączonego silnika.
Zbadaj to jeszcze raz ale pod konkretnym obciążeniem na wyjściach.
Załóżmy, że coś koło 100ohm to lepsze obciążenie niż rezystancja wewnętrzna miernika.
4 oporniki:
OUT11-MGND1
OUT12-MGND1
OUT21-MGND2
OUT22-MGND2
jaki silnik krokowy do tego podłączasz?
: 11 sty 2017, 23:09
autor: karol75
Silnik - drukarka termiczna MLT288 i MLT388 mają ten sam silnik
W nocie określony jako
Motor(VH) 0.5 A MAX 0.3 A mean current VH=7.2V, 840PPS
Feeding pitch 0.125 mm Motor's 2 stepping span
Characteristics of the Stepping Motor
Table 4-1 General Characteristics of the Stepping Motor
Item______________________________Rating
Type______________________________Permanent magnet type
No. of phases_______________________4 phases
Driving system______________________Bipolar chopper driving
Excitation__________________________2-2
Winding resistance/phase______________18 Ω / phase
Rating voltage_______________________7.2 V
Driving current_______________________Approx. 0.5 A
Driving frequency_____________________To be determined by driving voltage
IN OUT
11_______21_____12_____22_______________11_____21_____12_____22
--------------------------------------------------------------
_1_______1_______1_______1________________7_______0_______0_______0
_1_______0_______1_______1________________7_______7_______0_______0
_0_______0_______1_______1________________0_______7_______7_______0
_0_______1_______1_______1________________0_______0_______7_______0
_1_______1_______0_______1________________7_______0_______0_______0
_1_______0_______0_______1________________7_______0_______0_______0
_0_______0_______0_______1________________7_______0_______7_______0
_0_______1_______0_______1________________0_______0_______7_______0
_1_______1_______0_______0________________0_______0_______0_______0
_1_______0_______0_______0________________0_______0_______0_______0
_0_______0_______0_______0________________0_______0_______0_______0
_0_______1_______0_______0________________0_______0_______0_______0
_1_______1_______1_______0________________0_______0_______0_______0
_1_______0_______1_______0________________0_______7_______0_______0
_0_______0_______1_______0________________0_______7_______0_______0
_0_______1_______1_______0________________0_______0_______0_______0
Wygląda na to że miałem uszkodzony scalak Brak wyjścia 22
Po wymianie
IN OUT
11_______21_____12_____22_______________11_____21_____12_____22
--------------------------------------------------------------
_1_______1_______1_______1________________7_______0_______0_______7
_1_______0_______1_______1________________7_______7_______0_______0
_0_______0_______1_______1________________0_______7_______7_______0
_0_______1_______1_______1________________0_______0_______7_______0
_1_______1_______0_______1________________0_______0_______7_______7
Uzyskałem pełny obrót
Po wymianie silnik szaleje.
Dzięki za pomoc.