Em gặp 1 vấn đề với động cơ bước! Mong các cao thủ chỉ giáo với!
Em viết 1 chương trình nhận xung từ PC (từ chương trình gia công CNC). Dựa vào xung điều khiển từ PC để điều khiển động cơ bước!
Hiện tượng xảy ra như sau:
- Khi sử dụng các câu lệnh G01 (G-code) tức là chạy dao tốc độ chậm thì mọi chuyện okie! Chạy xuôi và ngược đều được!
- Khi sử dụng lệnh chạy dao nhanh G00 thì vẫn chạy xuôi và ngược được nhưng động cơ chạy được 1 đoạn lại không chạy nữa!
Mong các cao thủ gợi ý giúp em xem có thể giải quyết vấn đề như thế nào!
CODE:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#include <def_877a.h>
#device 16F877*=16
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,s tream=pc)
#use fast_io(b)
//--------------------
char value;
int1 dir_X;
//----------------------------------
#INT_EXT
void ngat_RB()
{
value++;
if (value>=4) value=0;
fputc(value,pc);
}
//--------------------- ham dieu khien dong co buoc----------//
//-------------------------------------------//
void main()
{
enable_interrupts(int_ext);
enable_interrupts(global);
ext_int_edge(L_TO_H);
trisd =0x00;
trisb =0xff;
fputc(value,pc);
value=4;
while (1)
{
dir_X=RB1;
switch (value)
{
case 0:
PORTD=0x77;
break;
case 1:
if (dir_X)
PORTD=0xBB;
else PORTD=0xEE;
break;
case 2:
PORTD=0xDD;
break;
case 3:
if (dir_X)
PORTD=0xEE;
else PORTD=0xBB;
break;
}
}
}
Em viết 1 chương trình nhận xung từ PC (từ chương trình gia công CNC). Dựa vào xung điều khiển từ PC để điều khiển động cơ bước!
Hiện tượng xảy ra như sau:
- Khi sử dụng các câu lệnh G01 (G-code) tức là chạy dao tốc độ chậm thì mọi chuyện okie! Chạy xuôi và ngược đều được!
- Khi sử dụng lệnh chạy dao nhanh G00 thì vẫn chạy xuôi và ngược được nhưng động cơ chạy được 1 đoạn lại không chạy nữa!
Mong các cao thủ gợi ý giúp em xem có thể giải quyết vấn đề như thế nào!
CODE:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#include <def_877a.h>
#device 16F877*=16
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,s tream=pc)
#use fast_io(b)
//--------------------
char value;
int1 dir_X;
//----------------------------------
#INT_EXT
void ngat_RB()
{
value++;
if (value>=4) value=0;
fputc(value,pc);
}
//--------------------- ham dieu khien dong co buoc----------//
//-------------------------------------------//
void main()
{
enable_interrupts(int_ext);
enable_interrupts(global);
ext_int_edge(L_TO_H);
trisd =0x00;
trisb =0xff;
fputc(value,pc);
value=4;
while (1)
{
dir_X=RB1;
switch (value)
{
case 0:
PORTD=0x77;
break;
case 1:
if (dir_X)
PORTD=0xBB;
else PORTD=0xEE;
break;
case 2:
PORTD=0xDD;
break;
case 3:
if (dir_X)
PORTD=0xEE;
else PORTD=0xBB;
break;
}
}
}
Comment