OneDreamCloser Δημοσ. 1 Μαρτίου 2009 Δημοσ. 1 Μαρτίου 2009 καλημερα παιδια, θα ηθελα να κανω εναν PID controller που τωρα δουλευει με double αριθμους να δουλευει με ακεραιους, οποτε χρειαζεται καποιο scaling, μηπως θα μπορουσε κανεις να ριξει καμια ιδεα σχετικα με το επισυναπτομενο αρχειο ? >#include <stdio.h> #include <stdlib.h> int main( void ) { double orig_output = 0, emb_output = 0 ; int eps, setpoint, measured, last_eps, lastlast_eps ; double DT = 0.0005, prop = 10, reset = 0, deriv = 0.2 ; double A, B, C ; int AA, BB, CC ; setpoint = 150 ; measured = 180 ; eps = (setpoint - measured) ; last_eps = 10 ; lastlast_eps = 20 ; // original orig_output += prop * ((eps - last_eps)/DT + reset * eps + deriv * (eps - 2 * last_eps + lastlast_eps)/(DT*DT)) * DT ; A = (eps - last_eps)/DT ; B = (eps - 2 * last_eps + lastlast_eps)/(DT*DT) ; C = (A + reset * eps + deriv * ; orig_output += prop * C * DT ; // embedded AA = (((eps - last_eps) << 8)/DT) ; BB = ((eps - 2 * last_eps + lastlast_eps) << 8)/(DT*DT) ; CC = (AA + reset * eps + deriv * BB) ; emb_output += prop * CC * DT ; printf("(eps - last_eps)/DT = %f \t\t\t %d \n", A, AA) ; printf("(eps - 2 * last_eps + lastlast_eps)/(DT*DT) = %f \t\t\t %d \n", B, BB) ; printf("((eps - last_eps)/DT + reset * eps + deriv * (eps - 2 * last_eps + lastlast_eps)/(DT*DT)) = %f \t\t\t %d \n", C, CC) ; printf("orig_output = %f \t\t\t %d", orig_output, emb_output) ; lastlast_eps = last_eps ; last_eps = eps ; return 0 ; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.