قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

مبتسم
:: مهندس ::
تاريخ التسجيل: May 2011
المشاركات: 13
نشاط [ مبتسم ]
قوة السمعة:0
قديم 28-12-2011, 06:17 PM المشاركة 1   
افتراضي كيف يمكن تصميم pi controller باستخدام pic16f877a Twitter FaceBook Google+



بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته


كيف يمكن تصميم pi controller باستخدام pic16f877a ؟؟

اعلانات

مبتسم
:: مهندس ::
تاريخ التسجيل: May 2011
المشاركات: 13
نشاط [ مبتسم ]
قوة السمعة:0
قديم 29-12-2011, 04:11 AM المشاركة 2   
ha


أليس هناك إجابة ؟؟؟

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 701
نشاط [ hamzazayyad ]
قوة السمعة:0
قديم 29-12-2011, 09:23 AM المشاركة 3   
ha


اكيد ستحصل على جواب لكنه يحتاج مجهود منك لانك ستتعامل مع
digital control والمعادلات موجوده ومتوفره

واليك هذ الرابط فهي تعتمد على iterative method

http://lorien.ncl.ac.uk/ming/digicon...math/dpid1.htm

ولا تنسونا من صالح دعائكم


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:99
قديم 29-12-2011, 01:31 PM المشاركة 4   
x6


الكود التالى عبارة عن
PID Controller
تم تصميمه ليعمل عل
877A
يمكنك الرجوع للكتاب التالى
Microcontroller Based
Applied Digital Control
وهذا هو الكود
كود:
#define  DA_Write PORTC.B0
float a0,a1,a2,b_1,b_2,M1,M2,rk,rk_1,rk_2,ek,sk;
long yk,uk;
void Inatialize_AD(){
ADCON1=0b00000001;   //ALL PORT A AS Analog AND refrance are AN3
ADCON0=0x41;        //Select AN0
}
void Inatialize_TMR0(){
/*OPTION_REG.B5=0; //TMR0 Clock Source Select bit
OPTION_REG.PSA=0; // Prescaler is assigned to the Timer0 module
OPTION_REG.PS0=1;
OPTION_REG.PS1=0;
OPTION_REG.PS2=1;  //Set pre-scaler to 64*/
OPTION_REG=0b00000101;
TMR0=100;
INTCON.GIE=1;
INTCON.T0IE=1;
INTCON.T0IF=0;
}
void Read_AD(){
   yk=(long)ADC_Read(0);
   yk=yk*5000;  // Convert to
   yk=yk/1023;  // MV  OR Convert from level to voltage
}
void interrupt(){
PORTD=~PORTD;
 TMR0=100;
 Read_AD();
 ek = sk - yk; /* Calculate error term */
 rk = ek + M1;
 yk = a0*rk + M2; /* Calculate output */
 uk = (yk*256)/5000; //Convert to Level again
 PORTB = uk; /* Send to PORT B */
 DA_Write = 0; /* Write to D/A converter */
 DA_Write = 1;
 rk_2 = rk_1; /* Update variables */
 rk_1 = rk;
 M1 = -b_1*rk_1 - b_2*rk_2;
 M2 = a1*rk_1 + a2*rk_2;
 INTCON.T0IF= 0; /* Re-enable timer interrupts */
}
void main() {
  TRISD=0;
  PORTD=0;
  INTCON.GIE=1;
  INTCON.T0IE=1;
  a0 = 1;      a1 = 0.8;      a2 = 1.2;
  b_1 = 1.85;   b_2 = 0.92;
  M1 = 0;       M2 = 0;        rk = 0;    rk_1 = 0;   rk_2 = 0;
  sk = 1.0;
  TRISA = 1; /* RA0 (AN0) is input */
  TRISB = 0; /* PORT B is output */
  TRISC = 0; /* RC0 is output */
  DA_Write = 1; /* Disable D/A converter */
  Inatialize_AD(); /* Initialize A/D converter */
  Inatialize_TMR0(); /* Initialize timer interrupts */
for(;;); /* Wait for an interrupt */
}

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:04 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025