trongtanuet2010
08-04-2013, 12:27 AM
Tính Vận tốc động cơ
Vấn đề của bạn bao gồm 2 phần sau:
Thứ nhất: Đọc được xung từ encoder, biết được chiều quay của encoder.
Thứ hai: Tính toán vận tốc của động cơ dựa vào encoder đó.
1. Đọc xung từ encoder:
Ở đây mình dùng ví dụ bạn dùng encoder có 2 kênh đó là A,B (còn A,B là gì thì bạn chịu khó đọc ở link hocavr ở trên).
Kết nối phần cứng:
-1 chân ngắt ngoài của PIC nối vào kênh A (hoặc B).
-1 chân I/O của PIC nối vào kênh còn lại.(config cho nó là INPUT) -gọi là chân DIR (hướng)
Phần mềm:
-Kích hoạt chức năng ngắt ngoài của PIC trên chân đó.
-Trong chương trình xử lý ngắt: bạn kiểm tra xem chân DIR nó là 0 thì tăng biến đếm encoder lên 1, bằng 1 thì giảm biến đếm encoder xuống 1, hoặc ngược lại cũng được.
Code:
void interrupt_isr(void)
{
Motor_EncoderDir = PIND.4; //PIND.4 là đọc giá trị từ chân D.4
if(!Motor_EncoderDir) MotorEncoder++;
else MotorEncoder--;
//MotorEncoder: tổng số xung encoder đã đếm được
}
các pro cho e hỏi tý, em muốn đo tốc độ động cơ encoder dùng 2 chân tín hiệu đưa vào vi điều khiển? e tìm được dòng code trên, nhưng chưa hiểu? vì chân tín hiệu là xung vuông, như dòng code ở trên thì biến motorEncoder ko thay đổi có phải khơne mới vào nghề,mong các pro giải thích cụ thể hơn! thanks.
Vấn đề của bạn bao gồm 2 phần sau:
Thứ nhất: Đọc được xung từ encoder, biết được chiều quay của encoder.
Thứ hai: Tính toán vận tốc của động cơ dựa vào encoder đó.
1. Đọc xung từ encoder:
Ở đây mình dùng ví dụ bạn dùng encoder có 2 kênh đó là A,B (còn A,B là gì thì bạn chịu khó đọc ở link hocavr ở trên).
Kết nối phần cứng:
-1 chân ngắt ngoài của PIC nối vào kênh A (hoặc B).
-1 chân I/O của PIC nối vào kênh còn lại.(config cho nó là INPUT) -gọi là chân DIR (hướng)
Phần mềm:
-Kích hoạt chức năng ngắt ngoài của PIC trên chân đó.
-Trong chương trình xử lý ngắt: bạn kiểm tra xem chân DIR nó là 0 thì tăng biến đếm encoder lên 1, bằng 1 thì giảm biến đếm encoder xuống 1, hoặc ngược lại cũng được.
Code:
void interrupt_isr(void)
{
Motor_EncoderDir = PIND.4; //PIND.4 là đọc giá trị từ chân D.4
if(!Motor_EncoderDir) MotorEncoder++;
else MotorEncoder--;
//MotorEncoder: tổng số xung encoder đã đếm được
}
các pro cho e hỏi tý, em muốn đo tốc độ động cơ encoder dùng 2 chân tín hiệu đưa vào vi điều khiển? e tìm được dòng code trên, nhưng chưa hiểu? vì chân tín hiệu là xung vuông, như dòng code ở trên thì biến motorEncoder ko thay đổi có phải khơne mới vào nghề,mong các pro giải thích cụ thể hơn! thanks.