chào bác cho em hỏi đạt được tốc độ thực tế cho động cơ là 100/phút và 10 vòng/phút thì value em đặt khoảng bao nhiêu là đủ vậy?đc em dùng là 24v gắn encoder xuất 108 xung/p
vì đây chỉ là mô phỏng. còn thực tế em chưa làm nên em không biết nên đặt bao nhiêu cả. mong bác chỉ dùm
đây là code của em
#INCLUDE <16F877a.H>
#DEVICE *=16 ADC=8
#FUSES HS,NOWDT,NOPUT,NOLVP
#USE DELAY (CLOCK=20000000)
#INCLUDE <LCD.C>
unsigned int16 solantran=0;
double time_per_circle=0;
int16 tocdo=0;
int16 tocdo_dat;
int16 value;
int16 count=0;
#int_ext
void demxung()
{ count++;
if (count==1)
{
set_timer1(3036);
break;
}
if (count<101) //khi dat 101 xung thi da duoc 1 vong rui (vi encoder 100 xung)-->ta bat dau tinh toc do theo cong thuc duoi
{
break;
}
else
{
time_per_circle=(solantran*0.1)+(get_timer1()*0.00 00015); //0.1 la thoi gian tran cua timer1
tocdo= (60)/(time_per_circle); //0.0000016=0.1/(65536-3036)--gia tri nhan cho get_timer1()
solantran=0;
count=1;
set_timer1(3036);
}
}
#int_timer1
void dem_solantran(){
solantran++;
set_timer1(3036);}
void main()
{
set_tris_a(0b10000);
set_tris_b(0b00011111);
set_tris_d(0b00000000);
set_tris_c(0b00000000);
lcd_init();
delay_ms(20);
setup_timer_1(t1_internal|t1_div_by_8);
set_timer1(3036);
enable_interrupts(int_timer1);
enable_interrupts(int_ext) ;
ext_int_edge(l_to_h);
enable_interrupts(global);
setup_ccp1(ccp_pwm);
setup_timer_2(T2_div_by_16,156,1);
value=1000;
set_pwm1_duty(value);
delay_ms(5000);
while(1)
{
if(input(pin_a4))
{ tocdo_dat=100 ;
value=900;
set_pwm1_duty(value);
lcd_gotoxy(1,1);
printf(lcd_putc,"SPEED_SET : %3Lu",tocdo_dat);
lcd_gotoxy(1,2);
printf(lcd_putc,"SPEED : %3Lu",tocdo);
}
else
{
tocdo_dat=10;
value=300 ;
set_pwm1_duty(value);
lcd_gotoxy(1,1);
printf(lcd_putc,"SPEED_SET : %3Lu",tocdo_dat);
lcd_gotoxy(1,2);
printf(lcd_putc,"SPEED : %3Lu",tocdo);
}
}
}
thay đổi nội dung bởi: dovandoan06011, 24-11-2009 lúc 01:56 AM.
|