1. Phương pháp đọc xung encoder:
Thông thường để đọc encoder ta sử dụng vi xử lý, trong chương trình vi xử lý sử dụng ngắt ngoài để đếm xung encoder.Ví dụ chương trình đọc encoder trên PIC sử dụng CCS để lập trình:
#int_ext
void ext_tinterrupts()
{
value++;
}
2. Phương pháp chống nhiễu cho encoder:
Có hai phần chính: chống nhiễu phần cứng và phần mềm.
a. Chống nhiễu phần cứng:
Chống nhiễu phần cứng gồm nhiều phần: thiết kế layout, dây dẫn điện, mạch chống nhiễu...
- Layout PCB đối với đây tín hiệu Encoder phải được bọc mass, đi dây thẳng ngắn nhất, cách ly mass được càng tốt.
-Nguồn nuôi encoder nên lấy riêng tránh sử dụng chung nguồn với nguồn động cơ, nếu sử dụng chung cần cách ly mát sử dụng các tụ lọc tần số cao để lọc bớt xung tần số cao.
-Ở điểm ra của 2 pha encoder cần có thêm một tụ lọc tần số cao (tùy thuộc tần số xung encoder mà ta chọn một tụ phù hợp).
-Nguồn nuôi encoder có thêm một tụ lọc ở nguồn và đất.
-Chân nguồn của vi xử lý cần có môt tụ 104 để lọc nhiễu.
-Dây tín hiệu không được ở quá gần dây đông cơ, dây nguồn nuôi encoder sử dụng dây cáp xoắn đôi.
b. Chống nhiễu phần mềm:
-Sử dụng các thuật toán tính trung bình kết hợp với tăng đáp ứng, loại bỏ ngưỡng sai số.
Vì khi sử dụng thuật toán tính trung bình thì thời gian đáp ứng của hệ thống sẽ chậm hơn.
-Phương pháp trung bình:
n[5]=n[4];
n[4]=n[3];
n[3]=n[2];
n[2]=n[1];
n[1]=n[0];
n[0]=value;
}
s=(n[0]+n[1]+n[2]+n[3]+n[4]+n[5])/6;
-Loại bỏ ngưỡng sai số: là khi tín hiệu xung bị sai lệch ở một sai số cho phép (ví dụ 1 đến 2 xung) ta sẽ bỏ qua không tính đến.
-Tăng đáp ứng bằng cách khi đếm số xung nếu phát hiện số xung thay đổi quá lớn qua một ngưỡng cho phép (tùy vào encoder có số xung bao nhiêu) ta bỏ qua tính trung bình, lấy giá trị xung đọc được tính toán cho hệ thống luôn.
Ví dụ về kết hợp cả ba thuật toán:
if(abs(value-s)>3)
{
if(abs(value-s)>50)
{
for(i=0;i<6;i++)
{
n[i]=value;
}
}
else
{
n[5]=n[4];
n[4]=n[3];
n[3]=n[2];
n[2]=n[1];
n[1]=n[0];
n[0]=value;
}
s=(n[0]+n[1]+n[2]+n[3]+n[4]+n[5])/6;
}