Skocz do zawartości

PWM do programu Linefollower


mateusz45412

Pomocna odpowiedź

Witam

Napisałem program do Linefollower z kursu (program działa), ale silniki obracają się wolno i nie wystarcza to aby Linefollower jeździł. Myślę że może by pomogło wpisanie do programu PWM ale nie wiem co i gdzie wpisać. Chciałbym aby silniki obracały się jak najszybciej.

Proszę o poprawienie i dopisanie PWM do programu.

Schemat

a to jest program (napisany bascomie)

$regfile = "m8def.dat"

$crystal = 1000000

 

Config Portc = Input

 

Config Portd = Output

Portd = &B00000000

Motor_l Alias Portd.2

Motor_p Alias Portd.1

 

Sensor_p Alias Pinc.5

Sensor_s Alias Pinc.4

Sensor_l Alias Pinc.3

 

Dioda Alias Portd.6

 

 

Do

 

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 0 Then

Gosub Go

End If

 

If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then

Gosub Left

End If

 

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 0 Then

Gosub Left

End If

 

If Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then

Gosub Right

End If

 

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then

Gosub Right

End If

 

If Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 1 Then

Gosub Go

End If

 

 

End If

 

Loop

 

 

Go:

Motor_l = 1

Motor_p = 1

Dioda = 1

Return

 

Left:

Motor_l = 0

Motor_p = 1

Dioda = 1

Return

 

Right:

Motor_l = 1

Motor_p = 0

Dioda = 1

 

Return

Link do komentarza
Share on other sites

PWM nie poprawi tutaj sytuacji, może tylko obniżyć prędkość. PWM polega na tym, że jest stan wysoki na nóżce tylko przez pewien czas, a jeśli teraz przy włączonym na stałe stanie wysokim nie działa, to PWM tego nie poprawi. Żeby robot jeżdził szybciej trzeba wymienić silniki lub źródło zasilania. I kod wklejaj w znacznikach

[code]
[/code]
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

mateusz45412 parę pytań co Ciebie:

1. Czy złożyłeś tego już tego bota według tego schematu?

2. W kodzie zainicjowałeś takie coś:

Motor_l Alias Portd.2 
Motor_p Alias Portd.1 

To odpowiada dwóm różnym "częściom" mostka H. Motor_l (pind.2) odpowiada pinowi 7 mostka H (IN2),a co z IN1 ? (pin2) - wisi sobie w powietrzu? I co z PWM'em 1,2EN, też sobie wisi, czy masz podłączone to gdzieś? Motor_p (pind.1) odpowiada pinowi 10 (IN3), a co z IN4 (pin 15)?

Powinieneś mieć takie coś:

Silnik_lewy_a Alias....
Silnik_lewy_b Alias...

Silnik_prawy_a Alias...
Silnik_prawy_b Alias...

i zainicjowany Timer1 dla PWM'a, podłączenie odpowiednich końcówek mostka H do odpowiednich pinów uC (tam gdzie jest OCR1A i OCR1B, czyli PWM1A i PWM1B).

Poza tym jak odczytujesz stany czujników? Przez komparatory? Czy przez ADC? Jak przez ADC to też nie masz inicjalizacji przetwornika analogowo-cyfrowego.

Tyle ode mnie.

Link do komentarza
Share on other sites

odp.1 Jak zamontuje inne silniki to się nieobracającą (normalnie działa tylko na tych słabszych).

odp.2 robot jest już złożony

odp.3 jeżeli to jest źle

Motor_l Alias Portd.2 
Motor_p Alias Portd.1

to w takim razie program powinien wyglądać tak?

$regfile = "m8def.dat"
$crystal = 1000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

Config Portc = Input
       Portd = &B00000000

Config Portd = Output
       Portd = &B00000000


Motor_l_a Alias Portd.3
Motor_l_b Alias Portd.2
Motor_p_b Alias Portd.0
Motor_p_a Alias Portd.1

Sensor_p Alias Pinc.5
Sensor_s Alias Pinc.4
Sensor_l Alias Pinc.3

Dioda Alias Portd.6


Do

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 0 Then
Gosub Go
End If

If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then
Gosub Left
End If

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 0 Then
Gosub Left
End If

If Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then
Gosub Right
End If

If Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then
Gosub Right
End If

If Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 1 Then
Gosub Go

End If

Loop

Go:
Motor_l = 1
Motor_p = 1
Dioda = 1
Return

Left:
Motor_l = 0
Motor_p = 1
Dioda = 1
Return

Right:
Motor_l = 1
Motor_p = 0
Dioda = 1

Return

tylko taki program mi nie działa 😕

Link do komentarza
Share on other sites

Teraz to Ci się nawet nie skompiluje 😃

Popatrz na inne konstrukcje lf'ów. Tam jest nawet taka gdzie masz przykładowy kod i nawet jest on bardzo podobny do tego, który chcesz stworzyć.

https://www.forbot.pl/forum/topics7/line-follower-pierwszy-robot-janusz-vt5639.htm?highlight=janusz

Nie masz nadal konfiguracji Timera1 dla PWM'a i właśnie przy konfiguracji możesz sobie zmieniać wypełnienie, np. w kodzie piszesz Pwm1a = 127 i Pwm1b = 127 (50% PWM'a na oba silniki)

Coś dziwna konfiguracja ADC.

Tutaj:

Go: 
Motor_l = 1 
Motor_p = 1 
Dioda = 1 
Return 

Left: 
Motor_l = 0 
Motor_p = 1 
Dioda = 1 
Return 

Right: 
Motor_l = 1 
Motor_p = 0 
Dioda = 1 

Masz tylko Motor_l i ..._p więc tu jest problem, musisz zamienić to do odpowiedniej formy, czyli:

np. Go
Motor_l_a = 1
Morot_l_b = 0

Motor_p_a = 1
Motor_p_b = 0

To są oczywiście przykładowe pokazanie jak bo ma wyglądać, nie wiem czy Twój bot będzie akurat na takim wysterowaniu silników jechał prosto. (Go).

Jeżeli pomogłem kliknij: Pomógł!

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.