Witam
Koledzy jestem w trakcie projektowania sterownika silownika z wbudowanym potencjometrem położenia. Sterownik ma zadanie proporcjonalnego wysuwania/wsuwania tłoczyska siłownika w zależnosci od połozenia potencjometru obrotowego. Dodatkowo ma być mozliwosc regulacji wysuwu siłownika za pomocą przycisków.
Całosć zaplanowałem tak że w normalnym trybie pracy siłownik reguluje sie potencjometrem. Położenie potencjometru zadawczego jest zczytywane przez jeden przetwornik A/C i porównywane z położeniem potencjometru w siłowniku. Mostek ktory steruje siłownikiem jest tak długo wysterowany aż oba wskazania potencjometrów się zrównają (oczywiście jest pewien margines błędu). Jak wcisne przycisk recznego wysuwu lub wsuwania siłownika tryb automatyczny jest blokowany. Odblokowanie go nastepuje dopiero po wcisnieciu dodatkowego przycisku. Wówczas układ przechodzi w tryb regulacji automatycznej i wysuwa silownik do zrówanania polozenia z potencjometrem zadawczym.
Regulacja automatyczna działa bez zarzutu, problem jest z regulacja za pomocą przycisków. Układ warjuje, czasami nie pozwala wysunac siłownika, czasami wysów działa. Czasami jest tak że po wcisnieciu przycisku silownik sie wysuwa i po chwili sam chowa tak jakby zadziałała regulacja automatyczna.
Ponizej zamieszczam listing programu gdyby ktos mogl mi pomoc i wskazac co jest nie tak byłbym bardzo wdzieczny.
Pozdrawiam
Sterownik silownika Atmega 8 - prośba o pomoc
Sterownik silownika Atmega 8 - prośba o pomoc
- Załączniki
-
- sterownik.zip
- (1.43 KiB) Pobrany 290 razy
Witam
Trochę nie potrzebnie wstawiasz opóźnienia w niektóre miejsca i to również może być przyczyną problemów. Bardziej elegancko byłoby napisanie funkcji np: Declare Sub Nazwa_funkcji(jakaś zmienna). Potem w programie dalej po za pętlą główną robić
Do
Call Nazwa_funkcji()
loop
Sub Nazwa_funkcji(jakaś zmienna)
//Operacje do wykonania
End sub
W pętli głównej odwołujesz się poprzez Call Nazwa_funkcji
Dlaczego Dim P3 As Word masz taki typ zmiennej?
Ważna rzecz zabezpiecz się podczas tej operacji: P2 = P2 - 24 Gdy P2<24
Trochę nie potrzebnie wstawiasz opóźnienia w niektóre miejsca i to również może być przyczyną problemów. Bardziej elegancko byłoby napisanie funkcji np: Declare Sub Nazwa_funkcji(jakaś zmienna). Potem w programie dalej po za pętlą główną robić
Do
Call Nazwa_funkcji()
loop
Sub Nazwa_funkcji(jakaś zmienna)
//Operacje do wykonania
End sub
W pętli głównej odwołujesz się poprzez Call Nazwa_funkcji
Dlaczego Dim P3 As Word masz taki typ zmiennej?
Ważna rzecz zabezpiecz się podczas tej operacji: P2 = P2 - 24 Gdy P2<24