सर्किट
ठीक है, जब मैंने यह प्रश्न देखा तो मैंने यहाँ एक खाता बनाया। अपने प्रश्न को संपादित करने में सक्षम नहीं हूं ताकि मैं आपके द्वारा किए गए टाइपो को सही कर सकूं। मेरा मानना है कि आप आरई के बजाय समानांतर में आरसी श्रृंखला सर्किट का मतलब था (यदि यह है, तो मुझे एक भी सुराग नहीं है कि इसका क्या मतलब है)
लगता है एनालॉग सर्किट जिसे आप सी का उपयोग करके अनुकरण करना चाहते हैं, ऐसा कुछ दिखता है
Ci
|------| |--------------|
| Rp |
|----/\/\/\/\-----------|
| Rd Cd |
Rf |----/\/\/\---| |-------|
Vin o----/\/\/\---| |
| |\ |
| | \ |
|----|- \ |
| \ |
| \-------------|---------o Vout
| /
| /
|+ /
----| /
| |/
|
|
___|___ GND
_____
___
_
LEGEND:
Vin is the input signal.
Vout is the Output.
Rp controls the propotional term ( P in PID)
Ci controls the Integral term ( I id PID)
Rd and Cd controls the differential term ( D in PID)
Rf is the gain control, which is common to all of the above controllers.
(मैं इसे आकर्षित करने के लिए अपने आग्रह का विरोध नहीं कर सका क्योंकि मैं आपको बताना चाहता था कि विद्युत / इलेक्ट्रॉनिक्स इंजीनियर छवियों के बिना मंचों और ईमेल में कैसे संवाद करते थे ... और हम सिर्फ कूरियर, निश्चित चौड़ाई फ़ॉन्ट से क्यों प्यार करते हैं)
मुझे यह स्वीकार करना चाहिए कि जिस सर्किट का आप उपयोग कर रहे हैं, वह सेटअप के लिए सरल है, लेकिन गणितीय रूप से बहुत जटिल है, जब यह सिस्टम के प्रोपोशनल, इंटीग्रल और व्युत्पन्न स्थिरांक को एक वांछित मूल्य पर व्यक्तिगत रूप से संभव नहीं करता है।
मैं दृढ़ता से सुझाव देता हूं कि आप अध्ययन के लिए इस स्रोत से सर्किट का उपयोग करें ।
भले ही स्थापित करने के लिए थोड़ा थकाऊ हो, गणितीय रूप से इसका विश्लेषण करने में बहुत सरल है क्योंकि आप इसे आदर्श गणितीय के बजाय सीधे मानक गणितीय रूप से संबंधित कर सकते हैं।
अंत में वाउट एक मोटर को नियंत्रित करने के लिए जाता है या जिसे नियंत्रित करने की आवश्यकता होती है। और विन प्रोसेस चर वोल्टेज है।
सी (समुद्र?) में अपने पैरों को गीला होने से पहले?
मुझे लगता है कि आप डिजिटल कनवर्टर से एनालॉग के कुछ प्रकार के संकेतों को पढ़ रहे हैं। यदि नहीं, तो आपको इनपुट के रूप में सिग्नल का अनुकरण करना होगा।
यदि हमारे पास मानक रूप का उपयोग कर रहे हैं,
मान लें कि लूप रनिंग टाइम काफी छोटा है (एक धीमी प्रक्रिया), हम आउटपुट की गणना के लिए निम्न फ़ंक्शन का उपयोग कर सकते हैं,
output = Kp * err + (Ki * int * dt) + (Kd * der /dt);
कहाँ पे
Kp = Proptional Constant.
Ki = Integral Constant.
Kd = Derivative Constant.
err = Expected Output - Actual Output ie. error;
int = int from previous loop + err; ( i.e. integral error )
der = err - err from previous loop; ( i.e. differential error)
dt = execution time of loop.
जहां शुरू में 'डेर' और 'इंट' शून्य होगा। यदि आप लूप फ्रीक्वेंसी को 1 KHz कहने के लिए कोड में देरी फ़ंक्शन का उपयोग करते हैं तो आपका dt 0.001 सेकंड होगा।
सी में खींच रहा है
मुझे C में PID के लिए यह उत्कृष्ट कोड मिला , हालांकि यह इसके हर पहलू को कवर नहीं करता है, फिर भी यह एक अच्छा है।
//get value of setpoint from user
while(1){
// reset Timer
// write code to escape loop on receiving a keyboard interrupt.
// read the value of Vin from ADC ( Analogue to digital converter).
// Calculate the output using the formula discussed previously.
// Apply the calculated outpout to DAC ( digital to analogue converter).
// wait till the Timer reach 'dt' seconds.
}
यदि हम एक धीमी प्रक्रिया लेते हैं, तो हम निम्न आवृत्ति का उपयोग कर सकते हैं जैसे कि dt >>> एकल लूप के लिए कोड निष्पादन समय (अब तक की तुलना में अधिक)। ऐसे मामलों में हम टाइमर के साथ दूर कर सकते हैं और इसके बजाय एक देरी फ़ंक्शन का उपयोग कर सकते हैं।