Stroboskopowy Miernik Obrotów


9.55556
Ocena: None Średnia: 9.6 (9 głosujących)

Prezentowany układ jest miernikiem prędkości obrotowej silników elektrycznych, a główną jego zaletą jest bezinwazyjny pomiar polegający na oświetleniu wirującego obiektu diodą LED dużej mocy. Pomiar polega na ustawieniu częstotliwości błysków zgodnej z częstotliwością obrotów (ustawieniu nieruchomego obrazu po oświetleniu światłem stroboskopowym z diody LED) za pomocą impulsatora. Pomiar można dokonywać bez zatrzymania badanego urządzenia. Układ został zbudowany w oparciu o mikrokontroler ATMEGA8, a ustawione obroty prezentowane są na wyświetlaczu LCD. Dodatkowo układ pokazuje również błąd wynikający z zaokrąglenia wyliczonych w programie wartości dla podzielnika timera, natomiast pomiary częstotliwości generowanych błysków pozwoliły zrobić z układu miernik, a nie tylko wskaźnik obrotów. Sterowanie odbywa się za pomocą enkodera obrotowego i sześcioprzyciskowej klawiatury. Całe urządzenie może być zasilane z baterii, gdyż ze względu na impulsowy charakter pracy diody całość nie pobiera dużo prądu. Układ z powodzeniem zmieści się w popularnej obudowie KM35, w której znajdzie się też miejsce na baterię 9V.

Działanie:


Schemat ideowy układu znajduje się na rysunku poniżej:

Sercem układu i jego najważniejszą częścią jest mikrokontroler U1 (ATMEGA8-16AU), który pracuje na taktowaniu z rezonatora kwarcowego X1 (16MHz). Dodatkowe kondensatory C1 (22pF) i C2 (22pF) są konieczne do poprawnej pracy rezonatora. Jako interfejs programujący wykorzystane jest złącze Prog, które zawiera zestaw sygnałów potrzebnych podczas programowania szeregowego. Złącze to jest konieczne gdyż mikrokontroler jest w obudowie SMD co uniemożliwia zaprogramowanie w układzie zewnętrznym. Kondensator C5 (100nF) filtruje zasilanie mikrokontrolera. Kondensatory C6 (100nF) i C7 (100nF) łagodzą zbocza sygnału wygenerowanego przez impulsator IMP, co ułatwia jego bezproblemową obsługę w programie. Przyciski S1 - S6 (uSwitch) stanowią dodatkową klawiaturę urządzenia. Elementem generującym błyski świetlne jest dioda LED o mocy 0.5W, jej prad ograniczony jest przez rezystor R4 (30R/2W), a sterowana jest za pomocą tranzystora T2 (BC337) i rezystora R3 (330R). Dioda podłączona jest bezpośrednio do zasilania, z pominięciem stabilizatora, aby zminimalizować wpływ impulsów prądowych na działanie mikrokontrolera i odciążyć stabilizator napięcia U2 (78L05). Kondensatory C3 (220uF) i C4 (47uF) są konieczne do poprawnej pracy stabilizatora. Prezentacja wyników pomiaru odbywa się na wyświetlaczu W1 (LCD 16x2). Jego kontrast ustawiany jest za pomocą P1 (10k) a podświetlanie jest możliwe do włączenia programowo za pośrednictwem T1 (BC556), R1 (47R) i R2 (3,3k).

Budowa:

Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Układ jest prosty w montażu, lecz zawiera elementy SMD których przylutowanie może sprawić problemy początkującym. Pracę należy rozpocząć od wlutowania dwóch zworek. Następne w kolejności powinny być kondensatory i rezystory SMD, mają to być elementy w popularnych obudowach 0805 (2x1.2mm). Następny w kolejności powinien być mikrokontroler U1, przy którym należy zwrócić uwagę na numery wyprowadzeń (przyda się tutaj rysunek montażowy w odbiciu lustrzanym). Przyciski powinny mieć długość ośki 15mm i należy je tak wlutować aby minimalnie wystawały nad wyświetlacz LCD włożony w złącze szufladkowe, będzie to ważne przy montowaniu płytki w obudowie. Podobnie sprawa wygląda z impulsatorem. Potencjometr P1 musi być w obudowie stojącej aby z boku można było poregulować kontrastem przy włożonym LCD.

Płytka została tak zaprojektowana, że z łatwością pasuje do popularnej obudowy KM35. Wszystko jest na płytce aby nie było konieczności łączenia przycisków przewodami. Przy wycinaniu dziur w obudowie można posłużyć się rysunkiem z rozkładem dziur, specjalnie przygotowanym w tym celu. Należy go wkleić w środku obudowy za pomocą taśmy i wiercić przez rysunek. Ułatwi to znacznie wykonanie obudowy.

Układ został przewidziany do zasilania 9V z baterii, jednak nic nie stoi na przeszkodzie aby wykorzystać zasilacz o napięciu 7-12V. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj. Dla montażu SMD pomocny będzie także rysunek montażowy w odbiciu lustrzanym, dostępny tutaj

Wykaz Elementów:

1x Złącze Śrubowe ARK2(podwójne)
1x Goldpin kątowy 1x6
6x uSwitch
1x Enkoder obrotowy, Impulsator z przyciskiem

1x 3,3k
1x 30R/2W
1x 47R
1x 330R
1x Potencjometr Montażowy 10k

2x 22pF
3x 100nF
1x 47uF Elektrolit
1x 220uF Elektrolit

1x Rezonator Kwarcowy 16MHz
1x Dioda LED
1x BC337
1x BC556
1x Stabilizator 78L05
1x Mikrokontroler ATMEGA8-16AU
1x Wyświetlacz LCD 16x2

Programowanie:


Kod Źródłowy do miernika został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B00000000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00111111 : Portd = &B11111011
 
 
'Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0       'mirley UPT M162
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2
 
Deflcdchar 0 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 3
Deflcdchar 1 , 24 , 8 , 8 , 8 , 8 , 8 , 8 , 24
Deflcdchar 2 , 4 , 4 , 31 , 4 , 4 , 32 , 31 , 32
 
Cls
Cursor Off Noblink
 
 
I1 Alias Pinb.1
I2 Alias Pinb.0
X01 Alias Pinb.5
X10 Alias Pinb.4
X100 Alias Pinb.3
X1000 Alias Pinb.2
Sw1 Alias Pind.6
Sw2 Alias Pind.7
Led Alias Portd.3
Light Alias Portd.2
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Config Timer1 = Timer , Prescale = 1
Enable Timer1 : On Timer1 Prztimer1
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
 Dim D As Word , A As Word , X As Long ,
 Dim Obr As Long
 Dim T As Single , T2 As Single
 
 Dim Autowysw As Byte
 Dim In1 As Bit , In2 As Bit
 Dim Tryb As Byte
 Dim Rezultat As Integer
 Dim F4ms As Bit
 Dim Div As Word
 
 Dim Div_licz As Word , Div_pulse As Byte
 Dim Licz_sw(2) As Byte
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
 Obr = 10000
 Gosub Przelicz
 
 Lcd "Obrotomierz v1.0"
 Lowerline
 Lcd "   by mirley"
 Wait 1
 Cls
 Gosub Wyswlcd
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
In1 = I1
In2 = I2
 Rezultat = 0
 Select Case Tryb
  Case 0:
   If In1 = 1 And In2 = 1 Then Incr Tryb                    'jezeli dwa rozwarte
  Case 1:
   If In1 = 1 And In2 = 0 Then Tryb = 2
   If In1 = 0 And In2 = 1 Then Tryb = 3
  Case 2:
   If In1 = 0 And In2 = 1 Then
     Rezultat = 1
     Tryb = 0
   End If
  Case 3:
   If In1 = 1 And In2 = 0 Then
     Rezultat = -1
     Tryb = 0
   End If
 End Select
 
If Rezultat <> 0 Then
   Autowysw = 11                                            '10x4ms
   A = 10
   If X01 = 0 Then A = 1
   If X10 = 0 Then A = 100
   If X100 = 0 Then A = 1000
   If X1000 = 0 Then A = 10000
 
   If Rezultat = 1 Then
      Obr = Obr + A
      If Obr > 420000 Then Obr = 420000
   Else
     Obr = Obr - A
     If Obr < 600 Then Obr = 600
   End If
 
   Gosub Przelicz
End If
 
 
If F4ms = 1 Then
  F4ms = 0
  '***********************************************
  If Sw1 = 0 Then
    Incr Licz_sw(1)
    If Licz_sw(1) = 20 Then
      Obr = Obr * 2
      If Obr > 420000 Then Obr = 420000
      Gosub Przelicz
      Gosub Wyswlcd
    End If
  Else
    Licz_sw(1) = 0
  End If
 
  If Sw2 = 0 Then
    Incr Licz_sw(2)
    If Licz_sw(2) = 20 Then
      Obr = Obr / 2
      If Obr < 600 Then Obr = 600
      Gosub Przelicz
      Gosub Wyswlcd
    End If
  Else
    Licz_sw(2) = 0
  End If
 
  If Autowysw > 1 Then
    Decr Autowysw
  Else
    If Autowysw = 1 Then
      Gosub Wyswlcd
      Autowysw = 0
    End If
  End If
  '***********************************************
End If
 
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Timer0 = 5
  Set F4ms
Return
'******** Przerwanie timer 0 Koniec ************
'************ Przerwanie timer 1 ***************
'***********************************************
Prztimer1:
  Timer1 = D                                                'max 65535
  Incr Div
  If Div >= Div_licz Then Div = 0
  If Div < Div_pulse Then Led = 1 Else Led = 0
Return
'******** Przerwanie timer 1 Koniec ************
 
'***********************************************
 Przelicz:
   If Obr >= 4800 Then
     Div_licz = 32
     Div_pulse = 1
     'wynika z parametryzacji po dokonaniu pomiarów
     T = 0.000000258 * Obr                                  ' hi
     T = T * Obr
     T2 = 0.995658 * Obr
     T = T + T2
     T = T + 85.3782
     T = 300000000 / T
   Else
     Div_licz = 256
     Div_pulse = 8
     'wynika z parametryzacji po dokonaniu pomiarów
     T = 0.0000018863 * Obr                                 'low
     T = T * Obr
     T2 = 0.999905 * Obr
     T = T + T2
     T = T + 0.1899438
     T = 37500000 / T
   End If
 
   X = T                                                    'rzutowanie
   D = 65536 - X
 
   T2 = T - X
   T = T2 / T                                               'błąd procentowy wynikający z zaokrąglenia
   T = T * Obr                                              'blad w obr/min
 
 Return
'***********************************************
Wyswlcd:
 Locate 1 , 2
 If Obr < 100000 Then Lcd " "
 If Obr < 10000 Then Lcd " "
 If Obr < 1000 Then Lcd " "
 X = Obr / 10
 Lcd X ; "."
 X = Obr Mod 10
 Lcd X
 Locate 1 , 10
 Lcd Chr(0) ; "n/min" ; Chr(1)
 
 
 Locate 2 , 2
 T = T * 100
 X = T
 If X < 10000 Then Lcd " "
 If X < 1000 Then Lcd " "
 X = X / 100
 Lcd Chr(2)
 Lcd X ; "."
 X = T
 X = X Mod 100
 If X < 10 Then Lcd "0"
 Lcd X
 Locate 2 , 10
 Lcd Chr(0) ; "n/min" ; Chr(1)
 
 
Return
'***********************************************

Kalibracja i pomiary:

Po zaprogramowaniu układu wstępną wersją programu i wyliczeniu podzielnika timera, pomiary wykazały odchyłki generowanej częstotliwości w stosunku do teoretycznie spodziewanej. Jest to spowodowane pracą z podzielnikiem timera równym 1, czasem jaki jest potrzebny na obsługę przerwania i czasem przeładowania wartości w rejestrze timera. W tabeli niżej zostały zawarte pomiary częstotliwości generowanej na wyjściu (f_p) w stosunku do częstotliwości jaka powinna być teoretycznie (f_i) oraz odpowiadające im wartości obrotów (obroty pomnożone są przez 10 aby uzyskać dokładność nastaw 0.1 obr/min).

Dane z tabelki zostały podzielone na dwie części, od 60 do 480 obr/min i drugi przedział od 480-42000 obr/min. Podział ten wynika z działania programu, w którym działają dwa zakresy pomiarowe. Na wykresach poniżej widać punkty pomiarowe (zależność obrotów teoretycznych od obrotów zmierzonych, przeliczonych z pomiaru częstotliwości) wraz z dopasowanymi krzywymi kalibracyjnymi:

Jako krzywą kalibracyjną została przyjęta zależność kwadratowa postaci:

[tex]y = a \cdot x^2 + b \cdot x +c[/tex]

gdzie y - obroty teoretyczne, x - obroty zmierzone, a,b,c - współczynniki wynikające z regresji. Dopasowanie krzywej zostało wykonane w programie gnuplot, a stałe współczynniki dopasowania dla dwóch zakresów pracy układu przedstawione zostały poniżej:

zakres 60-480 obrotów:
a= 1.88622104239405e-006 
b= 0.999905059864626 
c= 0.189869882714651 
 
zakres 480-42000 obrotów:
a= 2.54573967680295e-007 
b= 0.996905226980814 
c= 1.00037985789872 

Po wstawieniu parametrów do programu układ staje się miernikiem a nie tylko wskaźnikiem obrotów. W tabelce poniżej zostały zawarte wyniki pomiarów częstotliwości generowanej przez układ w zależności od ustawionej na wyświetlaczu. Błąd generowanej częstotliwości jest ułamkiem procenta wartości żądanej:

Zdjęcia Projektu:

ZałącznikWielkość
Schemat63.83 KB
Płytka15.87 KB
Płytka (odbicie lustrzane)15.97 KB
Płytka (6 na stronie)89.96 KB
Montowanie21.29 KB
Montowanie (odbicie lustrzane) (do lutowania SMD)21.37 KB
Maska otworów w obudowie (odbicie lustrzane)4.36 KB
Nadruk na obudowę23.76 KB
Kod źródłowy5.55 KB
Program po kompilacji (bin)4.25 KB
Program po kompilacji (hex)11.98 KB



Portret użytkownika Mx

Drżący obraz

Witam,
zmontowany układ działa, lecz problem jest taki, że mam drżący obraz oświetlanego wirnika i związku z tym nie mogę zobaczyć wyraźnie kreski, która jest narysowana na wirniku.
Czy to jest normalny objaw?

Michał

Portret użytkownika mirley

Re: Stroboskopowy miernik

U mnie działało dobrze..... spróbuj na innym wirującym obiekcie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika EDC

Stroboskopowy miernik

Dziś zbudowałem to cacko ponieważ opracowywałem sterowanie prędkością silnika DC bez jakichkolwiek czujników odczytując "Back EMF". Z powyższych względów potrzebowałem jakoś zmierzyć prędkość dla porównania. Układ spisał się na medal.
Dla ciekawskich, czytanie EMF polega na mierzeniu napięcia które generuje silnik w momencie kiedy się kręci a PWM właśnie odciął zasilanie. Napięcie to jest proporcjonalne do predkości silnika. Tak więc kiedy obciążenie silnika wzrasta to widać to na spadku napięcia generowanego przez silnik i można PWM`em podnieść dostarczaną do silnika moc.
Układ Mirleya przydał się do wyskalowania. Teraz każę mikrokontorlerowi pilnować napiecia EMF i mam stabilne obroty silnika niezależnie od obciążenia bo mikrokontroler steruje PWM`em :D

-

BARTek
Moja strona

Portret użytkownika matrix

Mały offtop

Przepraszam za mały OT ale kolega EDC zainteresował mnie tym EMF'em. Możesz kolego pokazać schemacik tego sterowania ?