PIC Vietnam

Go Back   PIC Vietnam > Robotics > Điều khiển

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Điều khiển Lý thuyết điều khiển và ứng dụng lý thuyết điều khiển trong những trường hợp thực tế

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 23-06-2013, 05:16 PM   #1
hoangtuanthien
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 1
:
Thắc mắc xung điều khiển servo

chào mọi người. mình đang sử dụng servo RC96xx , như mình được viết thì đk servo cần cấp xung chu kỳ 20ms và Ton từ 1-2ms, trong chương trình dưới đây mình cho timer0 ngắt 20us, thì vậy để có được chu kì xung 20ms thì mình cho biến đếm tăng đến 1000 để điều khiển servo, và giá trị để phải nằm khoảng 100-200 thế nhưng mình mình gán giá trị để khảo sát và điều khiển servo thì tầm giá trị của nó lại nằm trong khoảng 1x-5x . mình nghĩ mãi mà không biết lý do tại sao. mong mọi người tính toán lại xem và giúp đỡ. mình đang cần đk 12 sv để làm đồ án tốt nghiếp.




#include <PIC18f4550.h>
#use delay(clock=16000000, crystal=16000000)
int16 dem;
int flag;
//int16 dem1;
//int8 sv1,sv2,sv3,sv4,sv5,sv6,sv7,sv8,sv9,sv10,sv11,sv12 ;
char const gt0[12]={39,30,32,32,43,38,35,43,26,37,36,38};
char const gtmin[12]={20,10,14,18,18,17,17,17,13,17,17,17};
char const gtmax[12]={56,40,61,55,55,54,54,54,55,54,54,54};
char const gocmax[12]={135,160,180,135,140,140,135,125,170,120,145,120} ;
char sv[12];
void dunglen();
void translate(int8 gt0,int8 gtmin, int8 gtmax,int8 gocmax,int flag,int8 gocset,gocsv);
#int_TIMER0

void TIMER0_isr(void)
{
set_timer0(216);
dem++;
//dem1++;
if(dem==100)
{
dem=0;
output_d(0x3f);
output_e(0x07);
output_high(pin_a4);
output_b(0x30);
output_toggle(pin_c1);
}
if(dem==sv[0]){output_low(pin_d0);}
if(dem==sv[1]){output_low(pin_d1);}
if(dem==sv[2]){output_low(pin_d2);}
if(dem==sv[3]){output_low(pin_d3);}
if(dem==sv[4]){output_low(pin_d4);}
if(dem==sv[5]){output_low(pin_d5);}
if(dem==sv[6]){output_low(pin_e2);}
if(dem==sv[7]){output_low(pin_e1);}
if(dem==sv[8])output_low(pin_e0);
if(dem==sv[9])output_low(pin_a4);
if(dem==sv[10])output_low(pin_b5);
if(dem==sv[11])output_low(pin_b4);
//if(dem1==20000)
//{
// dem1=0;
// sv12++;
// output_toggle(pin_c2);
//}



}
#int_TIMER1
void TIMER1_isr(void)
{

}



void main()
{
set_timer0(216);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_bit) ; //128 us overflow
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //16.3 ms overflow
enable_interrupts(INT_TIMER0);
//enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

while(true)
{
dunglen();

}
}
void dunglen()
{
sv[0]=26;
sv[1]=36;
sv[2]=27;
sv[3]=46;
sv[4]=35;
sv[5]=52;

sv[6]=51;
sv[7]=34;
sv[8]=37;
sv[9]=28;
sv[10]=28;
sv[11]=54;
}
void translate(int8 gt0,int8 gtmin, int8 gtmax,int8 gocmax,int flag,int8 gocset,gocsv)
{
int8 rate, tang;
rate=(gtmax-gtmin)/gocmax;
tang=gocset*rate;
if(flag==1)gocsv=gt0+tang;
if(flag==0)gocsv=gt0-tang;

}
hoangtuanthien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:23 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam