(9 głosujących)
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 3,3k 2x 22pF 1x Rezonator Kwarcowy 16MHz 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:
|
|||||||||||||||||||||||||||
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ł
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.
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
Mały offtop
Przepraszam za mały OT ale kolega EDC zainteresował mnie tym EMF'em. Możesz kolego pokazać schemacik tego sterowania ?
Moja strona w powijakach