MCU 입력으로 설정한 핀의 값이 일정하지 않을 때(Floating)

임베디드/MCU 2014.07.27 16:40

 MCU를 설계할 때 많은 빈도로 사용되는 기능 중 하나는 아마 GPIO(General Purpose Input Output)일 겁니다. 거의 모든 MCU 설계의 기본이기도 하지요.


 MCU를 처음으로 설계하는 분들 중 MCU의 핀 하나를 입력으로 설정하여 입력을 받는게 받아들이는 값이 지멋대로 튀어 원치않는 값을 받는 경우를 경험하신 분들이 계실거라 생각합니다. 분명 VCC에 걸리면 HIGH 상태가 되고 GND에 연결하면 LOW 상태가 확실히 걸리는데 유독 아무런 값도 걸지 않은 상태에서는 값이 자기 맘대로 튀어 당황하신 분들도 계실거라 생각합니다.


 이와 같은 현상을 플로팅(Floating)이라 하며, 해당 핀의 상태가 HIGH도 아니고 LOW도 아닌 값을 가지고 있는 상황이 되는 것입니다. 즉, 확실한 값을 가지고 있지 않기 때문에 이 상태에서 입력값을 받으면 MCU는 계속해서 이상한 값을 가지게 되는 것입니다.


 이러한 상태를 해결하는 방법으로 풀업(pull-up)과 풀다운(pull-down) 방식이 있습니다.

 pull-up방식은 해당 입력핀의 연결라인 중간에 저항을 연결하고 해당 저항이 HIGH상태(주로 VCC)에 연결되어 있는 상황을 말합니다. 이렇게 회로를 설계하면 해당 입력핀의 값은 HIGH를 유지하다가 전압이 0으로 내려가면 LOW상태가 되며 값이 플로팅 상태 때보다 매우 안정적인 값을 얻으실 수 있습니다. pull-up 방식은 주로 I2C 통신에서 많이 사용되는 회로 입니다.



 위 그림은 I2C회로의 간략한 회로입니다. I2C회로는 각 기기들과 2개의 선으로 연결되어 있는데 해당 2개의 선인 SDA와 SCL은 다른 기기들과 그냥 연결하게 되면 Open Drain 상태가 되여 마스터의 입력이 HIGH가 되어도 Slave는 LOW값을 받아들이는 상태만 지속됩니다. 이러한 두 선에 pull-up 회로를 연결하게 되면 보통때에 HIGH 상태를 유지하던 회로가 MASTER에 의해 LOW 상태가 되면 똑같이 LOW 상태를 보이며 회로가 원하는 디래 동작을 할 수 있게 됩니다.


 pull-down 방식은 위해서 설명한 pull-up 방식과는 반대로 저항의 끝에 GND를 연결하여 LOW 상태를 유지하게 해줍니다. 이 상태에서 HIGH 값이 들어오게 되면 입력핀에서도 HIGH 값을 받을 수 있게 되는 것입니다. 




 위 그림은 pull-down 방식이 적용된 MCU의 상황입니다. 저항과 GND를 연결한 상태로 값이 들어오고 있지 않는 상황에서는 LOW 상태를 유지하다가 VCC나 다른 장치로부터 값이 들어오게 되면 MCU가 HIGH 상태를 인식할 수 있게 되는 것이지요.


 위와 같은 회로를 설계에 참고하신다면 입력값의 Floating 상태를 적절하게 방지하실 수 있을 것으로 보입니다.



좀 더 자세한 내용을 알고 싶으신 분들께 관련 내용이 잘 정리되어 있는 블로그를 알려드리겠습니다.

http://minyoub.tistory.com/5