Hiểu GPIO tương tự và kỹ thuật số


11

Tôi đang cố gắng để hiểu GPIO, và đã đọc một loạt các bài đăng trên blog khác nhau và tôi nghĩ rằng tôi sắp nhận được nó, nhưng vẫn phải vật lộn với một vài điều.

Tôi đã thấy một vài tham chiếu đến GPIO chỉ có thể hoạt động với các giá trị nhị phân, nhưng các bài đăng khác nói rằng giá trị có thể từ 0-255. Tôi cho rằng đây là sự khác biệt giữa GPIO analog và kỹ thuật số. Đúng không? Có thể là một pin GPIO duy nhất có thể hoạt động như cả analog và kỹ thuật số?


Theo dõi một số câu trả lời ... Giá trị nhị phân đề cập đến đầu vào hoặc đầu ra kỹ thuật số. Nó có thể là 1 (nên là điện áp nguồn, được gọi là "hi" hoặc "bật") hoặc 0 (có nghĩa là 0V, được gọi là "lo" hoặc "tắt"). Đó là độ phân giải 1 bit. Một đầu vào tương tự có thể là một phạm vi, thường là từ 0V đến VCC (điện áp nguồn). Một chip kỹ thuật số có độ phân giải 8 bit sẽ chuyển đổi đầu vào tương tự này thành tín hiệu kỹ thuật số 8 bit trong phạm vi 0 - 255 (nhị phân: 00000000 - 11111111), bởi vì 2 ^ 8 - 1 = 255 (nhị phân có nghĩa là cơ sở 2, 8 là từ 8 bit một phần và "- 1" vì các công cụ kỹ thuật số bắt đầu đếm ở 0, không phải 1).
Kurt E. Clothier

Câu trả lời:


14

Chân GPIO là chân 'đầu vào / đầu ra cho mục đích chung'. Điều này theo mặc định chỉ cao hoặc thấp (mức điện áp, cao là điện áp cung cấp của bộ điều khiển vi mô, mức thấp thường là mặt đất hoặc 0V). Nhưng các mức 'cao' và 'thấp' thường được đưa ra dưới dạng điện áp như là một tỷ lệ của điện áp cung cấp. Vì vậy, bất cứ điều gì thường trên 66% điện áp cung cấp được coi là mức logic 'cao', có nghĩa là một số thiết bị điện áp thấp hơn có thể nói chuyện với các thiết bị điện áp cao miễn là các mức nằm trong mức được coi là 'cao'. Ví dụ, một bộ vi điều khiển công suất thấp hoặc máy thu GPS 1.8.72VV sẽ gặp khó khăn khi giao tiếp trực tiếp với vi điều khiển 5V bởi vì những gì thiết bị điện áp thấp thấy là 'cao' thì thiết bị điện áp cao hơn sẽ không nghĩ nó cao. Đây là để sử dụng GPIO làm chân đầu vào,

Đôi khi, bạn có thể sử dụng chân SINGLE cho các giá trị 'tương tự', bằng cách định cấu hình chân GPIO được sử dụng bởi các thiết bị khác trên bo mạch như bộ chuyển đổi 'tương tự sang số' (ADC). Chân được đặt thành một kênh trên ADC và giờ đây đóng vai trò là đầu vào cho ADC, không phải là chân GPIO bình thường. Sau đó, bạn có thể đặt ADC lấy mẫu và đọc giá trị thanh ghi kết quả của ADC cho các số như 0-1024 nếu độ phân giải 10 bit.

Như ai đó đã đề cập, một chân GPIO có thể được sử dụng trong phần mềm để tạo ra hiệu ứng của tín hiệu Điều chế độ rộng xung (PWM), thường ở tốc độ thấp để chuyển đổi GPIO. Hầu hết các bộ vi điều khiển đều có bộ tạo PWM chuyên dụng có thể được cấu hình để sử dụng chân GPIO làm chân đầu ra, và chúng rất nhanh và ổn định hơn nhiều so với sử dụng phần mềm để điều khiển GPIO để tạo tín hiệu PWM. PWM được sử dụng cho tín hiệu kiểu 'trung bình' hoặc '%' và cho phép bạn thực hiện những việc như đèn mờ và kiểm soát tốc độ của động cơ.

Các chân GPIO thường được sắp xếp theo nhóm, được gọi là Cổng. Trong các bộ điều khiển nhỏ, chúng có thể là kiến ​​trúc 8 bit, do đó các cổng thường được nhóm thành nhiều 8 và các giá trị của chúng có thể được đọc cùng một lúc bằng cách đọc một "thanh ghi dữ liệu" đại diện cho các giá trị logic cao / thấp của chúng ghim. Tương tự, bạn có thể đặt các chân thành đầu ra và sau đó ghi 8 bit vào một thanh ghi dữ liệu và bộ điều khiển GPIO của bộ vi điều khiển sẽ đọc các giá trị thay đổi của thanh ghi và đẩy pin lên cao hoặc kéo pin xuống thấp tùy theo giá trị bạn vừa đặt.

Trong các bộ điều khiển mới hơn như ARM Cortex A8 và A9 như trong Raspberry Pi và BeagleBone, bộ điều khiển GPIO và các tùy chọn khác nhau của chúng rất phức tạp. Chúng sử dụng kiến ​​trúc 32 bit, vì vậy hầu hết các chân GPIO được sắp xếp thành các khối 32 chân, ngay cả khi không thực sự có thể sử dụng được (một số có thể được dành riêng hoặc không được bật). BeagleBone (mà tôi đã làm việc trước đây) có một số tùy chọn thực sự tuyệt vời cho số lượng chân lớn và đôi khi bạn sẽ cần sử dụng công cụ 'pin mux', cho phép bạn thiết lập các chế độ đặc biệt của một số chân nhất định cho mọi thứ như PWM, thu xung, đầu ra hẹn giờ, đầu vào kênh analog (ADC) và thậm chí (trên BeagleBone dù sao) ánh xạ tới các bộ xử lý phụ công nghiệp có sẵn trên lõi ARM, nhưng được coi là bộ xử lý độc lập và cần ánh xạ pin riêng theo thứ tự được kết nối với thế giới bên ngoài.


Bạn có thể đưa ra một ví dụ về cách "pin SINGLE có thể được sử dụng cho các giá trị 'tương tự" không?
Pavel

@ JimJim2000 chỉ là một luồng bật / tắt hoặc PWM thích hợp thông qua bộ lọc RC để tạo ra điện áp "trung bình" tương tự trơn tru trên đầu ra.
KyranF

7

Bạn rất có thể đề cập đến tương tự Arduino, thường sử dụng chân GPIO với phần mềm PWM . GPIO thường có ba trạng thái. Đầu ra Cao, Đầu ra Thấp và Đầu vào / Cao-Z (Trở kháng cao, ở đó không ảnh hưởng đến đầu ra).

PWM nhanh chóng chuyển một đầu ra từ Đầu ra cao sang Đầu ra thấp (chu kỳ), để tạo trung bình (Chu kỳ nhiệm vụ), cho phép một cái gì đó trông giống như một giá trị tương tự. Bằng cách chuyển đổi GPIO nhị phân ở chu kỳ thuế 50% (hoặc 128), đầu ra vẫn là nhị phân, nhưng trung bình chỉ bằng một nửa giữa Cao và Thấp.

Hãy nghĩ về một bóng đèn. Bạn thấy nó Bật hoặc Tắt. Nhưng nó thực sự bật và tắt 60 lần mỗi giây, nhanh đến mức bạn không nhận thấy nó nhấp nháy rất nhanh. Nhưng bật và tắt bóng đèn bằng tay thật chậm, và bạn nhận thấy nó đang nhấp nháy. Theo 255, nó có nghĩa là 100% trên và dưới 255 là một phần của 100% trên.

Đó là cách GPIO nhị phân có thể hoạt động như pin Analog 255 trạng thái.


Cảm ơn @Passerby, điều đó rõ ràng hơn nhiều. Tôi không đặc biệt nhìn vào arduino, nhưng mâm xôi pi và xương beagle. Có phải những gì bạn đang nói có nghĩa là bất kỳ pin nào cũng có thể có giá trị từ 0 đến 255? Tôi đang bị lẫn lộn giữa các tài liệu nói rằng một giá trị có thể là nhị phân so với các tài liệu khác nói rằng một giá trị có thể là 0-255.
đạp bàn

1
@pedalpete RPI và Arduino có rất nhiều sự chồng chéo trong đám đông và ý tưởng. Nhưng một PWM từ 0 đến 255 là tùy ý. Nó có thể là 0 đến 65535 hoặc 0 đến 16. 0 đến 255 là 8 bit chính xác. Trong đó 255 hoặc 65535 hoặc bất cứ điều gì là 100%. GPIO chỉ có Bật và Tắt nhị phân, nhưng bạn sử dụng PWM để giả vờ nó có thể có nhiều hơn là chỉ bật hoặc tắt. Đó là một ảo ảnh quang học hữu ích và có chủ ý.
Người qua đường

2
Một bóng đèn không nhấp nháy và tắt ở 60 lần mỗi giây. Dây tóc nóng lên và nóng lên
Scott Seidman

0

Một bit GPIO có thể là 0 hoặc 1. Một cổng GPIO 8 bit, được tạo thành từ 8 bit liên tiếp, có thể nằm trong khoảng từ 00000000 đến 11111111 hoặc 255 thập phân. Điều này ít liên quan đến khái niệm "tương tự"


Cảm ơn Scott, mặc dù tôi nghĩ bây giờ tôi đang bối rối hơn trước. Cổng GPIO là gì? Nếu tôi có chân GPIO (ví dụ trên Raspberry Pi), mỗi pin có được coi là một cổng không? Nếu vậy, mỗi pin có thể hoạt động với phạm vi thập phân 0-255 đã nói không?
đạp bàn

Bỏ qua câu hỏi cuối cùng của tôi, tôi thấy những gì bạn có ý nghĩa về một cổng.
đạp bàn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.