Khoa Huân luyện. Kết nối bộ mã hóa. Cấu trúc điển hình của một chương trình đơn giản. Máy phát điện trên AVR. Kết nối bộ mã hóa với vi điều khiển

Tóm lại, bộ mã hóa có thể được gọi là bộ chuyển đổi chuyển vị góc. Chúng dùng để sửa đổi góc quay của một vật thể quay, chẳng hạn như trục của một cơ cấu, thành tín hiệu dòng điện. Trong trường hợp này, không chỉ góc quay của trục được xác định mà còn cả hướng quay của nó, cũng như tốc độ quay và vị trí hiện tại so với vị trí ban đầu.

Bộ mã hóa đã trở nên phổ biến nhất khi được sử dụng trong các hệ thống chuyển động chính xác, trong các nhà máy công cụ máy móc, trong các tổ hợp sản xuất sử dụng robot, trong các thiết bị đo yêu cầu ghi lại các phép đo chính xác về độ nghiêng, vòng quay, góc quay và góc.

Các loại và nguyên lý hoạt động

Bộ mã hóa là cảm biến quay. Cảm biến đơn giản nhất có tay cầm có thể xoay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Tùy thuộc vào góc quay và hướng, tín hiệu số sẽ được phát ra, thông báo về vị trí của tay cầm hoặc hướng mà nó được quay.

Đối với một bộ mã hóa như trong hình, tay cầm cũng có thể được sử dụng làm nút. Đây là chức năng phụ trợ của một loại bộ mã hóa cụ thể.

Dựa trên loại dữ liệu đầu ra, bộ mã hóa được chia thành hai nhóm lớn:

  1. Tuyệt đối.
  2. Tăng dần.

Bộ mã hóa tuyệt đối

Với bộ mã hóa tuyệt đối, toàn bộ vòng quay được chia thành một số cung nhất định, thường có cùng kích thước. Các lĩnh vực này được đánh số. Trong quá trình hoạt động, bộ mã hóa sẽ hiển thị số của khu vực mà nó hiện đang ở. Đó là lý do tại sao nó được gọi là tuyệt đối. Với loại bộ mã hóa này, bạn luôn có thể xác định xem bộ mã hóa được quay ở góc nào so với khu vực 0 tại một thời điểm cụ thể, nghĩa là khi xoay, nó sẽ tạo ra các giá trị của số khu vực, lên đến giá trị tối đa. Sau đó nó trở về số 0.

Nếu trục bộ mã hóa được quay theo hướng khác, nó sẽ bắt đầu tạo ra các giá trị ngược lại. Trong trường hợp của chúng tôi, nó sử dụng năm chân để xuất các giá trị xoay.

Thuật toán này có nhược điểm của nó. Bảng 1 thể hiện thứ tự các giá trị đầu ra của bộ mã hóa thứ n. Điều đáng chú ý là hai dòng cuối cùng, sự chuyển đổi từ 127 sang 128.

Bảng 1

Hoàn toàn tất cả các bit thay đổi ở đây. Trong một bộ mã hóa lý tưởng, tất cả chúng đều thay đổi cùng một lúc và không có vấn đề gì. Trong hầu hết các bộ mã hóa thực, các bit thay đổi nhanh chóng nhưng không đồng thời. Và tại một thời điểm nào đó, đầu ra của bộ mã hóa trở thành một giá trị hoàn toàn tùy ý. Do đó, vì tất cả các bit đều thay đổi nên bộ mã hóa sẽ có giá trị tùy ý từ 0 đến tất cả các bit.

Một ví dụ về công tắc như vậy được hiển thị bên phải. Điều này có nghĩa là gì? Hãy xem một ví dụ. Bộ vi điều khiển sử dụng một động cơ để điều khiển trục và quay nó theo một góc nhất định. Tại một thời điểm nhất định, khi chuyển từ ô 127 sang ô 128, nó nhận được một giá trị ngẫu nhiên nhất định. Bộ điều khiển kết luận rằng trục đang ở một nơi hoàn toàn khác, không giống như vị trí thực tế và bắt đầu quay trục theo một hướng khác, với tốc độ khác, v.v.

Sau một thời gian nhất định, bộ vi điều khiển nhận được giá trị chính xác và bắt đầu cố gắng dừng trục và quay nó theo đúng hướng. Quá trình này có thể mất nhiều thời gian nếu lỗi như vậy xảy ra thường xuyên. Những sai số như vậy là không đều và khá khó tính toán.

Mã màu xám

Vấn đề được mô tả ở trên được giải quyết bằng cách đưa vào mã Gray. Một đặc điểm của mã Gray là khi chuyển bộ mã hóa sang một thì giá trị của mã Gray cũng thay đổi một. Chỉ có một loại thay đổi. Điều này có thể được thấy trong Bảng 2 khi so sánh giữa mã nhị phân và mã Gray.

ban 2

Hai dòng đầu tiên giống nhau, nhưng ở dòng thứ hai, bit ở giữa đã thay đổi. Sau đó một chút cũng thay đổi. Cũng cần lưu ý rằng mã Gray cuối cùng và đầu tiên khác nhau một bit, nghĩa là mã Gray có thể lặp lại.

Ưu điểm của mã này là không thể xảy ra lỗi được thảo luận ở trên. Trong số những nhược điểm, có thể lưu ý rằng bộ vi điều khiển cần chuyển đổi mã Gray thành mã nhị phân để hiểu bộ mã hóa tuyệt đối đang ở vị trí nào.

Bộ mã hóa gia tăng

Loại tiếp theo là bộ mã hóa gia tăng, có cấu trúc đơn giản hơn. Nhưng đồng thời anh ta không chỉ ra vị trí cụ thể của cây bút của mình. Nó chỉ hiển thị hướng quay và số lần chia vòng quay phải được vi điều khiển đếm.

Bộ mã hóa gia tăng có một tập hợp các dải được kết nối với mặt đất theo mặc định và khi quay chúng sẽ tạo ra các mạch mở. Kết quả là tín hiệu như trong hình (tương tự như sóng vuông). Bộ mã hóa có hai dải hình tròn như vậy. Các dải được bù một phần tư và các tín hiệu cũng được bù một phần tư. Điều này rất quan trọng vì nó cho phép bạn xác định hướng quay.

Mạch của bộ mã hóa gia tăng có thể được biểu diễn trong hình bên phải. Các nút cho biết kết nối định kỳ của bộ mã hóa với mặt đất. Vì bộ mã hóa không được kết nối với bộ logic bên trong nên cần phải kéo độc lập các bộ logic từ bên ngoài thông qua các điện trở đến đầu ra bộ mã hóa. Trong trường hợp này, khi không có chân nào của bộ mã hóa được nối đất thì sẽ có một chân logic trên các chân đó.

Nếu bộ mã hóa đã kết nối một chân nào đó với mặt đất thì chân này sẽ có giá trị logic bằng 0. Ở trạng thái yên tĩnh, đầu ra của bộ mã hóa là logic. Khi bạn bắt đầu xoay bộ mã hóa theo bất kỳ hướng nào, đầu tiên một chân được nối đất, sau đó là chân kia. Tiếp theo, các chân này lần lượt được ngắt khỏi mặt đất và một đơn vị logic lại được hình thành trên chúng.

Bạn có thể xác định hướng quay bằng thiết bị đầu cuối nào được kết nối với mặt đất trước tiên. Khi đếm các chu kỳ hoàn chỉnh, bạn có thể đếm số lần nhấp mà bộ mã hóa quay.

Trên thực tế, bộ mã hóa có bốn trạng thái:

  1. Hai đơn vị.
  2. Không và một.
  3. Không và không.
  4. Một và không.

Ba trạng thái không bằng nhau là không ổn định và bộ mã hóa không thể ở trong đó. Nhiều bộ vi điều khiển thực hiện chức năng đếm số lượt sử dụng bộ định thời có đầu vào cụ thể. Bộ hẹn giờ đếm ở cấp độ phần cứng số lần nhấp và hướng mà bộ mã hóa được quay và hiển thị giá trị. Tức là bộ đếm tăng một số.

Bằng cách thay đổi số này, bạn có thể xác định số lần nhấp chuột mà bộ mã hóa đã được quay. Bằng số lần nhấp chuột, bạn có thể xác định góc quay. Bộ mã hóa cũng có hiện tượng nảy tiếp xúc, khiến việc phân tích tín hiệu trở nên khó khăn.

Bộ mã hóa quang học

Bộ chuyển đổi như vậy được chế tạo dưới dạng một đĩa cố định trên trục và làm bằng thủy tinh. Cảm biến xoay quang học khác với các loại khác ở chỗ nó có thêm một mảng quang học di chuyển khi trục quay. Đồng thời, nó chuyển đổi mô-men xoắn thành quang thông, sau đó được cảm biến quang tiếp nhận.

Bộ chuyển đổi quang học ghi nhớ các góc quay. Trong trường hợp này, mỗi vị trí riêng lẻ tương ứng với một mã kỹ thuật số đặc biệt, cùng với số vòng quay tạo thành đơn vị đo của cảm biến. Bộ mã hóa kết nối và hoạt động theo cách tương tự như bộ mã hóa gia tăng.

Theo tính chất hoạt động, chúng được chia thành quang điệntừ tính . Nguyên lý hoạt động của từ tính dựa trên việc sử dụng , được phát hiện lần đầu tiên vào năm 1879. Trong trường hợp này, hiệu điện thế chỉ xuất hiện khi dây dẫn dòng điện một chiều đặt trong từ trường.

Về độ chính xác và độ phân giải, loại cảm biến từ tính kém hơn loại cảm biến quang điện, tuy nhiên, nó có thiết kế đơn giản hơn, ít đòi hỏi về điều kiện hoạt động và không gian. Bộ mã hóa từ tính là thiết bị phát hiện sự đi qua của cực từ của nam châm trong quá trình quay, nằm cạnh phần tử nhạy cảm. Thông tin máy phát được thể hiện bằng mã kỹ thuật số.

Bộ mã hóa quang điện là một cảm biến hoạt động dựa trên nguyên lý quang điện. Hiệu ứng này được quan sát thấy khi một chất tiếp xúc với ánh sáng. Nguyên tắc này được phát hiện vào năm 1887. Khi vận hành một cảm biến như vậy, chùm ánh sáng liên tục được chuyển đổi thành tín hiệu dòng điện.

Các chất tương tự của bộ mã hóa quang điện là quang điện tử, quang học và. Những cảm biến này nhạy cảm hơn với đặc điểm sản xuất, hoạt động và các yếu tố khác so với các mẫu khác. Tuy nhiên, điều này được chứng minh bằng độ chính xác ngày càng tăng của họ, không giống như các đối thủ cạnh tranh.

Bộ mã hóa là một thứ trông giống như một điện trở thay đổi, nhưng không giống như điện trở sau, nó không có bộ giới hạn và có thể quay theo bất kỳ hướng nào vô thời hạn. Sử dụng bộ mã hóa, sẽ rất thuận tiện để sắp xếp tất cả các loại menu trên màn hình; nói chung, một bộ mã hóa “có thể đẩy” (nghĩa là nếu nó cũng có thể hoạt động như một nút) là lý tưởng để tổ chức các menu tuần hoàn một chiều.

Có hai loại bộ mã hóa: tuyệt đối - xuất ngay mã góc quay và tăng dần - xuất xung trong khi quay. Về sau, bộ vi điều khiển phải chịu trách nhiệm đếm các xung và chuyển chúng thành các góc quay.

Từ quan điểm thiết kế, bộ mã hóa có thể là cơ học hoặc quang học; trong trường hợp đầu tiên, các xung quay được tạo ra trên một cặp tiếp điểm khi chúng được đóng lại bằng một tiếp điểm trượt của trục; bởi photodiod, và vai trò của contactor là một đèn LED chiếu qua một đĩa có khe cắm (xin chào chuột bi).

Mặc dù có rất nhiều thông tin về lập trình bộ mã hóa trên mạng cũng như các thư viện được tạo sẵn cho việc này, nhưng chúng đều có phần cồng kềnh không cần thiết (IMHO) - việc bỏ phiếu trạng thái thường được triển khai như một máy trạng thái hữu hạn dưới dạng một công tắc khối có các if lồng nhau, trông hơi phức tạp (đặc biệt khi được viết bằng trình biên dịch chương trình). Mặc dù việc thực hiện có thể đơn giản hơn.

Bộ mã hóa gia tăng cơ học giá rẻ là loại phổ biến nhất trong nền kinh tế quốc dân, vì vậy chúng tôi sẽ xem xét chúng. Quá trình quay trục bộ mã hóa được thể hiện dưới dạng sơ đồ trong hình (trên - xoay theo chiều kim đồng hồ, dưới - ngược chiều kim đồng hồ):


Ở đây A và B chính là những điểm tiếp xúc mà tại đó bộ vi điều khiển sẽ xử lý các cấp độ. Tiếp điểm chuyển động sẽ đóng chúng xuống đất nếu chúng không rơi vào lỗ của nó. Lưu ý ở đây là hình chỉ hiển thị bốn lỗ để đơn giản. Trên thực tế, còn có nhiều lỗ như thế này (một lần nữa, hãy nhớ lại con chuột bi và bánh xe cắt quang học của nó trông như thế nào). Đầu A và B được kéo lên bằng điện trở đến điện áp nguồn. Kết quả khi quay sẽ thu được sơ đồ như hình trên.

Ban đầu để cả hai tiếp điểm rơi vào lỗ, sau đó sẽ có mức điện áp cao trên chúng (chúng cũng được kết nối với nguồn điện). Hơn nữa, khi quay theo chiều kim đồng hồ, tiếp điểm A sẽ là tiếp điểm đầu tiên được nối đất, sau đó tiếp điểm B sẽ nối đất. Sau đó, khi đến lỗ tiếp theo trên đĩa, tiếp điểm A sẽ mở và nhận mức cao, sau đó tiếp điểm B. sẽ bắt kịp nó. Sau đó, các chuyển động này sẽ đưa các liên hệ về trạng thái ban đầu và với việc xoay thêm, sơ đồ này sẽ được lặp lại theo chu kỳ.

Do đó, hóa ra trạng thái hiện tại của bộ mã hóa được mô tả bằng giá trị hai bit. Nhưng bản thân trạng thái hiện tại mang rất ít thông tin hữu ích và để phân tích phép quay, nó phải được xem xét cùng với giá trị của trạng thái trước đó. Và cặp này đã xác định rõ ràng hướng quay của tay cầm. Để thuận tiện, hãy lấy một số bốn bit, hai byte quan trọng nhất chứa trạng thái trước đó của liên hệ A và B và hai byte thấp nhất chứa trạng thái hiện tại.

Và khi quay ngược chiều kim đồng hồ

nhị phân Số thập phân
1110 14
0001 1
0010 2
0111 7

Bây giờ thuật toán xác định hướng quay của bộ mã hóa trông rất đơn giản: chúng ta lấy giá trị và so sánh xem nó có thuộc một trong các bộ (2, 4, 11, 13) và (1, 7, 8, 14) hay không. Nếu có thì chúng ta rẽ theo hướng tương ứng. Mặt khác, trục hoàn toàn không quay hoặc quay nhanh đến mức bỏ qua một số trạng thái (nếu điều này xảy ra thường xuyên, thì bạn nên nghĩ đến việc tăng tần suất thăm dò trạng thái) hoặc có hiện tượng "nảy" của các tiếp điểm. Nếu không đi sâu vào lý do, tất cả các ý nghĩa khác có thể được bỏ qua một cách an toàn.

Ví dụ: hãy xem xét hoạt động của bộ mã hóa kết hợp với bộ vi điều khiển AVR:


Ở đây, hai chân cấp thấp của cổng PB của vi điều khiển ATMega8 được sử dụng để kết nối. Một cặp điện trở kéo các đường dây này lên đến điện áp cung cấp (vì các điện trở bên trong của Atmega ở đây có thể không đủ để hoạt động ổn định), một cặp tụ điện được lắp đặt để triệt tiêu nhiễu xung.

Đối với sơ đồ kết nối như vậy, bạn có thể phác thảo cách triển khai sau trong C:

Bộ mã hóa uint8_t tĩnhGetVal() ( return PINB & 3; ) bộ mã hóa uint8_t tĩnhGetCode() ( static uint8_t prev; uint8_t val = bộ mã hóaGetVal(); uint8_t code = (prev<< 2) | val; prev = val; return code; } static void encoderInit() { DDRB &= ~0b11; PORTB |= 0b11; encoderGetCode(); } void onEncoderEvent(bool direction); void encoderCheck() { uint8_t code = encoderGetCode(); if (code == 1 || code == 7 || code == 8 || code == 14) { onEncoderEvent(true); } else if (code == 2 || code == 4 || code == 11 || code == 13) { onEncoderEvent(false); } }

Mã cực kỳ đơn giản - một vài if và không có máy trạng thái hữu hạn. Hàm EncodingInit() được gọi ngay từ đầu để khởi tạo cổng và ghi nhớ giá trị bắt đầu. Hàm bộ mã hóaCheck() được gọi trong vòng lặp sự kiện (trong main() hoặc bằng bộ đếm thời gian). Trình xử lý onEncodeEvent(bool) sẽ được gọi bất cứ khi nào bộ mã hóa được xoay và nhận được cờ hướng quay.

Nhưng có một điểm quan trọng: bộ mã hóa là một thứ nhạy cảm và nếu bạn cố xử lý, chẳng hạn như các sự kiện điều hướng menu theo cách này, thì ngay cả một cú xoay nhỏ của núm bộ mã hóa cũng sẽ liên tục gọi trình xử lý onEncodeEvent(), như kết quả là con trỏ menu thay vì di chuyển đến phần tử tiếp theo/trước đó sẽ bay ngay đến cuối/đầu danh sách. Bạn có thể điều chỉnh độ nhạy của bộ mã hóa bằng cách thay đổi tần số của lệnh gọi bộ mã hóaCheck() (thường tần số tối ưu là ~ 10 Hz). Trong trường hợp này, phương thức bộ mã hóaGetCode() phải được gọi thường xuyên nhất có thể để luôn có giá trị hiện tại ở trạng thái cuối cùng của các tiếp điểm (với tần số khoảng 100 Hz).

Trong trình biên dịch mã này có thể trông như thế này:

Bộ mã hóa EQU_port PORTB .EQU bộ mã hóa_pin PINB .EQU bộ mã hóa_ddr DDRB .DSEG .ORG SRAM_START sEncodePrev: .BYTE 1 ... .CSEG .ORG $0000 ... Encode_init: cbi Encoding_ddr, 0 cbi Encoding_ddr, 1 sbi Encoding_port, 0 s bi Encoder_port, 1 trong r0, bộ mã hóa_pin andi r0, 3 mũi sEncodePrev, r0 ... Encode_check lds ZL, sEncodePrev lsl ZL lsl ZL trong r0, bộ mã hóa_pin andi r0, 3 mũi sEncodePrev, r0 hoặc ZL, r0 ; 1 7 8 14 -> cpi ZL theo chiều kim đồng hồ, 1 breq Encode_theo chiều kim đồng hồ cpi ZL, 7 breq Encode_theo chiều kim đồng hồ cpi ZL, 8 breq Encode_theo chiều kim đồng hồ cpi ZL, 14 breq Encoding_clockwise ; 2 4 11 13 -> cpi ZL ngược chiều kim đồng hồ, 2 breq Encode_ngược chiều kim đồng hồ cpi ZL, 4 breq Encode_ngược chiều kim đồng hồ cpi ZL, 11 breq Encode_ngược chiều kim đồng hồ cpi ZL, 13 breq Encode_ngược chiều kim đồng hồ rjmp Encoding_done Encoding_clockwise: ; ; đây là mã xử lý xoay theo chiều kim đồng hồ; Bộ mã hóa_ngược chiều kim đồng hồ: ; ; đây là mã xử lý xoay ngược chiều kim đồng hồ; Khoảng_enc_done.

Tìm hiểu cách sử dụng bộ mã hóa quay tăng dần trong dự án Arduino.

Bộ mã hóa quay là một thiết bị cơ điện chuyển đổi chuyển động quay thành thông tin kỹ thuật số hoặc tương tự. Nó rất giống với một chiết áp, nhưng có thể xoay vô thời hạn theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Có một số loại bộ mã hóa quay. Hai loại chính là bộ mã hóa tuyệt đối và tương đối (gia tăng). Trong khi bộ mã hóa tuyệt đối xuất ra một giá trị tỷ lệ thuận với góc trục hiện tại thì bộ mã hóa gia tăng xuất ra bước và hướng của trục. Bộ mã hóa quay ngày càng trở nên phổ biến trong các thiết bị điện tử tiêu dùng, đặc biệt là các núm điều khiển, bên cạnh các ứng dụng trong nhiều lĩnh vực khác. Chúng thay thế chiết áp và các nút điều hướng khi cần điều hướng, thiết lập, nhập dữ liệu và lựa chọn menu nhanh. Một số bộ mã hóa cũng bao gồm một nút tích hợp tạo đầu vào bổ sung cho bộ xử lý có thể được sử dụng làm lệnh người dùng khác trong giao diện điều khiển. Trong hình bên dưới, bạn có thể thấy một bộ mã hóa quay tăng dần điển hình có nút nguồn.

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách sử dụng bộ mã hóa quay tăng dần trong dự án Arduino. Chúng tôi sẽ giải thích cách xử lý hiện tượng nảy tiếp điểm và giải thích các tín hiệu bộ mã hóa trong chương trình vi điều khiển bằng cách sử dụng các ngắt.

Tín hiệu đầu ra cầu phương của bộ mã hóa lũy tiến

Bộ mã hóa quay tăng dần tạo ra hai tín hiệu đầu ra khi trục quay, còn được gọi là đầu ra cầu phương. Tùy thuộc vào hướng, một tín hiệu đi trước tín hiệu kia. Dưới đây bạn có thể thấy dạng sóng đầu ra của bộ mã hóa quay tăng dần và chuỗi bit dự kiến.

Như có thể thấy từ hình, cả hai đầu ra ban đầu đều ở trạng thái logic. Khi trục bộ mã hóa bắt đầu quay theo chiều kim đồng hồ, trạng thái ở đầu ra A trước tiên giảm xuống mức logic 0, sau đó đầu ra B có độ trễ. Khi quay ngược chiều kim đồng hồ, điều ngược lại sẽ xảy ra. Các khoảng thời gian trên sơ đồ tín hiệu phụ thuộc vào tốc độ quay, nhưng độ trễ tín hiệu vẫn được đảm bảo trong mọi trường hợp. Dựa trên đặc điểm này của bộ mã hóa quay tăng dần, chúng tôi sẽ viết chương trình cho Arduino.

Lọc độ nảy tiếp xúc của bộ mã hóa cơ học

Bộ mã hóa cơ học có các công tắc tích hợp tạo ra tín hiệu đầu ra cầu phương trong quá trình quay.

Khi xử lý tín hiệu bộ mã hóa, vấn đề chính là liên lạc bị trả lại. Nó gây ra việc xác định sai hướng quay và mức độ quay của trục bộ mã hóa và khiến việc sử dụng bộ mã hóa gặp khó khăn. Chúng ta có thể loại bỏ liên hệ bị trả lại bằng cách lọc nó trong một chương trình hoặc sử dụng các sơ đồ lọc bổ sung.

Lọc tiếng ồn trong phần mềm vi điều khiển là một lựa chọn lọc nhưng nó có một số nhược điểm. Bạn cần viết mã phức tạp hơn để xử lý tiếng ồn. Quá trình lọc sẽ tiêu tốn thời gian xử lý và gây ra độ trễ trong luồng chương trình chính. Bạn có thể cần đặt bộ hẹn giờ để bỏ qua khoảng thời gian liên hệ bị trả lại. Cuối cùng, bạn có thể không nhận được một kết quả khả quan và đáng tin cậy.

Việc lọc tiếng ồn bằng phần cứng bổ sung sẽ đơn giản hơn và ngăn chặn tiếng ồn ngay tại nguồn. Bạn sẽ cần một bộ lọc RC đặt hàng đầu tiên. Trong hình bên dưới, bạn có thể thấy tín hiệu trông như thế nào sau khi sử dụng bộ lọc RC.

Bộ lọc RC làm chậm thời gian giảm và thời gian tăng và cung cấp khả năng gỡ lỗi phần cứng. Khi chọn cặp điện trở-tụ điện, bạn phải xem xét tốc độ tối đa. Nếu không, phản hồi của bộ mã hóa dự kiến ​​sẽ bị lọc.

Ứng dụng đơn giản

Chúng tôi sẽ tạo một ứng dụng trình bày cách sử dụng bộ mã hóa quay trong dự án Arduino. Chúng tôi sẽ sử dụng bộ mã hóa để điều hướng, nhập và chọn dữ liệu. Dưới đây là sơ đồ của ứng dụng.

Mạch dựa trên bảng Arduino Uno. Màn hình LCD của Nokia 5110 được sử dụng cho giao diện đồ họa. Bộ mã hóa quay cơ học có nút bấm và bộ lọc RC được thêm vào làm điều khiển.

Chúng tôi sẽ phát triển một menu phần mềm đơn giản trong đó chúng tôi sẽ trình diễn hoạt động của bộ mã hóa quay.

Xử lý tín hiệu mã hóa bằng cách sử dụng ngắt

Tín hiệu bộ mã hóa phải được phát hiện và giải thích trong chương trình càng nhanh càng tốt để không chặn luồng chương trình chính. Chúng ta có thể phát hiện tín hiệu bằng cách thăm dò trong vòng lặp chính hoặc bằng cách sử dụng các ngắt. Bỏ phiếu không hiệu quả vì bạn cần dành thời gian và tài nguyên trong vòng lặp chính, điều này gây ra thêm độ trễ. Sử dụng ngắt là giải pháp nhanh hơn và tiết kiệm chi phí hơn. Chúng tôi sẽ chỉ cho bạn cách sử dụng các ngắt để xử lý tín hiệu bộ mã hóa.

Atmega328 có hai loại ngắt có thể được sử dụng cho mục đích này; ngắt bên ngoài và ngắt thay đổi trạng thái đầu ra. Các chân INT0 và INT1 được gán cho một ngắt ngoài và PCINT0 - PCIN15 được gán cho một ngắt khi một chân thay đổi trạng thái. Ngắt bên ngoài có thể phát hiện xem tín hiệu đầu vào đang giảm hay tăng và có thể được kích hoạt theo một trong các điều kiện sau: tăng, giảm hoặc chuyển mạch. Có nhiều tài nguyên phần cứng hơn dành cho ngắt thay đổi chân, nhưng nó không thể phát hiện các cạnh tăng và giảm và nó được gọi khi có bất kỳ thay đổi trạng thái logic nào (chuyển đổi) xảy ra trên một chân.

Để sử dụng ngắt thay đổi chân, hãy kết nối đầu ra vòng quay A và B của bộ mã hóa với A1 và A2, đồng thời đầu ra nút với chân Arduino A0, như thể hiện trong sơ đồ mạch. Đặt các chân A0, A1 và A2 ở chế độ đầu vào và bật các điện trở kéo lên bên trong của chúng. Kích hoạt ngắt thay đổi chân trong thanh ghi PCICR và kích hoạt ngắt cho các chân A0, A1 và A2 trong thanh ghi PCMS1. Nếu phát hiện bất kỳ thay đổi nào về trạng thái logic trên một trong các đầu vào này, ISR(PCINT1_vect) (Ngắt trạng thái chân) sẽ được gọi.

Vì ngắt thay đổi chân được gọi cho bất kỳ thay đổi logic nào, nên chúng ta cần giám sát cả hai tín hiệu (cả A và B) và phát hiện sự quay khi nhận được chuỗi dự kiến. Như có thể thấy từ sơ đồ tín hiệu, chuyển động theo chiều kim đồng hồ tạo ra A = …0011… và B = …1001… . Khi chúng ta ghi cả hai tín hiệu vào byte seqA và seqB, dịch chuyển lần đọc cuối cùng sang phải, chúng ta có thể so sánh các giá trị này và xác định bước xoay mới.

Bạn có thể thấy một phần mã bao gồm chức năng ngắt khởi tạo và thay đổi mã pin.

Void setup() ( pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); // Kích hoạt điện trở kéo lên bên trong digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite( A2, CAO); PCICR = 0b00000010; // 1. PCIE1: Cho phép ngắt thay đổi trạng thái 1 PCMSK1 = 0b00000111; // Cho phép ngắt thay đổi trạng thái cho A0, A1, A2) void loop() ( // Vòng lặp chính) ISR (PCINT1_vect ) ) ( // Nếu ngắt là do nút gây ra if (!digitalRead(A0)) ( nút = true; ) // Nếu ngắt là do tín hiệu bộ mã hóa else ( // Đọc tín hiệu A và B boolean A_val = digitalRead (A1); boolean B_val = digitalRead(A2); // Viết tín hiệu A và B thành các chuỗi riêng biệt seqA<<= 1; seqA |= A_val; seqB <<= 1; seqB |= B_val; // Маскировать четыре старших бита seqA &= 0b00001111; seqB &= 0b00001111; // Сравнить запсанную последовательность с ожидаемой последовательностью if (seqA == 0b00001001 && seqB == 0b00000011) { cnt1++; left = true; } if (seqA == 0b00000011 && seqB == 0b00001001) { cnt2++; right = true; } } }

Việc sử dụng một ngắt bên ngoài làm cho quá trình trở nên đơn giản hơn, nhưng vì ngắt này chỉ có hai chân được gán cho nó nên bạn sẽ không thể sử dụng nó cho các mục đích khác nếu sử dụng nó bằng một bộ mã hóa. Để sử dụng ngắt ngoài, bạn phải đặt chân 2 (INT0) và 3 (INT1) ở chế độ đầu vào và bật điện trở kéo lên bên trong của chúng. Sau đó chọn tùy chọn cạnh rơi để kích hoạt cả hai ngắt trong thanh ghi EICRA. Cho phép ngắt ngoài trong thanh ghi EIMSK. Khi trục bộ mã hóa bắt đầu quay, đầu tiên tín hiệu dẫn đầu giảm xuống mức logic 0 và tín hiệu thứ hai vẫn ở mức logic trong một thời gian. Do đó, chúng ta cần xác định tín hiệu nào ở trạng thái logic trong thời gian ngắt. Sau khi tín hiệu dẫn đầu giảm xuống mức logic 0, sau một thời gian, tín hiệu thứ hai cũng sẽ giảm xuống mức logic 0, gây ra một lần gián đoạn khác. Nhưng lần này và tín hiệu (dẫn đầu) khác sẽ ở mức logic thấp, nghĩa là nó không phải là điểm bắt đầu quay nên chúng ta bỏ qua nó.

Dưới đây bạn có thể thấy một phần mã bao gồm chức năng khởi tạo và xử lý ngắt bên ngoài.

Void setup() ( pinMode(2, INPUT); pinMode(3, INPUT); // Kích hoạt điện trở kéo lên bên trong digitalWrite(2, HIGH); digitalWrite(3, HIGH); EICRA = 0b00001010; // Chọn cuộc gọi khi bật cạnh rơi EIMSK = 0b00000011; // Kích hoạt ngắt ngoài ) void loop() ( // Vòng lặp chính ) ISR (INT0_vect) ( // Nếu tín hiệu thứ hai ở trạng thái logic một thì đây là một vòng quay mới if (digitRead( 3) == CAO) ( left = true; ) ) ISR (INT1_vect) ( // Nếu tín hiệu thứ hai ở trạng thái logic một thì đây là một vòng quay mới if (digitRead(2) == HIGH) ( right = ĐÚNG VẬY; ) )

Mã hoàn chỉnh cho bản phác thảo Arduino, bao gồm cả vòng lặp chính, ở bên dưới:

#bao gồm #bao gồm #bao gồm byte dễ bay hơi seqA = 0; byte dễ bay hơi seqB = 0; byte dễ bay hơi cnt1 = 0; byte dễ bay hơi cnt2 = 0; boolean dễ bay hơi đúng = sai; boolean dễ bay hơi left = false; nút boolean dễ bay hơi = false; đèn nền boolean = đúng; mục menu byte = 1; trang byte = 1; Hiển thị Adafruit_PCD8544 = Adafruit_PCD8544(13, 12,11, 8, 10); void setup() ( pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); // Kích hoạt điện trở kéo lên bên trong digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite( A2, CAO); // Kích hoạt pinMode đèn nền LCD (9, OUTPUT); digitalWrite(9, CAO); // 1. PCIE1: Kích hoạt ngắt thay đổi trạng thái 1 = 0b00000111; (2); // Đặt hướng LDC display.begin(60); // Đặt độ tương phản LCD display.clearDisplay(); // Xóa vòng lặp display.display(); () ( // Tạo các trang menu if (page==1) ( display.setTextSize(1); display.clearDisplay(); display.setTextColor(BLACK, WHITE); display. setCursor(15, 0); display.print ("MENU CHÍNH"); display.drawFastHLine(0,10,83,BLACK); display.setCursor(0, 15); if (menuitem==1) ( display.setTextColor (TRẮNG, ĐEN); khác ( display. setTextColor(ĐEN, TRẮNG); ) display.print(">Độ tương phản: 99%"); display.setCursor(0, 25); if (menuitem==2) ( display.setTextColor(WHITE, BLACK); ) else ( display.setTextColor(BLACK, WHITE); ) display.print(">Bộ mã hóa kiểm tra"); if (menuitem==3) ( display.setTextColor(WHITE, BLACK); ) else ( display.setTextColor(BLACK, WHITE); ) display.setCursor(0, 35); display.print(">Đèn nền:"); if (đèn nền) ( display.print("ON"); ) else ( display.print("OFF"); ) display.display(); ) ngược lại nếu (page==2) ( display.setTextSize(1); display.clearDisplay(); display.setTextColor(BLACK, WHITE); display.setCursor(15, 0); display.print("ENC. TEST" ); display.drawFastHLine(0,10,83,BLACK); display.setCursor(5, 15); display.print("LEFT RIGHT"); display.setCursor(55, 25); display.setTextSize(2); display.display(); // Thực hiện hành động nếu nhận được lệnh mới từ bộ mã hóa bên trái) ( left = false; menuitem--; if (menuitem= =0) ( menuitem=3; ) ) if (phải) ( right = false; menuitem++; if (menuitem==4) ( menuitem=1; ) ) if (nút) ( nút = false; if (trang == 1 && menuitem==3) ( digitalWrite(9, LOW); if (đèn nền) ( đèn nền = false; digitalWrite(9, LOW); ) else ( đèn nền = true; digitalWrite(9, HIGH); ) ) else if (trang == 1 && menuitem==2) ( page=2; cnt1=0; cnt2=0; ) else if (page == 2) ( page=1 ; ) ) ) ISR (PCINT1_vect) ( // Nếu ngắt là gây ra bởi một nút if (!digitRead(A0)) ( nút = true; ) // Hoặc nếu ngắt là do tín hiệu bộ mã hóa gây ra ( // Đọc tín hiệu A và B boolean A_val = digitalRead(A1); boolean B_val = digitalRead(A2); // Viết tín hiệu A và B theo các chuỗi riêng biệt seqA<<= 1; seqA |= A_val; seqB <<= 1; seqB |= B_val; // Маскировать четыре старших бита seqA &= 0b00001111; seqB &= 0b00001111; // Сравнить запсанную последовательность с ожидаемой последовательностью if (seqA == 0b00001001 && seqB == 0b00000011) { cnt1++; left = true; } if (seqA == 0b00000011 && seqB == 0b00001001) { cnt2++; right = true; } } }

Bạn có thể thấy bộ mã hóa hoạt động trong video bên dưới.

Bộ mã hóa tần số có bề ngoài tương tự như một điện trở hoặc chiết áp thay đổi. Ba chân giống nhau, thân bảng giống nhau. Đây là nơi những điểm tương đồng của anh ấy kết thúc. Bên trong nó có hai công tắc, có đầu ra chung cho các tác vụ điều khiển và hai công tắc của riêng chúng.

Để bộ mã hóa hoạt động, chân giữa phải được nối đất và hai chân còn lại phải được nối với nguồn điện thông qua điện trở. Tín hiệu điều khiển phải được thu thập trực tiếp từ các đầu cuối của bảng mã hóa.

Bây giờ hãy tưởng tượng rằng bộ mã hóa là lý tưởng và các điểm tiếp xúc của nó không bị nhiễu. Hãy kết nối máy hiện sóng với đầu ra của bộ mã hóa và bắt đầu xoay núm mã hóa. Các xung sẽ được dịch chuyển tương đối với nhau 90 độ. Nếu vặn núm nguồn (kW) sang phải, sang trái hoặc quay lại, chúng ta sẽ có trình tự bảng điều khiển:

Nếu biểu đồ dao động là một ứng dụng của chuỗi nhiệm vụ gồm các số 0 và số 1 logic, thì chúng sẽ trông như thế này:

Hãy lấy một bộ mã hóa thông thường có khả năng phản hồi tiếp xúc. Vùng nảy:

Khi chuyển từ logic 1 sang logic 0, hiện tượng thoát xảy ra. Việc nảy có thể được xử lý theo hai cách: phần cứng và phần mềm.

Phương pháp phần cứng là kết nối một loạt tụ điện tần số, bộ kích hoạt Schmitt, như được chỉ ra trong sơ đồ bảng điều khiển:

Nên sử dụng phương pháp phần mềm để chống nói nhảm. Phương pháp này được mô tả trong thư viện Rothery. Thư viện này chứa một số chức năng cần thiết để cấu hình đầu ra của bộ điều khiển vector cho đầu vào và kết nối điện trở kéo lên nguồn (kW). Thư viện phải chỉ định các lệnh và nhiệm vụ thích hợp. Lệnh này bật điện trở kéo lên bên trong.

Hàm Nhận vị trí chuỗi vfd trả về giá trị bộ mã hóa. Chức năng này là cần thiết để có được số xung mà bộ mã hóa đếm được. Cần có hàm Vị trí vfd được đặt để tải giá trị mà bộ mã hóa sẽ bắt đầu đếm.

Chức năng đánh dấu cần được xem xét chi tiết hơn. Các biến của hàm này, sig1 và sig2, ghi lại trạng thái của chân vectơ mà bộ mã hóa được kết nối. Các chân này sau đó được ghi vào biến vfd thisState, đây là trạng thái hiện tại của bộ mã hóa. Nếu trạng thái hiện tại của bộ mã hóa không bằng trạng thái trước đó thì các hướng đếm mới sẽ được tính toán và số xung nguồn được lưu trong biến Vị trí. Khi bộ mã hóa quay trở lại vị trí vectơ ban đầu của nó, sẽ có sự dịch chuyển sang phải hai bit và giá trị điều khiển mới phải được ghi vào biến Vị tríExt. Biến này cần thiết để lưu một loạt kết quả nhiệm vụ sẽ được sử dụng trong chương trình chính.

Kiểm tra

Sau khi phân tích trạng thái của bộ mã hóa khi quay trái và phải, chúng tôi lập bảng:

Vị trí xuất phát của nó là 1-1. Khi rẽ sang phải, xảy ra tiếng click, đơn vị trở thành số 0 logic. Giá trị mới của State vfd này là 01. Theo lệnh, kết quả này được tính tổng bằng giá trị của biến Vị trí.

Do xảy ra tiếng trò chuyện nên vị trí trở thành 11, sau khi tính toán lại số sê-ri trở thành 7. Sau khi trò chuyện kết thúc, bạn cần sửa vị trí mới 01 và thêm một vị trí vào số 0 trước đó. Khi quay bộ mã hóa, có một cú nhấp chuột và giá trị của biến Vị trí trở thành một.

Lần nhấp thứ hai xảy ra khi bộ mã hóa được quay sang phải và thay vì vị trí 01, chúng ta có vị trí 00. Sau khi tất cả quá trình nảy kết thúc, đầu ra điều khiển cũng có giá trị là một. Ở lần nhấp thứ tư, khi vị trí từ 10 trở thành 11, chúng ta có giá trị là 6. Sau khi kết thúc quá trình nảy, vẫn còn lại 6.

Một số bộ mã hóa sử dụng nút bảng điều khiển. Khi bạn nhấn và thả nó ra, danh bạ cũng sẽ bị trả lại; bạn cần sử dụng thư viện Bounce. Các chức năng của thư viện này là cần thiết để đặt mã pin mà nút sẽ được kết nối và thời gian trễ tính bằng mili giây. Nếu nhấn nút thì hàm nguồn (kW) sẽ trả về giá trị vectơ đúng, nếu không thì trả về vfd sai.

Sơ đồ kết nối bộ mã hóa với bộ biến tần

Trong ngành công nghiệp máy công cụ, bộ mã hóa được sử dụng rộng rãi cho bộ biến tần của động cơ không đồng bộ. Chúng được gắn dưới dạng cảm biến phản hồi dựa trên tốc độ của chúng. Những bộ mã hóa như vậy có độ lệch lớn từ 100 xung trên mỗi vòng quay đến 1 triệu xung trên mỗi vòng quay. Thương hiệu này có độ phân giải 500 xung. ngược lại.

Bộ mã hóa được chia thành các loại nhiệm vụ theo. Chúng là tuyệt đối và gia tăng. Bộ mã hóa của chúng tôi thực hiện chức năng thông thường - nó tạo ra tín hiệu phân biệt khi tắt nguồn và cấp lại nguồn. Trạng thái ban đầu không được bảo tồn.

Bộ mã hóa loại tuyệt đối có bộ nhớ trong ghi nhớ các vị trí cuối cùng. Tại sao cần bộ nhớ và tại sao lại lưu dữ liệu này? Trong các nhà máy sản xuất máy công cụ, trước khi di chuyển một thiết bị nhất định, điểm 0 được chỉ định trước tiên. Quá trình này được gọi là tham chiếu, nghĩa là tiến về không.

Việc sử dụng cảm biến chế độ xem tuyệt đối giúp tránh quy trình này lần thứ hai và giảm thời gian, miễn là hệ thống có các hạn chế về chuyển động.

Chúng ta hãy nhìn vào bộ mã hóa sin và cosine. Chúng tạo ra tín hiệu đầu ra cosin hoặc sin. Tiếp theo, sử dụng thiết bị nội suy công suất, các xung được hình thành từ chúng. Tín hiệu loại này có thể được thay đổi kích thước. Bộ mã hóa được cấp nguồn từ điện áp 5 volt.

Tín hiệu "A" là tín hiệu xung trực tiếp. Số lượng xung từ tín hiệu này xuất hiện ở mỗi vòng quay. Nó bằng 500 (độ phân giải cảm biến).

Tín hiệu “B” cũng là tín hiệu xung trực tiếp. Từ đó, ở mỗi vòng quay, số xung được nhận tùy theo độ rời rạc của cảm biến, được dịch chuyển khỏi kênh “A” 90 độ (500).

Tín hiệu "R" là tín hiệu dấu 0. Một xung thu được từ một vòng quay của cảm biến.

Bộ mã hóa công nghiệp sử dụng tín hiệu vi phân để làm việc với bộ biến tần (bộ biến tần). Tên của nó rất phức tạp, nhưng thực tế mọi thứ đều đơn giản. Tất cả các kênh đều được sao chép riêng bằng cách đảo ngược của chúng. Điều này là cần thiết để gửi tín hiệu qua khoảng cách đáng kể. Kênh đầu ra của bộ mã hóa được kết nối với bộ thu chuyên dụng được chế tạo bằng bộ khuếch đại loại hoạt động. Xung cuối cùng được xác định bởi sự kết hợp của hai tín hiệu.

Sự liên quan

Kết nối rất đơn giản. Chúng tôi kết nối điện áp 5 volt với đầu ra của bộ mã hóa. Chúng tôi có bố cục: dây màu nâu - 0 V, trắng - +5 V, hồng, xanh lá cây và đỏ - A, B, R.

Chương trình kết nối bộ mã hóa dựa trên các ngắt của kênh A và B. Các ngắt được kích hoạt ở cạnh lên. Điều này dẫn đến tình huống bộ mã hóa chậm lại tại thời điểm giao nhau raster và tín hiệu đầu ra kênh luôn dương. Các xung được đếm liên tục bằng bộ đếm.

Trong trường hợp của chúng tôi, chúng tôi sẽ không sử dụng các ngắt vì chúng tôi đang làm việc với 4 cảm biến, chúng hoạt động đồng thời. Nếu bạn sử dụng mạch ngắt thì rất có thể sẽ xảy ra tình trạng mất xung. Chúng tôi giải quyết vấn đề này bằng cách đặt biểu tượng hiện diện chuyển động. Và chúng tôi đã xem xét hoạt động của bộ mã hóa công nghiệp.

Hoạt động của bộ đếm xung dựa trên mô-đun bộ mã hóa

Bộ đếm hoạt động cùng với mô-đun chỉ báo bảy chữ số, sẽ hiển thị số xung do bộ mã hóa tạo ra. Khi được bật, giá trị bộ đếm bằng 0.

Hãy xoay núm mã hóa theo chiều kim đồng hồ. Giá trị bộ đếm được tăng lên một đơn vị mỗi lần nhấp vào bộ mã hóa. Số lớn nhất bạn có thể có được là 999999999. Số này phải lấp đầy tất cả các chữ số của chỉ báo bảy đoạn của chúng tôi. Nếu bạn xoay núm thêm nữa, bộ đếm sẽ đặt lại về 0 và bắt đầu đếm lại từ 0.

Ví dụ: hãy cuộn lên 120 xung. Bây giờ vặn nó lại bằng cách xoay tay cầm ngược chiều kim đồng hồ. Trục trung tâm của bộ mã hóa hoạt động giống như một nút bấm. Nó xóa các chữ số miễn phí của chỉ báo khỏi số không. Nút bấm có phần tiếp xúc hơi nảy nên việc tắt bật không diễn ra ngay lập tức. Bằng phần mềm, tiếng ồn được loại bỏ. Đây là cơ sở để làm việc với mô-đun bộ mã hóa.

Để thực hiện dự án trình diễn, chúng tôi sẽ cần:

  • bộ mã hóa 24 vị trí;
  • 16 đèn LED (3mm);
  • Trình điều khiển LED A6276;
  • vi điều khiển PIC18F2550.

Bộ mã hóa là một bộ phận điều khiển hiện đại và nguyên bản dành cho các thiết bị kỹ thuật số và về hình thức, nó tương tự như một điện trở thay đổi (xem hình bên dưới). Tên gọi khác của điều khiển này là cảm biến góc, cảm biến xoay. Chuyển động quay của trục đi kèm với tiếng tách, ví dụ 24 lần nhấp trên mỗi vòng quay. Bộ mã hóa có 3 đầu ra - A, B, C và được sử dụng để nhập nhanh dữ liệu vào các thiết bị kỹ thuật số. Một số kiểu máy có nút tích hợp được kích hoạt bằng cách nhấn trục bộ mã hóa (một đầu ra khác được thêm vào).

Nguyên lý hoạt động của bộ mã hóa

Ví dụ: khi xoay một cú nhấp chuột sang phải, tiếp điểm A+C sẽ đóng trước, sau đó là B+C. Khi trục được quay ở lần nhấn này, các tiếp điểm sẽ mở theo trình tự tương tự. Khi trục được quay theo hướng khác, trình tự đóng với tiếp điểm C sẽ thay đổi, tức là. khi rẽ trái, đầu tiên là B+C, sau đó là A+C đóng lại.

Khi sử dụng bộ mã hóa trong các dự án vi điều khiển, có thể triển khai một số loại dữ liệu đầu vào khác nhau bằng cùng một bộ mã hóa, tuy nhiên, điều này đòi hỏi một số phản hồi và trực quan hóa để người dùng biết mình đang nhập thông tin gì và vị trí của bộ mã hóa.

Sơ đồ

Chân bộ mã hóa A và B được kết nối với cổng vi điều khiển RB4 và RB5, chân bộ mã hóa C được nối đất. Điều đáng chú ý là các điện trở kéo lên phải được kết nối với đường tín hiệu của chân A và B. Không phải ngẫu nhiên mà bộ mã hóa được kết nối với các đường I/O quy định của vi điều khiển: thứ nhất, cổng B có sẵn điện trở kéo lên và chúng ta không cần phải kết nối các dây bên ngoài, thứ hai là cổng B của vi điều khiển có một chức năng rất hữu ích - "ngắt khi thay đổi" - ngắt bằng cách thay đổi mức độ, điều này sẽ cho phép chúng tôi theo dõi trạng thái của bộ mã hóa.

16 đèn LED 3 mm thông thường được sử dụng để trực quan hóa dữ liệu đầu vào và chúng sẽ được đặt trên bảng mạch in xung quanh bộ mã hóa được lắp đặt. Các đèn LED được kết nối với chip A6276.

Chip A6276 là trình điều khiển LED với đầu vào nối tiếp 16 bit. Trình điều khiển chứa một thanh ghi dịch chuyển CMOS 16 bit, các chốt và trình điều khiển liên quan để điều khiển đèn LED và có thể điều khiển nhiều đèn LED hơn mức bộ vi điều khiển cho phép. Ngoài ra, trình điều khiển có thể được điều khiển thông qua giao diện SPI, giúp giảm hơn nữa số lượng dòng I/O được sử dụng và giúp dự án có thể mở rộng.

Phần mềm vi điều khiển để giải quyết vấn đề của chúng tôi tương đối đơn giản. Có 3 chế độ hoạt động (nhập thông tin) và phản hồi:

  • Chế độ định vị 360° - ở chế độ này, đèn LED cho biết “vị trí” hiện tại của bộ mã hóa, người dùng có thể xoay trục bộ mã hóa sang trái và phải theo mọi góc độ;
  • Chế độ “Âm lượng/Mức” - ở chế độ này, đèn LED cho biết giá trị hiện tại giữa mức tối thiểu và tối đa của phạm vi đầu vào (như mức âm lượng trong thiết bị âm thanh);
  • Chế độ chuyển mạch quay 3 vị trí - Ở chế độ này, chỉ có ba vị trí có thể lựa chọn mà người dùng chọn bằng cách xoay trục bộ mã hóa sang trái/phải.

Trình diễn dự án

Tải xuống

Một kho lưu trữ ZIP có dự án trong môi trường MPLAB và mã nguồn trong Hitech C, cũng như sơ đồ mạch và cấu trúc liên kết của bảng mạch in đều được đặt.