PIC Vietnam

Go Back   PIC Vietnam > Robotics > Cảm biến

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 08-07-2007, 12:19 PM   #1
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cool Hỏi về thuật toán và bài tập với encoder?

Chào mọi người. Em đang tìm hiểu về encoder. đã hiểu được nguyên lý hoạt động nhưng chưa biết cách ứng dụng nó vào điều khiển. Có ai có bài tập hay những giải thuật đã thực hiện với encoder rồi cho em xin với! Em đang học cách điều khiển robot. Em xài pic6f877a và mô phỏng bằng proteus.
Cho em hỏi thêm: trong proteus thì mô phỏng encoder được không và phải làm thế nào?
Em cảm ơn nhiều!
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2007, 02:18 PM   #2
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Bạn đã đọc bài viết ở luồng này chưa?

Encoder: absolute và incremental? Dùng loại nào?
http://www.picvietnam.com/forum//showthread.php?t=224

Làm việc với encoder = đếm xung & phát hiện hướng quay. Thuật toán để làm công việc này có khác nhau phụ thuộc vào loại encoder nào được sử dụng, absolute hay incremental.

Bạn đọc bài viết kia trước đã, có thể bạn sẽ tự tìm ra thuật toán làm việc với encoder đấy.
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2007, 03:22 PM   #3
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cảm ơn anh! Em đọc cả rồi. Nhưng có hai câu hỏi:
1. Làm sao để mô phỏng encoder trong proteus?
2. bài tập hay 1 ứng dụng cụ thể nào đó đã sử dụng encoder.
Em có nghĩ về các thuật toán nhưng không có bài tập và mô phỏng để thực hiện. Mong mọi người giúp đỡ.
Em không biết loại encoder nào phổ biến hơn và ...rẻ hơn. Mọi người cho em lời khuyên với. Chắc là incremental phải không?

thay đổi nội dung bởi: dvnccbmacbt, 08-07-2007 lúc 03:34 PM.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 03:58 PM   #4
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cho em hỏi thêm về encoder:
1. Em thấy trong datasheet viết có resolution. Cái này có ý nghĩa là gì vậy?
2. Có tài liệu viết: Encoder phát ra 500-2000 xung/vòng. Có phải ý nghĩa của nó là độ phân giải (resolution). Như vậy là encoder có 500-2000 lỗ/ 1 vòng, phải không?
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 04:03 PM   #5
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Trích:
Nguyên văn bởi dvnccbmacbt View Post
Cho em hỏi thêm về encoder:
1. Em thấy trong datasheet viết có resolution. Cái này có ý nghĩa là gì vậy?
2. Có tài liệu viết: Encoder phát ra 500-2000 xung/vòng. Có phải ý nghĩa của nó là độ phân giải (resolution). Như vậy là encoder có 500-2000 lỗ/ 1 vòng, phải không?
Sau khi bạn đọc bài viết trên, hẳn bạn đã biết rằng với một encoder có 500 lỗ, thì chúng ta có thể đọc nó ở 500 xung/vòng, hoặc có một giải pháp khác đọc cả cạnh lên và cạnh xuống, đọc cả hai kênh A và B. Như vậy chúng ta sẽ có thể đọc lên tới gấp 4 lần, nghĩa là thành 2000 xung/vòng.

Xung/vòng thường ký hiệu là ppr = pulse per revolution. Đây đúng là độ phân giải của encoder. Thông thường bạn sẽ thấy người ta ghi độ phân giải là trị số cao nhất, nghĩa là 2000ppr thì nó đồng nghĩa với việc encoder có 500 lỗ, đọc tối đa được 2000ppr. Nhưng nếu người ta ghi rõ 2000-8000ppr hoặc 500-2000ppr, thì đó có nghĩa là encoder có bao nhiêu lỗ và độ phân giải tối đa đọc được ghi phía sau (mặc định gấp 4 lần số lỗ).

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 04:05 PM   #6
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Trích:
Nguyên văn bởi dvnccbmacbt View Post
Cho em hỏi thêm về encoder:
1. Em thấy trong datasheet viết có resolution. Cái này có ý nghĩa là gì vậy?
2. Có tài liệu viết: Encoder phát ra 500-2000 xung/vòng. Có phải ý nghĩa của nó là độ phân giải (resolution). Như vậy là encoder có 500-2000 lỗ/ 1 vòng, phải không?
Số xung phát ra khi encoder quay 360 độ gọi là độ phân giải (resolution) của encoder. Và đúng như bạn nói nếu độ phân giải là 500 xung/vòng thì khi chế tạo người ta phải tạo ra 500 lỗ.

Chú Hiệp giải thích đầy đủ hơn đấy

Nhưng anh nghĩ khi ghi độ phân giải của encoder họ ghi chỉ số chuẩn, nghĩa là nếu encoder phát 500 xung/quay thì sẽ được ghi là có độ phân giải là 500 ppr. Tuy nhiên trên datasheet nó sẽ nói là có cho phép dạng phát xung đồng thời cả hai kênh AB (lệch nhau 90 độ điện) hay không. Nếu có ghi thì người sử dụng ngầm hiểu là có thể lập trình để bộ nhận xung đọc được 2000 xung/vòng quay.
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: Mecha, 09-07-2007 lúc 04:13 PM.
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-07-2007, 05:27 PM   #7
andy
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 2
:
Các anh ơi, nhân tiện em cũng đang tim hiểu về encoder cho em hỏi chút xíu luôn.
Em định đọc xung từ encoder, kiểm tra chiều tiến hay lùi(quay thuận hay ngược) rồi cho hiển thị ra led số xung đã đọc. Nhưng tần số của xung có thể lên đến 250kHz, quá lớn nên em chưa biết xử lý thế nào. Các anh chỉ giùm em nhé. Em cảm ơn nhiều nhiều...
andy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 05:17 AM   #8
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Trích:
Nguyên văn bởi andy View Post
Các anh ơi, nhân tiện em cũng đang tim hiểu về encoder cho em hỏi chút xíu luôn.
Em định đọc xung từ encoder, kiểm tra chiều tiến hay lùi(quay thuận hay ngược) rồi cho hiển thị ra led số xung đã đọc. Nhưng tần số của xung có thể lên đến 250kHz, quá lớn nên em chưa biết xử lý thế nào. Các anh chỉ giùm em nhé. Em cảm ơn nhiều nhiều...
Tần số lên tới 250kHz cơ à! Mình chưa bao giờ đếm xung tần số cao như thế này. Ở đây mình chỉ đề xuất một phương án là dùng bộ đếm xung bằng phần mềm. Bạn tạo môt vòng quét (bằng chương trình con) có chu kỳ T = 4 micro giây. Trong chương trình con này bạn viết các lệnh để nhận biết sườn xung lên. Vấn đề là thời gian để thực hiện các lệnh này phải nhỏ hơn 4 micro giây nếu không sẽ xảy ra hiện tượng đệ qui (các lệnh của chu kỳ trước chưa thực hiên xong thì lại được thực thi ở chu kỳ tiếp theo).
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 10:06 AM   #9
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:

Mình cũng xin hỏi thêm chút ít.Tốc độ quay của động cơ gắn encoder chính là tần số output của chanel A (B) phải không???Ví dụ tần số 1KHZ ,nghĩa là 1 xung A tương ứng 1ms.Giả sử đối vớ encoder 4xung/vòng thì tốc độ quay là 4ms/vòng hay 250vong./s
Làm cách nào để đọc được số xung từ A và B hiển thị qua Led mà ta biết tại thời điẻm nào đó nó quay góc bao nhiêu?tốc đọ thế nào,chiều nào?
Mình đã có đọc sơ qua trên trang web nó nói về điều khiển này mà cũng không hiểu rõ nguyên lý và thực toán lám.Đây là link của nó.
http://www.google.com.vn/search?q=en...ient=firefox-a
Mong các bạn gíp đỡ
Chúc vui.
cuopbienquin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 10:32 AM   #10
andy
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 2
:
Cool

Trích:
Nguyên văn bởi Mecha View Post
Tần số lên tới 250kHz cơ à! Mình chưa bao giờ đếm xung tần số cao như thế này. Ở đây mình chỉ đề xuất một phương án là dùng bộ đếm xung bằng phần mềm. Bạn tạo môt vòng quét (bằng chương trình con) có chu kỳ T = 4 micro giây. Trong chương trình con này bạn viết các lệnh để nhận biết sườn xung lên. Vấn đề là thời gian để thực hiện các lệnh này phải nhỏ hơn 4 micro giây nếu không sẽ xảy ra hiện tượng đệ qui (các lệnh của chu kỳ trước chưa thực hiên xong thì lại được thực thi ở chu kỳ tiếp theo).
Anh Mecha oi! Làm sao trong 4 micro giây có thể đọc xung rồi kiểm tra chiều tiến lùi...Encoder em đang nghiên cứu cho tín hiệu ra TTL với 3 dãy xung A,B,C. Trong đó A và B có cùng chu kỳ và lệch pha nhau 90 độ, C có chu kỳ gấp đôi B. Tần số ra biến thiên nhưng lớn nhất là 250KHz.
Em định dùng bộ đếm để đếm xung trong một khoảng thời gian nhất định(vd:50ms dùng ngắt Timer) rồi cho hiển thị số xung đếm được. Còn xđ tiến lùi thì như anh Falleaf có một bài đã post lên, khi có sườn ở xung A thì đọc giá trị của B là biết chiều nhưng em chưa biết thuật toán thế nào cho hợp lý, khi có sườn ở A thì ngắt rồi đọc B, thì sẽ bị ngắt liên tục và không đảm bảo về thời gian. Xử lý về thời gian chỗ này rất phức tạp. Hay có loại nào có chân chuyên đếm xung không các anh? Các anh xem có cách nào giúp em nhé, em cảm ơn các anh.........

thay đổi nội dung bởi: andy, 12-07-2007 lúc 10:46 AM. Lý do: Bổ sung
andy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 02:43 PM   #11
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bạn đọc lại bài viết về encoder mà F giới thiệu, hoàn toàn trong đó không có khái niệm nào nói về tần số encoder. Do vậy, bạn đang hiểu sai một khái niệm gì ở đây. Nếu bạn muốn hiểu chắc chắn, bạn chỉ nên sử dụng những khái niệm mà F giới thiệu trong bài viết đó (link do anh Mecha giới thiệu). Ngoài ra, không sử dụng các khái niệm khác để giải thích vấn đề khúc mắc của mình. F chưa thấy đề cập khái niệm tần số encoder nghĩa là sao cả, nên nói thực rằng không hiểu con số 250KHz này có nghĩa là gì. Nếu như tốc độ quay của các bạn, và độ phân giải của encoder của các bạn đạt đến giá trị rất cao thì bạn mô tả xung nhận vào lên tới 250KHz thì có vẻ hợp lý, nhưng bạn nên xem lại bài viết đó một cách cẩn thận, và nếu không hiểu thì đặt câu hỏi ngay trong bài viết đó.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 03:20 PM   #12
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Ý của bạn andy là muốn xử lý chính xác xung tín hiệu ra từ encoder. Giả sử andy dùng encoder có độ phân giải 500 xung/vòng quay. Vậy khi động cơ quay 500 vòng/giây tương ứng với 30k vòng/phút thì đầu tín hiệu ra của encoder sẽ là là xung với tần số lên đến 250 kHz (T = 4 micro giây). Vì vậy muốn đếm được chính xác số xung thì vòng quét (tạo bởi chương trình con) hay Timer phải có chu kỳ nhỏ hơn hoặc bằng 4 micro giây. Nếu andy chỉ dùng Timer co T = 50ms, khi bạn đếm xung 250 kHz thì mới đếm được xung đầu tiên thì đã có (12500-1) xung khác xuất hiện và bạn sẽ không xử lý kịp. Vậy vấn đề như mình đã nói "tổng thời gian để thực hiện các lệnh xử lý xung phải nhỏ hơn 4 micro giây". Nghĩa là bạn lập trình rồi cộng tổng số chu kỳ máy của các lệnh trong chương trình con. Nếu nhỏ hơn 4 micro giây thi oki Mình nghĩ việc này là không thể cho các chip với tốc độ xử lý lệnh như hiện nay.
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 04:08 PM   #13
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Thế nên em mới nói vấn đề, vừa phải phụ thuộc độ phân giải, vừa phải phụ thuộc tốc độ quay. Khái niệm này là khái niệm hoàn toàn không có. Một cách thực hiện nếu muốn lấy được một độ chính xác tương đối, và chu kỳ lấy mẫu nhỏ, tức là thả cho động cơ quay, và chỉ bắt xung trên kênh Z. Khi tới gần thời điểm lấy mẫu, thì tắt hết mọi hoạt động của MCU và chờ tín hiệu encoder thôi. Tuy nhiên, với tốc độ xử lý 4us thì không thể có con MCU nào làm kịp, vì riêng quá trình vào ngắt ra ngắt là hết thời gian rồi. Nếu dùng mấy con DSP khủng thì may ra có thể xử lý được.

Tất nhiên, nếu làm việc với PIC, ở tần số 40MHz thì khả năng vẫn có thể xử lý được, nhưng phải xử lý cực kỳ khéo léo và phải code thật cẩn thận bằng MPASM. Bởi chạy ở 4MHz tương đương mức 1MHz chu kỳ máy, tương đương 1us/lệnh. Nếu có khoảng 10 lệnh/us, thì trong 4us có thể xử lý 40 lệnh máy. Như vậy vẫn có khả năng xử lý kịp.

Nhưng một động cơ chạy 30K vòng/phut. Anh có thấy động cơ nào chạy ở tốc độ đó chưa? Các động cơ thường thì chạy khoảng 3K vòng/phút, và nếu như có nhanh thì lên tới 10K vòng/phút là ghê lắm rồi. Mà ở tốc độ này thì em nghĩ chơi độ phân giải 500ppr là bất hợp lý.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 04:22 PM   #14
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Trục chính máy phay CNC tốc độ trung bình-cao quay ở tốc độ đó. Thế nên ở tốc độ cao như vậy chỉ nên chọn encoder 500 xung thâm chí chỉ nên chọn cỡ 100 xung thôi để giảm tần số xung xuống 50 kHz. Ở tần số này, chu kỳ Timer được nâng lên 20us và ở tần số 40MHz, ta có thể xử lý 200 lệnh máy. Chắc sẽ đủ để coding.

Tốc độ quay cao cỡ như thế này anh cho rằng còn có thể tìm thấy khá nhiều trong thực tế, ví dụ trong các máy quay ly tâm (dùng để xét nghiệm máu ý).
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 05:56 PM   #15
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Vấn đề thời gian vòng quét nhỏ cỡ 10us trở xuống cũng có thể tìm thấy trong máy xung gia công tia lửa điện (EDM). Để tránh hiện tượng ngắn mạch giữa hai điện cực, điện áp chênh lệch giữa điện cực Anot và Katot được kiểm tra và so sánh liên tục với điện áp ngưỡng và phải lập tức đảo chiều quay của động cơ bước để kéo điện cực Anot lên. Do đó chỉ có vòng quét với chu kỳ rất nhỏ mới có thể đáp ứng được.

Mở rộng ra một chút, trong các bài toán lập trình điều khiển trong thực tế, tần số lấy mẫu được coi là tương đương với chu kỳ của Timer hay vòng quét chương trình.

Do đó anh nghĩ mình có thể tạo một chương trình mẫu dạng (kiểu template) để khi cần là có thể mang ra thay số (đặt thông số capture cho Timer) là dùng được ngay.
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:04 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam