logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Układ do pomiaru prędkości obrotowej.

Sand_Man 03 Kwi 2010 17:09 4207 20
REKLAMA
  • #1 7916231
    Sand_Man
    Poziom 11  
    Mam do zrobienia układ mierzący obroty z trzech miejscach na stanowisku napędowym.
    Dokładność tego układy ma być rzędu 1 obr./min. Wskazania dla wszystkich czujników
    maja być wyświetlane jednocześnie na wyświetlaczu LCD.
    Sam układ pod względem elektroniki nie jest skomplikowany. Czujniki to transoptory
    oparte na TCRT5000. Sygnał z nich wychodzący to w zależności od stanu 0 lub 1
    logiczna ( czyli napięcia rzędu od 0 do 5V). Schody zaczynają się w momencie,
    gdy układ ma ożyć. Nie wiem jak zabrać się za zliczanie impulsów. Czy użyć licznika
    czy może liczyć zmiany na trzech wejściach jednego z portów uC.
    Jednostka zawiadująca układem pomiarowym to jak na razie Atmega8,
    ale nie wiem czy podoła. A że zabawe z mikrokontrolerami dopiero zacząłem, dlatego tu moje pytanie.
    Czy możliwe jest zliczanie impulsów na dowolnym pinie mikrokontrolera nie
    używając liczników hardwearowych jedynie zliczając zmiany na np.: pinach 1, 2, 3 portu D za pomocą komendy PINx i jakiejś pętli np.: for?
  • REKLAMA
  • #2 7916268
    tadzik85
    Poziom 38  
    Jeśli nie licznik użyłbym przerwań. Jednak licznik jest to tego najlepszy. Można nawet hardwarowy zliczać ilość impulsów w odpowiednim okresie. Albo n liczników które zatrzymasz w momencie przerwania. Zliczanie zwykłymi wejsciami może doprowadzić do utraty impulsów.
  • #3 7917076
    nojmi
    Poziom 20  
    Możesz mierzyć czas między impulsami (a dokładnie jednym ze zboczy) pochodzącymi z TCRT5000 i na podstawie tego liczyć obroty. Impulsy podane na wejścia oczywiście z obsługą przerwań zewnętrznych i jakiś licznik do określania czasu. Wywołanie przerwania zewnętrznego zapamiętuje aktualną wartość timera a czas między impulsami określany jako aktualny - poprzedni. Przy czym trzeba tu też brać pod uwagę przepełnienie licznika.
  • #4 7917112
    tadzik85
    Poziom 38  
    Moją lub kolegi metodę wybrać powinieneś w zależności od częstotliwości impulsów generowanych. Moja lepsza jest dla dużych f kolegi dla mniejszych.
  • #5 7920041
    Konto nie istnieje
    Poziom 1  
  • #6 7920061
    tadzik85
    Poziom 38  
    Lecz jeśli jest to wystarczające może mierzyć kanały kolejno. Jeden po drugim.
  • REKLAMA
  • #7 7920096
    regrom
    Poziom 16  
    tadzik85 napisał:
    Lecz jeśli jest to wystarczające może mierzyć kanały kolejno. Jeden po drugim.


    Tak, ale kolega chce uzyskać dokładność 1 obr/min , oraz jak kolega pisze mają być jednocześnie wyświetlane, mierząc kanały kolejno w danej chwili brany pod uwagę jest tylko jeden czujnik.

    Jeszcze taka uwaga, o jakich prędkościach mówimy? Dla małych prędkości obrotowych słuszny jest pomiar czasu pomiędzy impulsami, a w większych obrotach ilość impulsów w czasie.

    Na ATmega8 może być problem z 3 czujnikami , 2 czujnik jak najbardziej, wtedy 2 timery pracują jako liczniki, a trzeci timer jako czasomierz.
  • #8 7920109
    tadzik85
    Poziom 38  
    Kolejność nie ma wpływu na to czy wyniki będą wyświetlane jednocześnie, problem będzie stanowiło jak szybko wynik zostanie w takim przypadku odświeżony. 200ms nie stanowiło by najmniejszego problemu.
  • #9 7920124
    janbernat
    Poziom 38  
    To dwa sygnały na timery jako liczniki a trzeci sygnał na przerwanie zewnętrzne.
    A trzeci timer jako zegar.
  • REKLAMA
  • #10 7920413
    Sand_Man
    Poziom 11  
    Widzę, że pojawiło się sie kilka znaków zapytania, a więc. Stanowisko, na jakim miałby być ten układ zamontowany składa sie z silnika 3 fazowego, przekładni mechanicznej połączonej z nim sprzęgłem elektromagnetycznym, hamownicy elektromagnetycznej na jednym z gniazd wyjściowych przekładni oraz mierzonego agregatu lotniczego. Założenie jest takie, aby można było określić różnice w prędkości obrotowej w 3 miejscach stanowiska. Pierwszym sprzęgle, drugim gnieździe hamownicy i trzecim gnieździe agregatu. Maksymalna prędkość, jaką można osiągnąć to około 8000 obrotów na sprzęgle, ale na wyjściach przekładni jest większa o około 1/3. Lecz ze względów bezpieczeństwa nieprzekraczana jest prędkość 4000 obrotów.

    Bardzo zależy mi na dokładności tych pomiarów. Wiem że dokładność 1 obr/min jest już i tak duża, ale jakbym mógł osiągnąć jeszcze większą dokładność to jeszcze lepiej . Ale nie od razu Rzym zbudowali. :) Z czasem układ i tak będzie ewoluował, bo w planach jest rejestracja przebiegu prędkości w czasie na jakimś nośniku danych itd. Ale to odległa przyszłość.

    A co do elektroniki układu pomiarowego. Nie jest powiedziane, że układ musi być oparty o Atmege8, mogę użyć innego uC. Przeprojektowanie układy nie stanowi problemu, problem to program, który to obsłuży.
    I jest jeszcze jeden podstawowy problem. Moje umiejętności programowania. Jestem mianowicie mocno początkujący w tej dziedzinie. A to co wam się wydaje drodzy koledzy czymś łatwym dla mnie jest jeszcze czarną magią. Na razie moje poczynania w pisaniu programów skończyły się na miganiu diodami i próbach obsługi wyświetlacza LCD.
  • #11 7920721
    Konto nie istnieje
    Poziom 1  
  • #12 7921048
    janbernat
    Poziom 38  
    3x ATtiny będzie chyba najlepsze- jak napisał atom.
    I może ATMega jako master.
    Dokładność na początek ma być 1xE-4 a zwykłe kwarce mają dryft temeraturowy 100ppm.
    No i cała reszta- rozrzut parametrów, starzenie itp.
    Proponował bym wspólny zegar dla procesorów- nie zwykły kwarc a generator kwarcowy wspólny dla wszystkich procesorów.
    Taki jak w komputerach.
  • #13 7921477
    Konto nie istnieje
    Poziom 1  
  • #14 7924350
    janbernat
    Poziom 38  
    Można też przeprosić się ze sprzętem- liczników CD czy HC74 jest sporo.
    Można je bramkować z zegara procesora.
  • #15 7925558
    kamyczek
    Poziom 38  
    W jednym z numerów EDW był opisany częstotliwościomierz który zmieniał sposób pomiary w zależności od częstotliwości , dla małych częstotliwości mierzył okres dla dużych ilość impulsów . Dla Ciebie to prawie gotowe rozwiązanie . Wystarczy dobrać czas bramkowania i odpowiednią konwersję wyniku pomiaru na wartość pokazywaną na LCD ...
  • #16 7926132
    PiotrPitucha
    Poziom 34  
    Witam
    Co do trzech przebiegów na jeden procesor to w Attiny 26 można uzyskać przerwanie od zmiany stanu na pinie, czyli spokojnie obsłużysz 3 przerwania.
    Trzeba by zerknąć które procesory mają taka właściwość, ten o którym piszę z pewnością ma.
    Piotr
  • #17 7926224
    rpal
    Poziom 27  
    Zawsze mozna użyć "silniejszego" procka który będzie miał więcej liczników i więcej wejść int różnica w cenie to mniej więcej tyle ile kilka dodatkowych bramek TTL lub minimalnie więcej choćby atmega162 masz wszystko co trzeba za cenę 8-10 PLN dodatkowym plusem jest obudowa DIP jako jedna z wersji. Wyzwalanie int na 3 liniach albo na całym porcie,chyba z 5 Timerów w rozwiązaniach można przebierać jak w ulęgałkach masz jeszcze linie JTAG-a których nie ma atmega8. Cena "sprzętu" jest w tym całym gipsie nieistotna a komfort zdecydowanie większy.
    Na początek to bym zaczął od ustalenia metody pomiaru, jeśli bedziesz mierzył ilość impulsów to zapomnij o dokładności na niskim zakresie obrotów chyba że czas poświęcony na zliczanie będzie bardzo długi.
    Jeśli zaś użyjesz pomiaru czasu między zboczami to bardzo rozważnie policz częstotliwość impulsów zegarowych tak aby nie okazało się że rodzielczość licznika nie zamknęła się np. w 32 bitach i nie starczy ci tego co oferują Timery. Tak sobie myślę że jeśli zamontować tarcze strobujące transoptor z odpowiednio dużą ilością wycięć np. 100 / 1 obrót (jako mnożnik) to nie będzie żadnym problemem po prostu mierzyć częstotliwość przebiegu w określonej jednostce czasu. Dobierając odpowiednio ten czas można nawet otrzymać w rejestrach licznika gotową wartość ilości obrotów bez żadnych działań matematycznych bo sam czas pomiaru będzie już tym dzielnikiem. Twoje 4000 obr/min to tylko 66 Hz dla strobowania 1 impulsem, pomnożenie tego np. przez 100 albo jeszcze więcej mieści się spokojnie w granicach "nadążania" uP a zdecydowanie rośnie dokładność w zakresie niskich obrotów. Może to jest jakieś rozwiązanie?
  • #18 7934636
    Sand_Man
    Poziom 11  
    Przeczytałem wasze uwagi i doszedłem do wniosku, że na razie zrezygnuje z trzech czujników i zostanę przy dwóch . Postanowiłem uruchomić układ żeby w ogóle coś liczył. Na razie dopracuje metodę liczenia aby błąd był jak najmniejszy lub całkowicie zerowy.
    A więc uC na razie pozostanie bez zmian czyli atmega8. Czujniki jak wcześniej wspomniałem TCRT5000.
    Na razie w pocie czoła stworzyłem coś takiego. Część dotycząca wyświetlacza działa gorzej z liczeniem. Nie wiem czy zabieram się do tego z dobrej strony.
    
    #include<avr/io.h> 
    #include<util/delay.h> 
    #include "HD44780.h" 
    #include "HD44780.c"
    
    int main(void)						//Program główny 
    { 
    int i;
    
    DDRC = 0x00;
    PORTC= 0xff;
    
    LCD_Initalize();					//Inicjalizacja wyświetlacza 
    
    while (1) 
    { 
    LCD_GoTo(0,0); 						// LCD_GoTo(x,y)
    LCD_WriteText("V1=");				//Wyświetlenie tekstu
    	if(bit_is_set(PINC,PC0))		// Odczyt stanu na pinie 0 portu C
    		{
    			for(i=0;i<9999;i++)
    			{
    				LCD_GoTo(3,0); 		// LCD_GoTo(x,y)
    				LCD_WriteData(i);	//Wyświetlenie prędkości
    			}
    		}
    		
    } 
    	return (0); 					//Powrót do początku programu 
    
    }
  • #19 7934716
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #20 7934742
    Sand_Man
    Poziom 11  
    Moja próba napisania programu liczącego liczbę impulsów na pinie 0 portu C i wyświetlającego ich wartość na lcd.
    Przypuszczam że marna próba. I pewnie zaraz usłysze że nie znam składni C itd.
  • #21 7935066
    rpal
    Poziom 27  
    Wybierasz sobie licznik np. 16-bitowy i konfigurujesz go tak aby aby źródlem impulsów zegarowych był sygnał zewnętrzny. Następnie za pomocą drugiego licznika już 8 bitowego definiujesz jego podstawę czasu i konfigurujesz do pracy w przerwaniach o określonym czasienp. 1 sekunda. W głównym programie umieszczasz tę konigurację, zezwalasz na przerwanie i jedyne co robisz to sprawdzasz czy już wykonano pomiar w przerwaniu i dajesz to na LCD. Przerwanie wyzwalane w regularnych odcinkach czasu odczytuje stan licznika (tego który jest wyzwalany impulsami pochodzącymi od nadajnika obrotów) ew. zamienia na postać zrozumiałą dla LCD i umieszcza wartość w jakiejś zmiennej) po czym zeruje ten licznik. I tak dookola Macieju. To jeden ze sposobów.
REKLAMA