Witam. Mój problem przedstawiam następująco:
Wykonuje platformę mobilną z wykorzystaniem jako napęd silniczków DC z przekładniami.
Do regulacji szybkości wykorzystuje 2 sygnały PWM idące na wejścia Enable mostka H - L298. By zadanie które sobie postawiłem było cięższe, do określenia regulacji PWM używam wyników pobranych z 2 wejść ADC Atmegi, które uzyskuje dzięki popularnym manipulatorom:
Początki oprogramowania przeszły spokojnie. Początkowo chodziło o to, by platforma reagowała na jedną Oś manipulatora czyli jazda do przodu i do tyłu z prędkością zależną od położenia gałki (przód-tył). Udało mi się tego dokonać dzięki zastosowaniu kilkuu przekształceń wartości ADC.
Problem pojawił się, gdy chciałem obsłużyć drugą oś manipulatora. Nie mam totalnie pojęcia w jaki sposób połączyć te dwie wartości by można było umożliwić skręcanie platformy.
Wartości ADC zależnie od położenia manipulatora (oś pionowa w programie jest oznaczona jako ADC0 - zmienna X)
Dlatego zwracam się do was, w jaki sposób można rozwiązać ten problem by za pomocą tego manipulatora dobierać odpowiednie wartości PWM?
Dodam jeszcze, że gdy wartość pwm równa jest 1023, to silniki są w stanie spoczynku. Wartość 0 odpowiada ich maksymalnej prędkości.
Ciężko mi było opisać to wszystko w odpowiedni sposób, dlatego będę starał się często tu pojawiać i uaktualniać temat.
Wykonuje platformę mobilną z wykorzystaniem jako napęd silniczków DC z przekładniami.
Do regulacji szybkości wykorzystuje 2 sygnały PWM idące na wejścia Enable mostka H - L298. By zadanie które sobie postawiłem było cięższe, do określenia regulacji PWM używam wyników pobranych z 2 wejść ADC Atmegi, które uzyskuje dzięki popularnym manipulatorom:
Początki oprogramowania przeszły spokojnie. Początkowo chodziło o to, by platforma reagowała na jedną Oś manipulatora czyli jazda do przodu i do tyłu z prędkością zależną od położenia gałki (przód-tył). Udało mi się tego dokonać dzięki zastosowaniu kilkuu przekształceń wartości ADC.
$regfile "m16def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim X As Word
Dim Xx As Long
Dim Y As Word
Dim Yy As Long
Config Pina.0 = Input
Config Pina.1 = Input
Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
Pwm1a = 1023
Pwm1b = 1023
Config Pind.5 = Output
Config Pind.4 = Output
Portd.4 = 0
Portd.5 = 0
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Portc = &B11111010
E0 Alias Portc.0 ' porty służą do sterowania pinami input mostka H
E1 Alias Portc.1
E2 Alias Portc.2
E3 Alias Portc.3
Cursor Off
Do
X = Getadc(0)
X = Getadc(0)
Y = Getadc(1)
Y = Getadc(1)
If X < 530 And X > 500 Then
Pwm1a = 1023
Pwm1b = 1023
End If
If X > 530 Then
E0 = 1
E1 = 0
E2 = 1
E3 = 0
Xx = 1023 - X
Xx = Xx * 2
Pwm1a = Xx
Pwm1b = Xx
End If
If X < 500 Then
E0 = 0
E1 = 1
E2 = 0
E3 = 1
Xx = X - 512
Xx = Xx * 2
Pwm1a = Xx
Pwm1b = Xx
End If
Cls
Lcd "X:" ; X ; " Y:" ; Y
Lowerline
Lcd "P1:" ; Pwm1a ; " P2:" ; Pwm1b
Waitms 100
Loop
End
Problem pojawił się, gdy chciałem obsłużyć drugą oś manipulatora. Nie mam totalnie pojęcia w jaki sposób połączyć te dwie wartości by można było umożliwić skręcanie platformy.
Wartości ADC zależnie od położenia manipulatora (oś pionowa w programie jest oznaczona jako ADC0 - zmienna X)
Dlatego zwracam się do was, w jaki sposób można rozwiązać ten problem by za pomocą tego manipulatora dobierać odpowiednie wartości PWM?
Dodam jeszcze, że gdy wartość pwm równa jest 1023, to silniki są w stanie spoczynku. Wartość 0 odpowiada ich maksymalnej prędkości.
Ciężko mi było opisać to wszystko w odpowiedni sposób, dlatego będę starał się często tu pojawiać i uaktualniać temat.