PDA

View Full Version : hoi về dùng pic16f877a điều khiển động cơ một chiều DC


thevinhbk3i
01-11-2009, 10:48 PM
--------------------------------------------------------------------------------

EM MUỐN DÙNG PIC16f877a điều khiển động cơ một chiều dc ! phụ thuộc vào điện áp do xung pwm trên hai chân ccp1 va ccp2 ! nhưng em ko hiểu rõ lắm về quy luật của nó ! khi em muốn đặt một tốc độ ở một thiết bị điều khiển bên ngoài kết nối vơi vi xử lý thì phải làm thế nào ! chỉ giùm với ! thanks

roi
06-11-2009, 11:06 PM
Mình nhớ là diễn đàn chúng ta đã có một threat rất đầy đủ về điều khiển động cơ dc, bạn xem lại nhé

tanphatc62000
13-11-2009, 02:20 PM
--------------------------------------------------------------------------------

EM MUỐN DÙNG PIC16f877a điều khiển động cơ một chiều dc ! phụ thuộc vào điện áp do xung pwm trên hai chân ccp1 va ccp2 ! nhưng em ko hiểu rõ lắm về quy luật của nó ! khi em muốn đặt một tốc độ ở một thiết bị điều khiển bên ngoài kết nối vơi vi xử lý thì phải làm thế nào ! chỉ giùm với ! thanks

trước tiên bạn cần tính một chu kỳ xung
sau đó tính thời gian duty(nghĩa la thòi gian xung tồn tại ở mức cao)
tốc độ qui định là sự phụ thuộc của thời gian duty và chu kỳ xung

dhbk3i
21-11-2009, 11:56 PM
vừa qua mình mới học về multi state thấy rất hay, có bạn nào muốn công việc lập trình trở lên có kế hoạch, dễ kiểm tra lỗi và sử lỗi, nhân việc hỏi về điều khiển động cơ bước mình muốn phát triển một đề tài về điều khiển động cơ đa trạng thái, ví dụ như điều khiển máy bơm nước chẳng hạn, trạng thái 1 bơm nước và kiểm tra trong vòng 5s nếu như không thấy nước thì kết luận bể cạn và chuyển sang trạng thái error...

dovandoan06011
24-11-2009, 01:39 AM
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);
}
}
}

dovandoan06011
24-11-2009, 01:42 AM
ah wen đề tài của em là điều khiển động cơ 1 chiều với 2 tốc độ:100 và 10 prm
khi gặp màu xanh là 100 và màu trắng là 10
em dùng cái nút ấn để thay thế mạch phát hiện màu để mô phỏng mà nó không hiểu mức 1 của chân ra4.
mong các bác chỉ dùm
cảm ơn các pác nhìu nhìu