ممنون از وقتی که گذاشتید.
جناب مهندس من همون طور که فرمودید عمل کردم. فکر میکنم سرعت درست محاسبه نمیشه. برای محاسبه ی سرعت طبق برنامه زیر عمل کردم:PORTE.OUT=0x00;
PORTE.DIR=0x00;
PORTE.PIN2CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;
PORTE.PIN4CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;
PORTE.PIN6CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;
PORTE.INTCTRL=(PORTE.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
PORT_INT1LVL_OFF_gc | PORT_INT0LVL_HI_gc;
PORTE.INT0MASK=0x10;
PORTE.INT1MASK=0x00;
interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
{
if(time==0){
count++;
count1=count;
k=1;
}
while (1)
{
run_motor();
if((k==1)&&(time==255)){
speed=12*count;
error=ref-speed;
pterm=kp*error;
iterm=ki*(error+last_error)/2;
dterm=(error-last_error)*kd;
out=(pterm+iterm+dterm);
out1=out;
if(out<1) out1=out;
if(out1>2120) out1=2120;
last_error=error;
count=0;
k=0;
}
TCC0.CCD=out1;
TCC1.CCA=out1;
TCC1.CCB=out1;
}
زمان نمونه برداری توسط rtc انجام میشه. یعنی هر 500 میلی ثانیه یک اینتراپت میده و توی این اینتراپت متغیر time رو تاگل میکنه. وقتی که time=0 باشه کانتر شمارش میشه و اگر time=255 باشه وارد pi کنترلر میشه. توی این برنامه فکر میکنم speed اصلا محاسبه نمیشه. لطف میکنید راهنماییم کنید.تشکر