GPIO 아날로그 및 디지털 이해


11

나는 GPIO를 이해하려고 노력하고 있으며 다른 블로그 게시물을 많이 읽었으며 그것을 얻는 것에 가깝지만 여전히 몇 가지 문제로 어려움을 겪고 있다고 생각합니다.

GPIO에 대한 몇 가지 참조만이 이진 값으로 만 작동 할 수 있지만 값이 0-255 일 수 있다고 말하는 다른 게시물이 있습니다. 이것이 아날로그와 디지털 GPIO의 차이점이라고 가정합니다. 그 맞습니까? 단일 GPIO 핀이 아날로그 및 디지털 기능을 모두 수행 할 수 있습니까?


일부 답변에 대한 후속 조치로 ... 이진 값은 디지털 입력 또는 출력을 나타냅니다. 1 ( "hi"또는 "on"이라고하는 소스 전압이어야 함) 또는 0 ( "lo"또는 "off"라고하는 0V)이 될 수 있습니다. 1 비트 해상도입니다. 아날로그 입력은 일반적으로 0V ~ VCC (소스 전압) 범위 일 수 있습니다. 8 비트 해상도의 디지털 칩은 2 ^ 8-1 = 255 (2 진은베이스 2를 의미하고 8은 8 비트에서 온 것이므로)이 아날로그 입력을 0-255 (이진 : 00000000-11111111) 범위의 8 비트 디지털 신호로 변환합니다. 디지털 물건은 1이 아닌 0부터 계산을 시작하기 때문에 "-1"입니다.
Kurt E. Clothier

답변:


14

GPIO 핀은 '범용 입 / 출력'핀입니다. 이것은 기본적으로 높거나 낮습니다 (전압 수준, 높음은 마이크로 컨트롤러의 공급 전압, 낮음은 보통 접지 또는 0V). 그러나 '높음'과 '낮음'의 수준은 일반적으로 공급 전압의 비율로 전압으로 제공됩니다. 따라서 일반적으로 공급 전압의 66 %를 초과하는 것은 로직 레벨 '고'로 간주됩니다. 이는 일부 저전압 장치가 레벨이 '고'로 간주되는 한 고전압 장치와 통신 할 수 있음을 의미합니다. 예를 들어 1.8–2.7V 저전력 마이크로 컨트롤러 또는 GPS 수신기는 5V 마이크로 컨트롤러와 직접 통신하는 데 문제가있을 수 있습니다. 저전압 장치가 고전압 장치를 '높은'것으로 보는 것은 전혀 높은 것으로 생각하지 않기 때문입니다. 이것은 GPIO를 입력 핀으로 사용하기위한 것입니다.

때때로 '아날로그 대 디지털'(ADC) 변환기와 같은 다른 온보드 장치에서 사용하도록 GPIO 핀을 구성하여 '아날로그'값에 SINGLE 핀을 사용할 수 있습니다. 핀은 ADC의 채널로 설정되며 이는 일반적인 GPIO 핀이 아니라 ADC의 입력으로 작동합니다. 그런 다음 ADC가 샘플을 가져 오도록 설정하고 10 비트 해상도 인 경우 0-1024와 같은 숫자에 대한 ADC의 결과 레지스터 값을 읽을 수 있습니다.

누군가 언급했듯이 GPIO 핀은 소프트웨어에서 PWM (Pulse Width Modulation) 신호의 효과를주기 위해 일반적으로 GPIO 토글을위한 저속에서 사용될 수 있습니다. 대부분의 마이크로 컨트롤러에는 GPIO 핀을 출력 핀으로 사용하도록 구성 할 수있는 전용 PWM 생성기가 있으며, 소프트웨어를 사용하여 PWM 신호를 생성하기 위해 GPIO를 제어하는 ​​것보다 매우 빠르고 안정적입니다. PWM은 '평균'또는 '%'스타일 신호에 사용되며 희미한 조명과 같은 작업을 수행하고 모터 속도를 제어 할 수 있습니다.

GPIO 핀은 일반적으로 포트라고하는 그룹으로 배열됩니다. 소형 컨트롤러에서는 8 비트 아키텍처 일 수 있으므로 포트는 종종 많은 8 개로 그룹화되며 로직 하이 / 로우 값을 나타내는 '데이터 레지스터'를 읽어 동시에 해당 값을 모두 읽을 수 있습니다. 다리. 마찬가지로, 핀을 출력으로 설정 한 다음 8 비트를 데이터 레지스터에 쓸 수 있으며, 마이크로 컨트롤러 GPIO 컨트롤러는 레지스터의 변경된 값을 읽고 방금 설정 한 값에 따라 핀을 높이거나 낮게 잡아 당깁니다.

Raspberry Pi 및 BeagleBone과 같은 ARM Cortex A8 및 A9와 같은 최신 컨트롤러에서는 GPIO 컨트롤러와 다양한 옵션이 매우 복잡합니다. 32 비트 아키텍처를 사용하므로 대부분의 GPIO 핀은 모두 실제로 사용 가능하지는 않지만 (일부 전용 또는 사용하지 않을 수 있음) 32 핀 블록으로 배열됩니다. BeagleBone (이전에 작업 한)에는 많은 양의 핀에 대한 훌륭한 옵션이 있으며 때로는 'pin mux'도구를 사용해야 할 수도 있습니다.이 도구를 사용하면 특정 핀의 특수 모드를 설정할 수 있습니다 PWM, 펄스 캡처, 타이머 출력, 아날로그 (ADC) 채널 입력, 심지어 ARM 코어에서 사용 가능한 산업용 서브 프로세서로의 (BeagleBone 어쨌든) 매핑과 같은 독립적 인 프로세서로 간주되며 순서대로 자체 핀 매핑이 필요합니다. 외부 세계와 연결됩니다.


"싱글 핀을 '아날로그'값에 사용할 수있는 방법"에 대한 예를 들어 주시겠습니까?
Pavel

@ JimJim2000은 출력에 부드러운 아날로그 "평균"전압을 생성하기 위해 RC 필터를 통한 온 / 오프 또는 적절한 PWM 스트림입니다.
KyranF

7

소프트웨어 PWM과 함께 GPIO 핀 사용하는 Arduino의 아날로그 출력을 참조 할 가능성이 높습니다 . GPIO는 일반적으로 세 가지 상태가 있습니다. Output High, Output Low 및 Input / High-Z (출력에 영향을 미치지 않는 높은 임피던스).

PWM은 출력을 출력 높음에서 출력 낮음 (기간)으로 빠르게 전환하여 평균값 (듀티 사이클)을 생성하여 아날로그 값처럼 보일 수 있습니다. 이진 GPIO를 50 % (또는 128) 듀티 사이클로 전환하면 출력은 여전히 ​​이진이지만 평균은 높음과 낮음의 중간 정도입니다.

전구를 생각하십시오. 켜짐 또는 꺼짐이 표시됩니다. 그러나 실제로 초당 60 번 켜지고 꺼 지므로 깜박임이 빠르지 않습니다. 그러나 전구를 실제로 천천히 수동으로 켜고 끄면 깜박이는 것을 알 수 있습니다. 255는 100 % 켜짐을 의미하고 255 미만은 100 %의 분수입니다.

이것이 바이너리 GPIO가 255 상태 아날로그 핀처럼 작동하는 방식입니다.


@Passerby에게 감사합니다. 훨씬 명확합니다. 나는 구체적으로 arduino를보고 있지 않지만 라즈베리 파이와 비글 본을보고 있습니다. 당신이 말하는 것은 어떤 핀이 0에서 255 사이의 값을 가질 수 있다는 것을 의미합니까? 값이 이진 일 수 있다는 것과 다른 사람이 값이 0-255 일 수 있다고 말하는 문서 사이에서 혼란스러워지고 있습니다.
pedalpete

1
@pedalpete RPI와 Arduino는 군중과 아이디어가 많이 중복됩니다. 그러나 0 ~ 255의 PWM은 임의적입니다. 0-65535 또는 0-16 일 수 있습니다. 0-255는 8 비트 정밀도입니다. 255 또는 65535 또는 100 %입니다. GPIO에는 바이너리 켜기 및 끄기 만 있지만 PWM을 사용하여 켜기 또는 끄기 이상의 것을 가질 수 있습니다. 유용하고 의도적 인 착시 현상입니다.
Passerby

2
전구는 초당 60 번 깜박이고 켜지지 않습니다. 필라멘트가 가열되고 가열 된 상태
Scott Seidman

0

GPIO 비트는 0 또는 1 일 수 있습니다. 8 개의 연속 비트로 구성된 8 비트 GPIO 포트의 범위는 00000000에서 11111111 또는 10 진수 255입니다. 이것은 "아날로그"의 개념과는 거의 관련이 없습니다.


고마워요 스콧, 전보다 더 혼란 스러워요. GPIO 포트란 무엇입니까? GPIO 핀이있는 경우 (Raspberry Pi의 예) 각 핀이 포트로 간주됩니까? 그렇다면, 각 핀은 상기 범위의 0-255 10 진수로 작동 할 수 있습니까?
pedalpete

마지막 질문을 무시하십시오. 이제 포트에 대한 의미를 알 수 있습니다.
pedalpete
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.