سلام ... من دوباره اومدم :redface: ... برای پروژم قصد دارم یک کنترل کننده PID رو توسط میکرو پیاده سازی کنم ... رابطه مربوطه را که از تبدیل z بدست میاد و در واقع همان روابط انتگرال و مشتق خودمون در حوزه گسسته است را دارم ... مشکل من اینجاست که دو مقدار آنالوگ را باید بخوانم و باتوجه به اونها کنترلر PID مو طراحی کنم .
موقع کار کردن با adc وقتی با یک کانال کار میکنم درست جواب میده و مشکلی نداره . اما وقتیکه دو تا کانال را هم زمان میخوام بخونم ، اشتباه میکنه ... به اسن صورت که یک کانال را درست نشون میده ، اما دیگری را مقداری نزدیک به کانال اولی نشون میده و اصلا ربطی به مقدار اصلی خودش نداره . مثلا چون من از ده بیت استفاده میکنم بزرگترین عددم 1024 است .... یکی را 230 نشون میده مثلا ... دیگری را 320 ... و هر چی این یکی را تغییر میدهد ، اون یکی هم متناسب باهاش تغییر میکنه ... در صورتیکه وقتی با مولتی متر چک کردم دیدم اون یکی ثابته و نباید تغییری رو نشون بده !! برنامه را در ccs نوشتم و تقریبا هیچ دستور گمراه کننده و اشتباهی به نظرم نمیاد که بکار برده باشم .
main()
{
int16 a1=50;
int16 a2=50;
set_tris_d (0x0);
lcd_init();
setup_port_a( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
while (true)
{
set_adc_channel( 0 );
a1 = Read_ADC();
set_adc_channel( 2 );
a2 = Read_ADC();
lcd_gotoxy(1,1);
lcd_putc(" "
lcd_gotoxy(1,2);
lcd_putc(" "
lcd_gotoxy(1,1);
printf (lcd_putc," %lu",a1);
printf (lcd_putc," %lu",a2);
delay_ms(10);
میدونم که توی این فروم همه ccs باز هستند ... کسی میتونه بگه اشکال کارم کجاست ؟
موقع کار کردن با adc وقتی با یک کانال کار میکنم درست جواب میده و مشکلی نداره . اما وقتیکه دو تا کانال را هم زمان میخوام بخونم ، اشتباه میکنه ... به اسن صورت که یک کانال را درست نشون میده ، اما دیگری را مقداری نزدیک به کانال اولی نشون میده و اصلا ربطی به مقدار اصلی خودش نداره . مثلا چون من از ده بیت استفاده میکنم بزرگترین عددم 1024 است .... یکی را 230 نشون میده مثلا ... دیگری را 320 ... و هر چی این یکی را تغییر میدهد ، اون یکی هم متناسب باهاش تغییر میکنه ... در صورتیکه وقتی با مولتی متر چک کردم دیدم اون یکی ثابته و نباید تغییری رو نشون بده !! برنامه را در ccs نوشتم و تقریبا هیچ دستور گمراه کننده و اشتباهی به نظرم نمیاد که بکار برده باشم .
main()
{
int16 a1=50;
int16 a2=50;
set_tris_d (0x0);
lcd_init();
setup_port_a( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
while (true)
{
set_adc_channel( 0 );
a1 = Read_ADC();
set_adc_channel( 2 );
a2 = Read_ADC();
lcd_gotoxy(1,1);
lcd_putc(" "
lcd_gotoxy(1,2);
lcd_putc(" "
lcd_gotoxy(1,1);
printf (lcd_putc," %lu",a1);
printf (lcd_putc," %lu",a2);
delay_ms(10);
میدونم که توی این فروم همه ccs باز هستند ... کسی میتونه بگه اشکال کارم کجاست ؟
دیدگاه