HomeMade
Sterownik rotora - Bascom - Wersja do druku

+- HomeMade (http://sp-hm.pl)
+-- Dział: Forum Praktyczno-Techniczne HomeMade (/forum-1.html)
+--- Dział: Projekty Grupy HomeMade (/forum-44.html)
+--- Wątek: Sterownik rotora - Bascom (/thread-798.html)

Strony: 1 2 3


RE: Sterownik rotora - Bascom - SQ2EER - 01-05-2011 10:29

Witam - próbując napisać program do sterownika rotora zatrzymałem się w momencie sterowania silnikiem krokowym - sam sterownik zrobiony na A3977 który do sterowania potrzebuje sygnały enable, dir, step.
Enable - załącza sterownik poprzez podanie stanu niskiego
Dir - w zależności od stanu ( wysoki lub niski) kreci w lewo lub prawo
step - i tu mam problem jak napisać procedurę aby silnik się obracał - dobrze by było aby miał tak zwaną rampę przy starcie i zatrzymaniu.
Na ta chwile program wygląda tak:

Kod:
$regfile = "m644pdef.dat"                                   'informuje kompilator o typie mikrokontrolera
'$sim
$crystal = 16000000                                         'informuje kompilator
                                                            'o częstotliwości oscylatora                                                            'taktującego mikrokontroler
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7       'porty mikrokontrolera, do których dołączono wyświetlacz LCD

Config Portd = &B00000111 : Portd = &B11111111
Config Portb = &B11111111 : Portb = &B11110111

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja wewnętrznego przetwornika A/C

Deflcdchar 1 , 31 , 31 , 4 , 4 , 4 , 4 , 4 , 4              ' replace ? with number (0-7)
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' replace ? with number (0-7)
Deflcdchar 3 , 31 , 31 , 4 , 4 , 4 , 32 , 32 , 32           ' replace ? with number (0-7)
Deflcdchar 4 , 4 , 4 , 4 , 4 , 14 , 14 , 31 , 31            ' replace ? with number (0-7)
Deflcdchar 5 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32        ' replace ? with number (0-7)
Deflcdchar 6 , 1 , 1 , 3 , 3 , 7 , 7 , 15 , 15              ' replace [x] with number (0-7)
Deflcdchar 7 , 16 , 16 , 24 , 24 , 28 , 28 , 30 , 30        ' replace [x] with number (0-7)
'Deflcdchar 6 , 2 , 6 , 15 , 31 , 15 , 6 , 2 , 32            ' replace ? with number (0-7)
'Deflcdchar 7 , 8 , 12 , 30 , 31 , 30 , 12 , 8 , 32          ' replace ? with number (0-7)
'Deflcdchar 8 , 32 , 32 , 31 , 31 , 31 , 32 , 32 , 32        ' replace ? with number (0-7)

Up Alias Pind.7                                             'góra
Down Alias Pind.6                                           'dół
Setup Alias Pind.5                                          'wejście/zatwierdzenie
Azym0 Alias Pind.4
Azym360 Alias Pind.3
Step_ Alias Pinb.0                                          'Step
Dir_ Alias Pinb.1                                           'Dir
Enab_ Alias Pinb.2                                          'Enable
Buzer Alias Portb.3

Dim Ekran As Byte
Dim Pozycja As Byte
Dim Pozycja1 As Byte
Dim Pomoc1 As Byte
Dim Pomoc_pam As Byte
Dim Wart_ac1 As Word                                        'zmienna na wartość odczytaną z przetwornika
'Dim Wart_ac2 As Word
Dim Stopnie As Single                                       'zmienna stopni odczyt z przetwornika 'Dim V1 As Single                                                            'podzielony przez 2.841
Dim Azym_odcz As Word                                       'zmienna odczytanego azymutu'Dim V2 As Word
Dim Azym_zad As Word
Dim Azym_0 As Word
'Dim Azym_360 As Word
Dim Azym0_eprom As Eram Word
Dim Azym0_odczyt As Word
'Dim Azym360_eprom As Eram Word
'Dim Azym360_odczyt As Word
Dim Pamiec(5) As Word
Start Adc                                                   'uruchamia wbudowany przetwornik

'Readeeprom Wart_ac_0_e
'Readeeprom Wart_ac_360
''Waitms 100
Azym0_odczyt = Azym0_eprom
'Azym360_odczyt = Azym360_eprom
''Waitms 100

'Wart_ac1 = Getadc(0)                                        'odczytanie wartości z wejści ADC0 mikrokontrolera i przypisanie do zmiennej Wart_ac1
'Stopnie = Wart_ac1 / 2.841                                  'zamiana wartości odczytanej z przetwornika'stopnie = Wart_ac1 / 2.841
'Azym_odcz = Int(stopnie)                                    'zamiana odczytanej wartości z A/C na stopnie azymutu

Wart_ac1 = Getadc(0) - Azym0_eprom                          'Wart_ac_0_od
Stopnie = Wart_ac1 * 3.6
Azym_odcz = Int(stopnie)                                    'na stopnie zaymutu

Ekran = 1
Pozycja = 1
Pomoc1 = 1

Cursor Off
Cls
Wait 1
Locate 1 , 4 : Lcd "STEROWNIK"
Waitms 500
Locate 2 , 6 : Lcd "ROTORA"
Waitms 500
Locate 3 , 4 : Lcd "By  SQ2EER"
Waitms 500
Locate 4 , 5 : Lcd "Wer. 1.0"
Wait 1
Cls

Azym_zad = Azym_odcz

Do

Select Case Ekran


Case 1:

Cls
Do

Wart_ac1 = Getadc(0) - Azym0_eprom                          'Wart_ac_0_od
'Wart_ac2 = Azym360_eprom - Azym0_eprom
Stopnie = Wart_ac1 * 3.6
Azym_odcz = Int(stopnie)

'Wart_ac1 = Getadc(0)                                        'odczytanie wartości z wejści ADC0 mikrokontrolera i przypisanie do zmiennej Wart_ac1
'Stopnie = Wart_ac1 / 2.841                                  'zamiana wartości odczytanej z przetwornika'stopnie = Wart_ac1 / 2.841                                       'zamiana odczytanej wartości z A/C na stopnie azymutu
                                                            'na stopnie zaymutu
'Azym_odcz = Int(stopnie)

Locate 1 , 6 : Lcd "Azymut"
Locate 2 , 1 : Lcd Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2)       '; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2); Chr(1) ; Chr(2) ; Chr(3) ; Chr(2); Chr(1) ; Chr(2) ; Chr(3) ; Chr(2); Chr(1) ; Chr(2) ; Chr(3) ; Chr(2); Chr(1) ; Chr(2) ; Chr(3) ; Chr(2); Chr(1) ; Chr(2) ; Chr(3) ; Chr(2)
Locate 3 , 2 : Lcd Azym_odcz ; Chr(5) ; "  "
Locate 3 , 8 : Lcd Chr(6) ; Chr(7)                          'Chr(4)
Locate 3 , 12 : Lcd Azym_zad ; Chr(5) ; "  "
Locate 4 , 1 : Lcd Azym0_odczyt ; "  "                      'Wart_ac_0_od
'Locate 4 , 14 : Lcd Azym360_odczyt ; "  "
If Up = 0 Then
   Waitms 25
   If Up = 0 Then
   'Bitwait Up , Set
   Azym_zad = Azym_zad + 1
   If Azym_zad => 360 Then Azym_zad = 360
   End If
End If
If Down = 0 Then
   Waitms 25
   If Down = 0 Then
   'Bitwait Down , Set
   Azym_zad = Azym_zad - 1
   If Azym_zad = 0 Or Azym_zad => 360 Then Azym_zad = 0
   End If
End If
If Setup = 0 Then
   Wait 2
   'If Setup = 0 Then
   Bitwait Setup , Set
   Pomoc1 = Pomoc1 + 1
   If Pomoc1 => 3 Then Pomoc1 = 2
   'End If
End If

Loop Until Pomoc1 = 2 : Ekran = 2


Case 2:
Cls
Do

If Up = 0 Then
Waitms 25
If Up = 0 Then
Locate 4 , 1 : Lcd "            --> "
End If
End If

If Down = 0 Then
Waitms 25
If Down = 0 Then
Locate 4 , 1 : Lcd " <--            "
End If
End If

If Up = 1 And Down = 1 Then
Locate 4 , 1 : Lcd "      STOP      "
End If


Locate 1 , 4 : Lcd "Kalibracja"
Locate 2 , 6 : Lcd "Rotora"
Locate 3 , 1 : Lcd "ADC Azym.0 "
'Locate 4 , 1 : Lcd "ADC Azym.360 "

If Azym0 = 0 Then
Waitms 100
Wart_ac1 = Getadc(0)
Waitms 100
Azym_0 = Wart_ac1
Locate 3 , 12 : Lcd Azym_0
End If
Waitms 100
Azym0_eprom = Azym_0



'If Azym360 = 0 Then
'Waitms 100
'Wart_ac1 = Getadc(0)
'Waitms 100
'Azym_360 = Wart_ac1
'Locate 4 , 14 : Lcd Azym_360
'End If
'Waitms 100
'Azym360_eprom = Azym_360


If Setup = 0 Then
   'Waitms 25
   'If Setup = 0 Then
   Bitwait Setup , Set
   Pomoc1 = Pomoc1 + 1
   If Pomoc1 => 4 Then Pomoc1 = 3
   'End If
End If

Loop Until Pomoc1 = 3 : Ekran = 3


Case 3:
Cls
Do
Locate 1 , 3 : Lcd "Programowanie"
Locate 2 , 1 : Lcd "Pamieci azymutu"

If Up = 0 Then
   Bitwait Up , Set
   Pozycja = Pozycja + 1
   If Pozycja => 9 Then Pozycja = 9
End If
If Down = 0 Then
   Bitwait Down , Set
   Pozycja = Pozycja - 1
   If Pozycja = 0 Or Pozycja => 10 Then Pozycja = 0
End If
If Setup = 0 Then
   'Waitms 25
   'If Setup = 0 Then
   Bitwait Setup , Set
   Pomoc1 = Pomoc1 + 1
   If Pomoc1 => 5 Then Pomoc1 = 4
   'End If
End If

Loop Until Pomoc1 = 4 : Ekran = 1

End Select

Loop
End

Czy może koledzy mają jakieś pomysły - podpowiedzi.

pozdrawiam Jacek.


RE: Sterownik rotora - Bascom - SQ2EER - 27-06-2011 23:11

Witam - coś naskrobałem w bascomie i silnik zaczął się kręcić - krótki filmik
http://www.youtube.com/watch?v=cw6RS_cAV-A
są małe postępy - czy koledzy mogą podać mi receptę na komunikację rotora z pc - w protokole GS-232B - pozdrawiam Jacek.


RE: Sterownik rotora - Bascom - SP3SWJ - 28-06-2011 0:26

jakbyś szukał opisu protokołu... GS232 >>

http://www.sp2swj.sp-qrp.pl/SP3SWJ/ROTATOR/