Skocz do zawartości

Pomocna odpowiedź

Napisano

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

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]

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.

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 😕

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ł!

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...