AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Opisy sprzetu, modułów, programatorów, pinout itp.
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: niveasoft » 26 wrz 2019, 12:37

Jak to nie problem i możesz/chcesz to wrzuć ten kod w jednym kawałku to może coś tu wspólnie poprawimy :D
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: sp3ots » 26 wrz 2019, 12:58

Witam !
O to chodzi że kopiuję z oryginału który przerobiłem na AVR i kolejno wklejam/przerabiam program.
W oryginale nie ma przerwań.
W oryginale są podprogramy SUB nie mam pojęcia jak działają SUBy, gdzie program idzie po wyjściu z SUBa ? to dla mnie magia.
dlatego przerabiam na podprogramy np: gosub przyciski i wiem dokąd pójdzie program.
Przyciski:
"kod
return
Na razie nie dam kodu, sam będę próbował. Przynajmniej mam jakieś zajęcie.

Bardzo dziękuję za chęć pomocy, jak się "zatnę" w przerabianiu na pewno tu napiszę.
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: sp3ots » 17 sie 2020, 10:35

Witam po przerwie !

Kilka dni temu uszkodzeniu uległ silnik pompy spustowej w mojej pralce, nawijarka nie skończona i musiałem sobie poradzić w inny sposób. ( silnik miał przerwę uzwojenia )

Z trzech kawałków "łat 40x50" skręciłem prowizoryczną nawijarkę, odwinąłem część przerwanego uzwojenia, nawinąłem z powrotem ten sam drut, złożyłem i pralka działa.
Miał bym niej pracy gdybym miał ukończoną nawijarkę, dlatego powróciłem do poprawiania programu.
Oto obecny program:
  1. '16.08.2020
  2. $regfile = "attiny2313.dat"
  3. $crystal = 8000000
  4. Config Lcdpin = Pin , Db7 = Pd.3 , Db6 = Pd.2 , Db5 = Pa.0 , Db4 = Pa.1 , E = Pd.1 , Rs = Pd.0
  5. Config Lcd = 16 * 2
  6. Cursor Off
  7. Cls
  8. Locate 1 , 1
  9. Lcd "Nawijerka  16.08"
  10. Wait 1
  11.  
  12. Cls
  13.  
  14. Config Portb = Output
  15. Config Pind.6 = Input
  16. Portd.6 = 1
  17. Config Pind.5 = Input
  18. Portd.5 = 1
  19. Config Pind.4 = Input
  20. Portd.4 = 1
  21. S3 Alias Pind.6                                             'Enter
  22. S2 Alias Pind.5                                             'plus
  23. S1 Alias Pind.4                                             'minus
  24.  
  25. Dim R As Byte
  26. Dim Directionflag As Bit                                    'flaga kierynkowa
  27. Dim Layers As Byte                                          'warstwy
  28. Dim Zw_1war As Word                                         'ile zwojow w jednej warstwie
  29. Dim Srednica As Byte                                        'srednica
  30. Dim Motor1 As Byte
  31. Dim Turns As Long                                           'zamienia siÄ™
  32. Dim Turning As Long                                         'obracenie
  33. Dim Motor2 As Byte
  34. Dim Layercount As Word                                      'ilosc nawinietych zwojow w warstwie
  35. Dim Zwoje As Word                                           'zmienna pomocnicza do liczenia w dol‚ do zera
  36. Dim Ile_warstw As Word
  37.  
  38. Zwoje = 6
  39. Zw_1war = 2
  40. Srednica = 5
  41.  
  42. Locate 2 , 1
  43. Lcd "--->"
  44. Do
  45. Gosub Programowanie
  46. Loop
  47. End
  48.  
  49. Programowanie:
  50.  
  51. Turns = Zwoje
  52. Portb = &B00000000
  53. Locate 1 , 1
  54. Lcd "Zwoje:"
  55.  
  56. Do
  57. Locate 1 , 11
  58. Lcd "     "
  59. Locate 1 , 11
  60. Lcd Turns
  61. If S1 = 0 Then
  62. Decr Turns
  63. End If
  64. If S2 = 0 Then
  65. Incr Turns
  66. End If
  67. Zwoje = Turns                                               'zwoje
  68. If S3 = 0 Then
  69. Bitwait S3 , Set
  70. Waitms 20
  71. Gosub Ilosc_zw_warstwa
  72. End If
  73. Waitms 120
  74. Loop
  75. Return
  76.  
  77. Ilosc_zw_warstwa:
  78. Cls
  79. Lcd "zw_1war:"                                              'liczba zwojĂłw w warstwie
  80. Do
  81.  
  82. 'Locate 1 , 11
  83. 'Lcd "     "
  84. Locate 1 , 11
  85. Lcd Zw_1war
  86. Waitms 250
  87. If S1 = 0 Then
  88. Decr Zw_1war
  89. End If
  90. If S2 = 0 Then
  91. Incr Zw_1war
  92. End If
  93. If S3 = 0 Then
  94. Bitwait S3 , Set
  95. Waitms 20
  96. Gosub Srednica_drutu
  97. End If
  98. Loop
  99. Return
  100.  
  101. Srednica_drutu:
  102. Cls
  103. Lcd "Srednica: 0," ;
  104. Waitms 250
  105. Do
  106. 'Locate 1 , 13
  107. Lcd "     "
  108. Locate 1 , 13
  109. Lcd Srednica ; "mm"
  110. Waitms 250
  111. If S1 = 0 Then
  112. Decr Srednica
  113. If Srednica = 101 Then
  114. Srednica = 100
  115. End If
  116. End If
  117. If S2 = 0 Then
  118. Incr Srednica
  119. If Srednica = 0 Then
  120. Srednica = 1
  121. End If
  122. End If
  123. If S3 = 0 Then
  124. Bitwait S3 , Set
  125. Waitms 20
  126.  
  127.  
  128. Gosub Work
  129. End If
  130. Loop
  131. Return
  132.  
  133. Work:
  134. Cls
  135. Directionflag = 0                                           'flaga kierunkowa
  136. Layercount = 0                                              'liczba warstw      ?
  137. Motor2 = 8
  138.  
  139.  
  140. Locate 1 , 1
  141. Lcd "Nawija..."
  142. For Turning = 1 To Turns                                    'turning-obracanie =1 to turns- zmienia siÄ™
  143. Locate 1 , 12
  144. Lcd Turns                                                   ' Turning
  145.  
  146. Incr Layercount                                             'liczba warstw   ???
  147. If Layercount = Zw_1war Then                                '
  148. Directionflag = Not Directionflag                           'flaga kierunkowa
  149. Layercount = 0
  150. End If
  151. Gosub 1_obrot
  152.  
  153. Next
  154. Return
  155.  
  156. 1_obrot:
  157. Decr Zwoje                                                  'zwoje do nawinięcia
  158. Locate 2 , 12
  159. If Zwoje < 10 Then
  160. Lcd "   "
  161. Elseif Zwoje < 100 Then
  162. Lcd "  "
  163. Elseif Zwoje < 1000 Then
  164. End If
  165. Lcd Zwoje
  166.  
  167. Ile_warstw = Zwoje / Zw_1war
  168. Ile_warstw = Ile_warstw + 1
  169. If Zwoje = 0 Then Ile_warstw = 0
  170.  
  171. Locate 2 , 6
  172. If Ile_warstw < 10 Then
  173. Lcd "  "                                                    'zmniejszyć o jedną spację
  174. End If
  175. Lcd Ile_warstw
  176.  
  177. If Zwoje = 0 Then Gosub Programowanie
  178. Motor1 = 128
  179. For R = 1 To 200
  180. Portb = Motor1
  181. Waitms 10                                                   ' 7
  182. Shift Motor1 , Right , 1
  183. If Motor1 = 8 Then
  184. Motor1 = 128
  185. End If
  186. If S3 = 0 Then                                              'zatrzymuje nawijanie
  187. Bitwait S3 , Set
  188. Waitms 20
  189. Gosub Programowanie
  190. End If
  191. Next R
  192.  
  193. Locate 2 , 1
  194. If Directionflag = 0 Then                                   ' flaga kierunkowa
  195. Lcd "--->"
  196. Gosub Motor2_prawo
  197. Else
  198. Lcd "<---"
  199. Gosub Motor2_lewo
  200. End If
  201. Return
  202.  
  203. Motor2_lewo:
  204. Motor2 = 8
  205. For R = 1 To Srednica
  206. Portb = Motor2
  207. Waitms 5                                                    '50                                                   '200
  208. Shift Motor2 , Right , 1
  209. If Motor2 = 0 Then
  210. Motor2 = 8
  211. End If
  212. Next R
  213. Return
  214.  
  215. Motor2_prawo:
  216. Motor2 = 1
  217. For R = 1 To Srednica
  218. Portb = Motor2
  219. Waitms 5                                                    '50
  220. Shift Motor2 , Left , 1
  221. If Motor2 = 16 Then
  222. Motor2 = 1
  223. End If
  224. Next R
  225. Return
Testowałem program bez silników z ośmioma LEDami.
Sterowanie silników jest ok, ale chciałbym poprawić zapis na LCD
  1. Locate 1 , 12
  2. Lcd Turns
tak aby wartość zmiennej "Turns" nie zerowała się po skończeniu nawijania.
Druga sprawa to "odchudzenie" kodu jeśli to możliwe.

Pozdrawiam. Stefan
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: niveasoft » 17 sie 2020, 11:34

Niestety Tiny2313 ma tylko 2KB Flash a sama obsługa wyświetlacza zajmuje około 1KB. Stąd to obciążenie.
Jeśli podłączyłbyś LCD do jednego portu to mógłbyś skorzystać z biblioteki LCD4.LIB https://wiki.mcselec.com/bavr/LCD4.LIB i oszczędzić sporo miejsca.

Tak na szybko udało mi się oryginalny program odchudzić z 99% do 97%.
Potem sprawdziłem jeszcze jeden myk. Jesli nie potrzebujesz nawijać więcej niż 65535 zwojów to możesz zamiast Long użyć Word i wtedy użyć biblioteki $lib "mcsbyteint.lbx"
W ten sposób kod maleje do 87% ;) O tym zerowaniu zmiennej zapomniałem. Napisz dokładniej o co chodzi. Zajrzę później.
  1.     '16.08.2020
  2. $regfile = "attiny2313.dat"
  3. $crystal = 8000000
  4. $swstack = 8
  5. $hwstack = 14
  6. $framesize = 24
  7.  
  8. Const 65535_only = 1
  9. #if 65535_only
  10.  $lib "mcsbyteint.lbx"
  11.  Dim Turns As Word                                          'zamienia siÄ™
  12.  Dim Turning As Word                                        'obracenie
  13. #else
  14.  Dim Turns As Long                                          'zamienia siÄ™
  15.  Dim Turning As Long                                        'obracenie
  16. #endif
  17.  
  18. Config Lcdpin = Pin , Db7 = Portd.3 , Db6 = Portd.2 , Db5 = Porta.0 , Db4 = Porta.1 , E = Portd.1 , Rs = Portd.0
  19. Config Lcd = 16x2
  20. Cursor Off
  21. Cls
  22.  
  23. Locate 1 , 1 : Lcd "Nawijerka  16.08"
  24. Wait 1
  25.  
  26. Cls
  27.  
  28. Config Portb = Output
  29.  
  30. 'Portd.6 = 1
  31. 'Portd.5 = 1
  32. 'Portd.4 = 1
  33. Portd = Portd Or &B0111_0000
  34.  
  35. S3 Alias Pind.6                                             'Enter
  36. S2 Alias Pind.5                                             'plus
  37. S1 Alias Pind.4                                             'minus
  38.  
  39. Dim R As Byte
  40. Dim Directionflag As Byte                                   'flaga kierynkowa
  41. Dim Layers As Byte                                          'warstwy
  42. Dim Zw_1war As Word                                         'ile zwojow w jednej warstwie
  43. Dim Srednica As Byte                                        'srednica
  44. Dim Motor1 As Byte
  45.  
  46. Dim Motor2 As Byte
  47. Dim Layercount As Word                                      'ilosc nawinietych zwojow w warstwie
  48. Dim Zwoje As Word                                           'zmienna pomocnicza do liczenia w dol‚ do zera
  49. Dim Ile_warstw As Word
  50.  
  51. Zwoje = 6
  52. Zw_1war = 2
  53. Srednica = 5
  54.  
  55. Locate 2 , 1 : Lcd "--->"
  56. Do
  57.    Gosub Programowanie
  58. Loop
  59. End
  60.  
  61. Programowanie:
  62.  
  63.    Turns = Zwoje
  64.    Portb = &B00000000
  65.    Locate 1 , 1
  66.    Lcd "Zwoje:"
  67.  
  68.    Do
  69.       Locate 1 , 11 : Lcd "     "
  70.       Locate 1 , 11 : Lcd Turns
  71.       If S1 = 0 Then
  72.          Decr Turns
  73.       End If
  74.       If S2 = 0 Then
  75.          Incr Turns
  76.       End If
  77.       Zwoje = Turns                                         'zwoje
  78.       If S3 = 0 Then
  79.          Bitwait S3 , Set
  80.          Waitms 20
  81.          Gosub Ilosc_zw_warstwa
  82.       End If
  83.       Waitms 120
  84.    Loop
  85. Return
  86.  
  87. Ilosc_zw_warstwa:
  88.    Cls
  89.    Lcd "zw_1war:"                                              'liczba zwojĂłw w warstwie
  90.    Do
  91.  
  92.     'Locate 1 , 11
  93.     'Lcd "     "
  94.       Locate 1 , 11
  95.       Lcd Zw_1war
  96.       Waitms 250
  97.       If S1 = 0 Then
  98.          Decr Zw_1war
  99.       End If
  100.       If S2 = 0 Then
  101.          Incr Zw_1war
  102.       End If
  103.       If S3 = 0 Then
  104.          Bitwait S3 , Set
  105.          Waitms 20
  106.          Gosub Srednica_drutu
  107.       End If
  108.    Loop
  109. Return
  110.  
  111. Srednica_drutu:
  112.    Cls
  113.    Lcd "Srednica: 0," ;
  114.    Waitms 250
  115.    Do
  116.     'Locate 1 , 13
  117.       Lcd "     "
  118.       Locate 1 , 13
  119.       Lcd Srednica ; "mm"
  120.       Waitms 250
  121.       If S1 = 0 Then
  122.          Decr Srednica
  123.          If Srednica = 101 Then
  124.             Srednica = 100
  125.          End If
  126.       End If
  127.       If S2 = 0 Then
  128.          Incr Srednica
  129.          If Srednica = 0 Then
  130.             Srednica = 1
  131.          End If
  132.       End If
  133.       If S3 = 0 Then
  134.          Bitwait S3 , Set
  135.          Waitms 20
  136.  
  137.  
  138.          Gosub Work
  139.       End If
  140.    Loop
  141. Return
  142.  
  143. Work:
  144.    Cls
  145.    Directionflag = 0                                           'flaga kierunkowa
  146.    Layercount = 0                                              'liczba warstw      ?
  147.    Motor2 = 8
  148.  
  149.  
  150.    Locate 1 , 1 : Lcd "Nawija..."
  151.    For Turning = 1 To Turns                                    'turning-obracanie =1 to turns- zmienia siÄ™
  152.       Locate 1 , 12 : Lcd Turns                             ' Turning
  153.  
  154.       Incr Layercount                                             'liczba warstw   ???
  155.       If Layercount = Zw_1war Then
  156.          If Directionflag = 0 Then Directionflag = 1 Else Directionflag = 0       'flaga kierunkowa      '
  157.          Layercount = 0
  158.       End If
  159.       Gosub 1_obrot
  160.  
  161.    Next
  162. Return
  163.  
  164. 1_obrot:
  165.    Decr Zwoje                                               'zwoje do nawinięcia
  166.    Locate 2 , 12
  167.    Select Case Zwoje
  168.     Case Is < 10 : Lcd "   "
  169.     Case Is < 100 : Lcd "  "
  170.    End Select
  171.    Lcd Zwoje
  172.  
  173.    Ile_warstw = Zwoje / Zw_1war
  174.    Incr Ile_warstw
  175.    If Zwoje = 0 Then Ile_warstw = 0
  176.  
  177.    Locate 2 , 6
  178.    If Ile_warstw < 10 Then
  179.       Lcd "  "                                                    'zmniejszyć o jedną spację
  180.    End If
  181.    Lcd Ile_warstw
  182.  
  183.    If Zwoje = 0 Then Gosub Programowanie
  184.    Motor1 = 128
  185.    For R = 1 To 200
  186.       Portb = Motor1
  187.       Waitms 10                                                   ' 7
  188.       Shift Motor1 , Right , 1
  189.       If Motor1 = 8 Then
  190.          Motor1 = 128
  191.       End If
  192.       If S3 = 0 Then                                              'zatrzymuje nawijanie
  193.          Bitwait S3 , Set
  194.          Waitms 20
  195.          Gosub Programowanie
  196.       End If
  197.    Next R
  198.  
  199.    Locate 2 , 1
  200.    If Directionflag = 0 Then                                   ' flaga kierunkowa
  201.       Lcd "--->"
  202.       Gosub Motor2_prawo
  203.    Else
  204.       Lcd "<---"
  205.       Gosub Motor2_lewo
  206.    End If
  207. Return
  208.  
  209. Motor2_lewo:
  210.    Motor2 = 8
  211.    For R = 1 To Srednica
  212.       Portb = Motor2
  213.       Waitms 5                                                    '50                                                   '200
  214.       Shift Motor2 , Right , 1
  215.       If Motor2 = 0 Then
  216.          Motor2 = 8
  217.       End If
  218.    Next R
  219. Return
  220.  
  221. Motor2_prawo:
  222.    Motor2 = 1
  223.    For R = 1 To Srednica
  224.       Portb = Motor2
  225.       Waitms 5                                                    '50
  226.       Shift Motor2 , Left , 1
  227.       If Motor2 = 16 Then
  228.          Motor2 = 1
  229.       End If
  230.    Next R
  231. Return
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: sp3ots » 17 sie 2020, 11:50

Dziękuję za poprawki.

Dziękuję za odchudzenie, w moim Bascomie DEMO 2079 program zajmuje 87% pamięci.

Program do zakończenia nawijania działa poprawnie, ( liczenie w dół ilość zwojów =0, liczenie w dół ilość warstw=0, zwoje do nawinięcia =0, to chciałem aby po nawinięciu pozostało ). Do tej pory program działa dobrze.

Pokazują się same zera przedtem była możliwość wpisania kolejnych zwojów do nawinięcia, od zera można dodać ilość zwojów, ale kiedy nacisnę S3 aby przejść do zmiany nastawy ilości zwojów w warstwie, na LCD górna linia robi się cała czarna, dół bez napisów, przyciski nie reagują.
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: sp3ots » 17 sie 2020, 18:24

Tak miał działać program:
Włączenie:
na LCD pojawia się Zwoje: ilość wstępnie zapisana w programie.
S1 zmniejsza ilość zwojów, S2 zwiększa
S3 wchodzi kolejno w zmiany ilości zwojów w każdej warstwie
S1 zmniejsza ilość zwojów w jednej warstwie, S2 zwiększa
S3 wchodzi do zmiany ustawień średnicy drutu
S1, S2 jak wyżej
S3 kończy zmiany i rozpoczyna nawijanie.
W czasie nawijania wciśnięcie S3 powoduje zatrzymanie pracy nawijarki i wejście do MENU.
Można wtedy modyfikować wszystkie trzy parametry.
S3 włącza nawijanie.
Po skończonej pracy nawijarki na LCD pojawiają wszystkie parametry wyzerowane.
Na LCD widoczne są kierunki nawijania kolejnych warstw ( strzałki - prawo/lewo ).

Chciałbym aby parametr zwoje pozostał, w tej chwili zeruje się razem z pozostałymi parametrami.
LCD jest na różnych portach.
Zaremowałem tą linię:
$lib "mcsbyteint.lbx"
teraz program działa, kod zajmuje 93% pamięci ATTiny2313.
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: sp3ots » 07 gru 2022, 21:14

Dobry wieczór po dwóch latach !
Powróciłem do "nawijarki":
Zmiana koncepcji, dwa silniki bipolarne, dwa sterowniki TB6600, oto "program":
  1. $regfile = "attiny2313.dat"
  2. $crystal = 8000000                                          'wewnętrzny oscylator 8MHz
  3. $swstack = 8
  4. $hwstack = 14
  5. $framesize = 24
  6.  
  7. Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7
  8. 'Config Lcdpin = Pin , Db7 = Pd.3 , Db6 = Pd.2 , Db5 = Pa.0 , Db4 = Pa.1 , E = Pd.1 , Rs = Pd.0
  9. Config Lcd = 16 * 2
  10. Cursor Off
  11. Cls
  12. Locate 1 , 1
  13. Lcd "Naw  07.12.22"
  14. 'Wait 1
  15. Cls
  16. Config Pind.0 = Output
  17. Dir_1 Alias Portd.0
  18. Config Pind.1 = Output
  19. Pul_1 Alias Portd.1
  20. Config Pind.2 = Output
  21. Pul_2 Alias Portd.2
  22. Config Pind.3 = Output
  23. Ena_1 Alias Portd.3
  24. Config Pina.1 = Output
  25. Dir_2 Alias Porta.1
  26.  
  27.  
  28.  
  29. Config Pind.6 = Input
  30. Portd.6 = 1
  31. Config Pind.5 = Input
  32. Portd.5 = 1
  33. Config Pind.4 = Input
  34. Portd.4 = 1
  35. S3 Alias Pind.6                                             'Enter
  36. S2 Alias Pind.5                                             'plus
  37. S1 Alias Pind.4                                             'minus
  38.  
  39. Dim Licz As Integer
  40. Dim R As Integer                                            'Byte
  41. Dim Directionflag As Bit                                    'flaga kierynkowa
  42. Dim Layers As Byte                                          'warstwy
  43. Dim Zw_1war As Word                                         'ile zwojow w jednej warstwie
  44. Dim Srednica As Byte                                        'srednica
  45. Dim Motor1 As Byte
  46. Dim Turns As Word                                           'Long                                           'zamienia siÄ™
  47. Dim Turning As Word                                         'obracenie
  48. Dim Motor2 As Byte
  49. Dim Layercount As Word                                      'ilosc nawinietych zwojow w warstwie
  50. Dim Zwoje As Word                                           'zmienna pomocnicza do liczenia w dol‚ do zera
  51. Dim Ile_warstw As Word
  52. Dim Zwoje_lcd As Word
  53. Zwoje = 10
  54. Zw_1war = 2
  55. Srednica = 5
  56.  
  57. 'Locate 2 , 1
  58. 'Lcd "--->"
  59. Do
  60. Gosub Programowanie
  61. Loop
  62. End
  63.  
  64. 'Zwoje_lcd = Zwoje
  65. Programowanie:
  66.  
  67. 'Zwoje_lcd = 0
  68.  
  69. Turns = Zwoje
  70. 'Portb = &B00000000
  71. Locate 1 , 1
  72. Lcd "Zwoje:"
  73.  
  74. Do
  75. Locate 1 , 11
  76. If Turns < 10 Then Lcd " "
  77. If Turns < 100 Then Lcd " "
  78. If Turns < 1000 Then Lcd " "
  79.  
  80. Lcd Turns
  81. If S1 = 0 Then
  82. Decr Turns
  83. End If
  84. If S2 = 0 Then
  85. Incr Turns
  86. End If
  87. Zwoje = Turns                                               'zwoje
  88. If S3 = 0 Then
  89. Bitwait S3 , Set
  90. Waitms 20
  91. Gosub Ilosc_zw_warstwa
  92. End If
  93. Waitms 200
  94. Loop
  95. Return
  96.  
  97. Ilosc_zw_warstwa:
  98. Cls
  99. Lcd "zw_1war:"                                              'liczba zwojĂłw w warstwie
  100. Do
  101.  
  102. Locate 1 , 11
  103. If Zw_1war < 10 Then Lcd " "
  104.  
  105. Lcd Zw_1war
  106. If S1 = 0 Then
  107. Decr Zw_1war
  108. End If
  109. If S2 = 0 Then
  110. Incr Zw_1war
  111. End If
  112. If S3 = 0 Then
  113. Bitwait S3 , Set
  114. Waitms 20
  115. Gosub Srednica_drutu
  116. End If
  117. Waitms 200
  118. Loop
  119. Return
  120.  
  121. Srednica_drutu:
  122. Cls
  123. Lcd "Srednica: 0,"
  124.  
  125. Do
  126. 'Locate 1 , 13
  127. Lcd "     "
  128. Locate 1 , 13
  129. Lcd Srednica ; "mm"
  130. If S1 = 0 Then
  131. Decr Srednica
  132. If Srednica = 101 Then
  133. Srednica = 100
  134. End If
  135. End If
  136. If S2 = 0 Then
  137. Incr Srednica
  138. If Srednica = 0 Then
  139. Srednica = 1
  140. End If
  141. End If
  142. If S3 = 0 Then
  143. Bitwait S3 , Set
  144. Waitms 20
  145. Gosub Work
  146. End If
  147. Waitms 200
  148. Loop
  149. Return
  150.  
  151. Work:
  152. Cls
  153. Directionflag = 0                                           '0                                           'flaga kierunkowa
  154. Layercount = 0                                              'liczba warstw      ?
  155. Motor2 = 8
  156.  
  157.  
  158. Locate 1 , 1
  159. Lcd "Nawija..."
  160. Locate 2 , 1
  161. Lcd "--->"
  162. For Turning = 1 To Turns                                    'turning-obracanie =1 to turns- zmienia siÄ™
  163. Locate 1 , 11
  164. If Turns < 10 Then Lcd "  "
  165. If Turns < 100 Then Lcd " "
  166.  
  167. Lcd Turns                                                   ' Turning
  168.  
  169. Incr Layercount                                             'liczba warstw   ???
  170. If Layercount = Zw_1war Then                                '
  171. Directionflag = Not Directionflag                           'flaga kierunkowa
  172. Layercount = 0
  173. End If
  174. Gosub 1_obrot
  175.  
  176. Next
  177. Return
  178.  
  179. 1_obrot:
  180. 'Decr Zwoje
  181. Incr Zwoje_lcd
  182. Locate 2 , 11
  183. If Zwoje_lcd < 10 Then Lcd " "
  184. Lcd Zwoje_lcd
  185. If Zwoje_lcd = Zwoje Then
  186. Zwoje_lcd = 0
  187. 'End If
  188. Gosub Programowanie
  189. End If
  190.  
  191. Ile_warstw = Zwoje / Zw_1war
  192. 'Ile_warstw = Ile_warstw + 1
  193. If Zwoje = 0 Then Ile_warstw = 0
  194.  
  195. Locate 2 , 6
  196. If Ile_warstw < 10 Then Lcd "  "                            'zmniejszyć o jedną spację
  197. Lcd Ile_warstw
  198.  
  199. If Zwoje = 0 Then Gosub Programowanie
  200. Motor1 = 128
  201. For R = 1 To 800                                            '0
  202. Toggle Pul_1
  203.  
  204. 'Dir_1 = 1
  205. 'Portb = Motor1
  206. Waitms 1                                                    ' 7
  207. 'Shift Motor1 , Right , 1
  208.                                                          'if Motor1 = 8 Then
  209. 'Motor1 = 128
  210. 'End If
  211. If S3 = 0 Then                                              'zatrzymuje nawijanie
  212. Bitwait S3 , Set
  213. Waitms 20
  214. 'Gosub Ilosc_zw_warstwa                                      ' Programowanie
  215. Gosub Programowanie
  216.  
  217. End If
  218. Next R
  219.  
  220. Locate 2 , 1
  221. If Directionflag = 0 Then                                   ' flaga kierunkowa
  222. Lcd "--->"
  223. Gosub Motor2_prawo
  224. Else
  225. Lcd "<---"
  226. Gosub Motor2_lewo
  227. End If
  228. Return
  229.  
  230. Motor2_lewo:
  231. 'Dir_2 = 0
  232. Motor2 = 0                                                  '8
  233. For R = 1 To Srednica
  234.  
  235. Incr Licz
  236. 'For Licz = 1 To 800                                         '0
  237. Licz = 0
  238. Toggle Pul_2
  239.  'Next Licz
  240. 'If Motor2 = 0 Then
  241. 'Toggle Pul_2
  242. Waitms 10
  243.  
  244. 'Portb = Motor2
  245. 'Waitms 500                                                  '50                                                   '200
  246. 'Shift Motor2 , Right , 1
  247. 'If Motor2 = 0 Then                                          '0
  248. 'Motor2 = 8                                                  '8
  249. 'End If
  250. Next R
  251. Return
  252.  
  253. Motor2_prawo:
  254. 'Dir_2 = 1
  255. Locate 2 , 1
  256. Lcd "--->"
  257.  
  258. Motor2 = 1                                                  '1
  259. For R = 1 To Srednica
  260.  
  261. Incr Licz
  262. 'For Licz = 1 To 800                                         '0
  263. 'Licz = 0
  264. Toggle Pul_2
  265. Waitms 10
  266. 'Next Licz
  267.  
  268. 'Portb = Motor2
  269. 'Waitms 500                                                  '50
  270. 'Shift Motor2 , Left , 1
  271. 'If Motor2 = 16 Then                                         '16
  272. 'Motor2 = 0                                                  '1
  273. 'End If
  274. Next R
  275. Return
  276.  
Silnik nr. 1 odpowiada za nawijanie - ta część programu działa poprawnie.
Silnik nr. 2 odpowiada za posuw lewo/prawo - tu mam problem, nie umiem zmusić sterownika TB6600 aby silnik wykonał jeden obrót.

Sterowniki ustawione na krok 200.
Proszę o pomoc.

W programie są pozostawione, zaremowane fragmenty sterowania silnikami unipolarnymi przez klucze tranzystorowe.

Pozdrawiam. Stefan
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: niveasoft » 07 gru 2022, 22:08

Stefan czy Jacek?
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A

Post autor: Jacek » 07 gru 2022, 22:12

Witam - nie mój temat ;)
pozdrawiam Jacek.
ODPOWIEDZ