pk178
18-05-2010, 01:42 PM
Chào các bạn !
Mình đang làm 1 mạch điều khiển động cơ, có dùng encoder để đọc xung đưa vào, tuy nhiên mình chỉ dùng được 2/3 timer, không dùng được cả 3 timer. Cụ thể như sau :
+ Timer 0 : Dùng để tính toán thời gian đếm xung (cứ 100us thì ngắt 1 lần để tính tốc độ của động cơ)
+ Timer 1 : Dùng để đếm xung encoder
+ Timer 2 : Đã dùng trong module PWM
Mình cấu hình như sau :
SETUP_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_INTERNAL|T0_DIV_1);
enable_interrupts(int_timer0);
enable_interrupts(global);
Mình đã chạy thử, quan sát thấy chỉ có timer 0 chạy, timer 1 không chạy.
Ngược lại, nếu mình cấu hình như sau :
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_EXT_L_TO_H|T0_DIV_1);
Khi đó mình lấy timer 0 để đọc xung encoder, timer 1 tính toán thời gian để tính vận tốc của động cơ. Trong trường hợp này thì chỉ có timer 1 chạy, còn timer 0 không chạy.
Còn nếu mình cấu hình như sau :
SETUP_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_EXT_L_TO_H|T0_DIV_1);
Cấu hình như thế này thì cả 2 timer đều chạy.
Mình không hiểu tại sao lại như thế, mình dùng thạch anh nội trong PIC. Mong các bạn giúp đỡ. Cám ơn các bạn !
Mình đang làm 1 mạch điều khiển động cơ, có dùng encoder để đọc xung đưa vào, tuy nhiên mình chỉ dùng được 2/3 timer, không dùng được cả 3 timer. Cụ thể như sau :
+ Timer 0 : Dùng để tính toán thời gian đếm xung (cứ 100us thì ngắt 1 lần để tính tốc độ của động cơ)
+ Timer 1 : Dùng để đếm xung encoder
+ Timer 2 : Đã dùng trong module PWM
Mình cấu hình như sau :
SETUP_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_INTERNAL|T0_DIV_1);
enable_interrupts(int_timer0);
enable_interrupts(global);
Mình đã chạy thử, quan sát thấy chỉ có timer 0 chạy, timer 1 không chạy.
Ngược lại, nếu mình cấu hình như sau :
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_EXT_L_TO_H|T0_DIV_1);
Khi đó mình lấy timer 0 để đọc xung encoder, timer 1 tính toán thời gian để tính vận tốc của động cơ. Trong trường hợp này thì chỉ có timer 1 chạy, còn timer 0 không chạy.
Còn nếu mình cấu hình như sau :
SETUP_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
SETUP_TIMER_0(T0_EXT_L_TO_H|T0_DIV_1);
Cấu hình như thế này thì cả 2 timer đều chạy.
Mình không hiểu tại sao lại như thế, mình dùng thạch anh nội trong PIC. Mong các bạn giúp đỡ. Cám ơn các bạn !