Jestem inżynierem elektrykiem, który w pewnym sensie wcisnął się w cyfrowy świat i uczył się w drodze. Programuję procesor TI do wykonania pętli PID (proporcjonalna-całka-pochodna) , co ilustruje ten schemat:
Opiszę to również:
Wzmacniacz operacyjny z ujemnym sprzężeniem zwrotnym, z nieodwróconym uziemionym terminalem. Wejście przez zacisk ujemny. Pętla sprzężenia zwrotnego to obwód serii RE równolegle z rezystorem i wszystko równolegle z nasadką.
Czy ktoś ma pomysł, jak przekonwertować ten obwód do kodu C? Jestem trochę z tego elementu i mogę skorzystać z pomocy.
dt
w stałych, zamiast robić dodatkowe dzielenia i mnożenia w pętli.Odpowiedzi:
Obwód
Ok, właśnie utworzyłem tutaj konto, kiedy zobaczyłem to pytanie. Nie jestem w stanie edytować Twojego pytania, bym mógł poprawić literówkę, którą zrobiłeś. Myślę, że miałeś na myśli obwód serii RC równolegle zamiast RE (jeśli tak, to nie mam pojęcia, co to znaczy)
Wygląda na to, że obwód analogowy, który chcesz symulować za pomocą C, wygląda mniej więcej tak
(Nie mogłem się oprzeć mojej potrzebie narysowania tego, ponieważ chciałem powiedzieć, jak inżynierowie elektrycy / elektronicy komunikowali się na forach i wiadomościach e-mail bez zdjęć ... i dlaczego po prostu kochamy kuriera, czcionka o stałej szerokości)
Muszę wyznać, że obwód, którego używasz, jest prosty do skonfigurowania, ale jest bardzo złożony matematycznie, jeśli chodzi o dostrojenie stałych propotionalnych, całkowych i pochodnych systemu do pożądanej wartości indywidualnie, nie jest to możliwe.
Zdecydowanie sugeruję użycie obwodu z tego źródła do nauki.
Chociaż konfiguracja jest trochę uciążliwa, matematycznie jest o wiele łatwiej ją analizować, ponieważ można bezpośrednio odnieść ją do standardowej formy matematycznej zamiast idealnej.
Na koniec Vout kontroluje silnik lub cokolwiek, co wymaga kontroli. A Vin jest zmiennym napięciem procesowym.
Przed zmoczeniem stóp w C (morze?)
Zakładam, że odczytujesz sygnały z jakiegoś przetwornika analogowo-cyfrowego. Jeśli nie, musisz zasymulować sygnał jako wejście.
Jeśli korzystamy ze standardowego formularza, mamy,
Zakładając, że czas działania pętli jest wystarczająco mały (wolny proces), możemy użyć następującej funkcji do obliczenia wyniku,
gdzie
gdzie początkowo „der” i „int” wynosi zero. Jeśli użyjesz funkcji opóźnienia w kodzie, aby dostroić częstotliwość pętli do 1 KHz, wtedy dt wyniesie 0,001 sekundy.
Rysowanie w C
Znalazłem ten doskonały kod dla PID w C, chociaż nie obejmuje on wszystkich jego aspektów, mimo to jest dobry.
Jeśli weźmiemy wolny proces, możemy użyć niższej częstotliwości, aby czas wykonania kodu dt >>> dla pojedynczej pętli (znacznie większy niż). W takich przypadkach możemy zrezygnować z timera i zamiast tego użyć funkcji opóźnienia.
źródło