Skocz do zawartości
mateusz45412

PWM do programu Linefollower

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

Udostępnij ten post


Link to post
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]

Udostępnij ten post


Link to post
Share on other sites

Nie znam Bascoma, ale z tego co widzę nigdzie w kodzie nie dajesz stanu wysokiego na pin 1,2EN i 3,4EN.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
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 😕

Udostępnij ten post


Link to post
Share on other sites

Widzę muszę się powtórzyć bo z tego co widzę nie umiesz czytać:

nigdzie w kodzie nie dajesz stanu wysokiego na pin 1,2EN i 3,4EN.

Udostępnij ten post


Link to post
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ł!

Udostępnij ten post


Link to post
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!

Gość
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...