Skocz do zawartości

[C] Sterowanie PWM silnikami


tabbi

Pomocna odpowiedź

Witam,

mam problem z sterowanie silników przez mostek H, w układzie mam użytą Atmege 8

układ mam podłączony jak z przykładu:

https://www.forbot.pl/forum/topics20/przepis-na-robota-w-pelni-programowalny-line-follower-vt2356.htm

Jednak gdy stosuje kod by zobaczyc czy sie kreca silniki i zatrzymuja:

DDRD  = 0xff; 
 DDRB  = 0xff; 

PORTB |= _BV(1); 
   PORTB |= _BV(2); 


   PORTD |= _BV(0);   // lewy silnik w lewo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(0);  // lewy silnik w lewo OFF 


   PORTD |= _BV(1);   // lewy silnik w prawo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(1);  // lewy silnik w prawo OFF 


   PORTD |= _BV(2);   // prawy silnik w lewo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(2);  // prawy silnik w lewo OFF 


   PORTD |= _BV(3);   // prawy silnik w prawo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(3);  // prawy silnik w prawo OFF 

Tak sa podlaczone oba scalaki:

L293DNE AtMega8

z 1-2EN do PB1

z 1A do PD0

z 2A do PD1

z 3-4EN do PB2

z 3A do PD2

z 4A do PD3

Jednak na wyjscie do silników żadne napiecie nie jest dostarczane. Co jest źle ??

Link do komentarza
Share on other sites

A czy na portach µkontrolera napięcie się zmienia?

Czy masz ustawioną zmienną

#define F_CPU 1000000L				/* Częstotliwość kwarcu */

standardowo ATmega8 ma ustawioną częstotliwość 1000000MHz, jeśli nie zmieniałeś fuse bitów.

I dla ułatwienia mierzenia blok zmieniający stany wyjść dałbym w nieskończoną pętle, bo tak przez 40 s masz różne stany, a potem już tylko 0 aż do resetu procka.

 DDRD  = 0xff; 
 DDRB  = 0xff; 

   PORTB |= _BV(1); 
   PORTB |= _BV(2); 

  while(1)
  {

   PORTD |= _BV(0);   // lewy silnik w lewo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(0);  // lewy silnik w lewo OFF 


   PORTD |= _BV(1);   // lewy silnik w prawo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(1);  // lewy silnik w prawo OFF 


   PORTD |= _BV(2);   // prawy silnik w lewo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(2);  // prawy silnik w lewo OFF 


   PORTD |= _BV(3);   // prawy silnik w prawo ON 
   _delay_ms(10000); 
   PORTD &= ~_BV(3);  // prawy silnik w prawo OFF
   }
Link do komentarza
Share on other sites

Witam,

tak mam to w petli i mam zdefiniowaną częstotliwość kwarcu.

Co do mierzenia to teraz na obu pinach na wyjsciu do silniczków mam napiecie równe 0.1 ? co to oznacza powinno być okolo 6 V skoro mam 6 V zasilania

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Mierzylem ten mostek i mam napiecie rowne 5.3 Volta na pinach które są połączone z Atmega czyli:

PORTB |= _BV(1);

PORTB |= _BV(2);

i na pinie który łączy mostek z zasilaniem. reszta pinów jest bez napiecia również te trzy pozostałe które są podłączone do Atmegi i którymi mam sterować CZEMU ??

Link do komentarza
Share on other sites

Znalazłem coś takiego:

Dokumentacja biblioteki avr-libc, opis funkcji _delay_ms:

Cytat:

The maximal possible delay is 262.14 ms / F_CPU in MHz.

źródło:

http://www.elektroda.pl/rtvforum/topic843037.html

Znalazłem to w dokumentacji:

Function Documentation

void _delay_ms ( double __ms )

Perform a delay of __ms milliseconds, using _delay_loop_2().

The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).

The maximal possible delay is 262.14 ms / F_CPU in MHz.

When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.

Czyli to opóźnienie może sprawiać problem, gdyż masz 10 sekund.

Można spróbować w pętli, powiedzmy:

for(char i = 0; i < 50; i++)
     _delay_ms(200);

może zadziała

Link do komentarza
Share on other sites

Teraz mam zasilenie idpowiednio na kazdym Pinie w Atmedze z PortuD

a na mostku H

Pin 1,7,8,15,10

z czego 8 bezposrendio do zasilania

1 i 9 do PB1 i PB2

a 7 i 10, 15 PD2 i PD1 PD0

wiec sie zgadza ale niestety zasilania na wyjsciu do silników nie ma

Link do komentarza
Share on other sites

Mierzysz silniki napięcie na wyjściu do silników względem masy, czy pomiędzy jednym a drugim?

Bo jeśli hardware jest ok, to między nimi a masą (- zasilania) powinno być te 6V, natomiast między jednym a drugim powinno być zero:

jeden ma 6V drugi ma 6V wiec różnica potencjałów 0V,
ale jeśli względem masy jest 0, to coś nie tak z mostkiem chyba...

Link do komentarza
Share on other sites

Witam,

zasilanie na mostku dochodzi wszystkie piny odpowiedzialne za polaczenie z Atmega maja takze napiecie. Tylko te piny ktore wychodza z mostka do zasilania silniczkami sa zerowe

w Programie mam ustalony tylko

DDRD = 0xff;

DDRB = 0xff;

while(1){

Portd=0xff

PORTB |= _BV(1)

PORTB |= _BV(2)

}

[ Dodano: 17-12-2010, 13:04 ]

Teraz znalazłem może błąd się wkradł w schemat ideowy, z przepisu na robota.

BO jak sprawdziłem mostek L293D

http://www.datasheetcatalog.org/datasheet/texasinstruments/l293d.pdf

To na 16 pinie jest zasilanie VCC2 i to nie jest podłączone (VCC1 jest podłączone do pinu 8)? może w tym błąd Bo w schemacie z artykułu przepis na robota 16 pin jest w ogole nie użyty.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.