본문 바로가기

전자공학을 즐겁게/누구나 취미전자공학

버저(Buzzer) 울리기 - 피에조 버저(Piezo Buzzer)의 구동

728x90
반응형

요즘의 휴대전화기는 실제 음원을 사용하여 벨소리를 만들지만, 아주 오래 전의 휴대전화기들은 버저(Buzzer)를 이용해서 벨소리를 만들었습니다. 그때의 버저음이 생각이 나서 라즈베리 파이(Raspberry Pi)에 버저를 연결해서 삑삑거리는 것을 해 볼까 생각을 하면서 살펴보다 보니 버저에 대해서 생각해 보지 않았던 것들이 많이 있더라고요. 버저를 울리기 전에 버저 자체에 대한 이야기를 먼저 시작해 볼까 해요. 

 

일반적으로 버저(Buzzer)는 마그네틱 버저(Magnetic Buzzer)피에조 버저(Piezo Buzzer)로 나뉩니다. [1]

마그네틱 버저는 전자석에 의해서 자성체가 끌려오는 윈리를 이용한 것입니다. 전자석과 같은 원리를 이용하는 것이기 때문에 기본적으로 인덕턴스로 모델링이 됩니다. 때문에 큰 전류로 구동이 되는 버저입니다.

피에조 버저는 피에조(Piezo)를 이용한 버저입니다. 전압이 가해지면 마주 보는 두 판의 위치가 변하는 원리를 이용하는 것입니다.

 

제가 구한 버저는 피에조 버저이기 때문에 피에조 버저에 대해서만 좀 더 이야기해 보도록 하겠습니다. 인터넷에서 찾아본 글과 제가 알고 있는 내용을 더해서 제가 이해한 내용을 적어 볼게요.

인터넷에서 찾아서 구한 버저의 규격 중 일부입니다. 사실 이것이 거의 전부이지만. 피에조(Piezo)라고 되어 있으니 피에조 맞겠지요.

피에조 (Piezo) 효과

피에조(Piezo)는 힘을 받으면 전압 변화를 발생시키거나, 전압이 가해지면 물리적인 변형을 가져오는 소자 또는 그 현상을 말합니다. [2]

일반적으로 커패시턴스로 모델링이 되는데, 이것은 충전되어 있는 전하를 이용하기 때문입니다. 커패시턴스(capacitance)에 대해서는 살펴본 적이 있습니다. 제가 이해하는 피에조는 두 판 사이에 일정한 전하가 미리 충전되어 있는데, 두 판 사이에 전하가 충전되어 있기 때문에 커패시턴스가 형성이 됩니다. 전하와 커패시턴스와 전압 사이에는 다음 관계를 생각해 볼 수 있겠습니다.

$$Q=C{\cdot}V$$

여기에서 $Q$는 두 판 사이의 전하량, $C$는 두 판이 형성하는 커패시턴스, $V$는 두 판 사이의 전압이 됩니다.

또, 커패시턴스는 $$C=\varepsilon\frac{S}{d}$$로 표현할 수 있는데, $\varepsilon$는 유전율로 상수, $S$는 두 판의 면적, $d$는 두 판 사이의 거리가 됩니다.

두 판 사이에 일정한 전하량 $Q$를 충전시켰다고 했을 때, 전압이 증가한다면, $Q$는 일정한 값이기 때문에 커패시턴스 $C$가 감소해야 합니다. $C$가 감소하려면, 두 판이 형성하는 커패시턴스의 식으로부터 $S$나 감소하거나, $d$가 증가해야 하는데, 면적 $S$가 일정하다고 했을 때, 두 판 사이의 거리 $d$가 변화하는 것입니다. 전압에 따라서 두 판 사이의 거리가 달라지는 것이지요. 전압을 가했다가 가하지 않았다가를 반복하게 되면, 두 판 사이의 거리가 늘어났다 줄어들었다를 반복하여 떨림으로 나타납니다. 이것이 피에조 버저의 소리가 됩니다. 

반대로 압력에 의하여 커패시턴스의 $d$가 변화하면 커패시턴스의 변화를 가져오고, 역시 $Q$는 일정하기 때문에 $V$의 변화를 가져옵니다. 피에조 마이크와 같은 소자의 동작입니다.

이것은 어디까지나 제가 이해하고 있는 내용으로 개념적인 것입니다. 이 두 개의 수식 때문에 피에조 효과가 나타나는 것은 아닙니다. 하지만, 피에조 효과에도 위 수식이 유효하게 지켜진다는 것만 염두에 두고, 우리가 관찰하는 현상이 무엇으로부터 기인한 현상인지 이해하면 되겠습니다.

피에조 버저(Piezo Buzzer)의 구동 회로

버저가 전기만 연결한다고 삐-하고 울지 않습니다. 위에서 살펴본 피에조 효과로부터 어떤 특정 전압을 가하는 것은 피에조 버저를 구성하는 판에 물리적인 변화를 줄 뿐입니다. 전압에 변화를 주어 판의 위치가 바뀌었다 원위치되었다를 반복하여 떨림을 만드는 것이 목적입니다. 

여기에서는 라즈베리 파이(Raspberry Pi)의 GPIO를 사용하여 이 떨림을 제어하겠지만, 어떤 MCU의 GPIO를 사용하여도 동일하게 제어할 수 있습니다.

GPIO로 직접 구동하기

피에조 버저(Piezo Buzzer)를 라즈베리 파이의 GPIO에 직접 연결하는 방법

GPIO로 직접 연결하는 방법입니다. 버저의 한쪽 단자를 GPIO에 연결하고, 다른 한쪽을 GND에 연결하는 합니다. GPIO로 전압을 HIGH와 LOW를 번갈아 인가하게 됩니다. 라즈베리 파이의 GPIO는 3.3V IO이므로, 버저의 양단에는 $+3.3V_{pk-pk}$가 가해지게 됩니다. 그렇지만, GPIO 자체를 전원으로 사용하게 되는 것이기 때문에 GPIO의 Drive Strength가 충분한지를 잘 감안해야 합니다.

MOSFET을 사용한 구동

MOSFET을 스위치로 사용할 수가 있죠? 일단 GPIO의 Drive Strength에 대하여 신경 쓰고 싶지 않으니, 이 방법을 생각해 봅시다.

N-채널 MOSFET을 사용하여 스위칭하는 구동회로입니다.

라즈베리파이의 GPIO는 MOSFET의 게이트를 스위칭합니다. GPIO가 HIGH가 되면, Q2가 On 되어 버저 BZ3의 양쪽에 3.3V가 가해집니다. GPIO가 LOW가 되면, Q2는 Off 되고, 회로는 개방(open)됩니다. 

그런데, R2는 무엇이죠? R2는 리셋 저항(reset resistor)라고 부릅니다. [1] 피에조 버저는 커패시턴스로 모델링 된다고 위에서 얘기했죠? 저항 R2는 없는 경우에는, Q2가 On 되면 버저 BZ3는 충전되고, O2가 Off 되면 충전 상태로 남아 있어서 GND 쪽이 개방되더라도 BZ3의 전압이 떨어지지 않습니다. R2를 버저와 병렬로 추가해서 Q2가 Off 되었을 때, BZ3가 방전이 되어 전압이 떨어지게 하는 것입니다. R2 없이 실험해 보세요. 버저 소리가 거의 들리지 않을 정도로 울릴 것입니다.

 

다른 방법으로 스위칭하는 것도 가능하겠습니다. 

MOSFET을 사용하여 피에조 버저를 GND로 방전시키는 구동 회로

이 경우는 라즈베리 파이의 GPIO가 HIGH가 되었을 때, 피에조 버저를 GND로 쇼트(short)시켜 방전하는 회로입니다. R1이 없으면, Q1이 On 되었을 때 전원과 GND가 쇼트(short) 되는 것이기 때문에 R1으로 전류를 제한해 주는 것입니다. 물론 Q1이 Off 되는 경우에도 버저 BZ2의 커패시턴스 때문에 3.3V까지 전압이 올라갈 때까지 지연이 있을 것입니다. 제가 사용한 피에조 버저의 사양에 커패시턴스 12000pF이라고 되어 있네요. 시상수(time constant)를 계산해 보면, $$\begin{align}R{\cdot}C&=1\mathrm{k}{\times}12000\mathrm{p}\\&=12\mu(\mathrm{sec})
\end{align}$$

대세에 지장은 없겠네요.

 

MOSFET을 사용하면 외부 전원의 전압에 따라 버저에 가해지는 전압도 높일 수가 있습니다. 하지만, 위 2가지 경우 모두 저항을 사용합니다. 버저를 방전시키거나, 전류를 제한하거나 역할을 하지만 에너지를 소모합니다. 그 소모되는 에너지는 열로 사라집니다. 열이 필요한 경우도 있겠지만, 여기에서는 열은 하등 쓸모가 없습니다. 불필요한 에너지를 소모하는 것이지요. 그래서, 이렇게 버저 구동회로에 저항을 사용하는 것은 그렇게 추천할 만하지 않다고 하는군요. [1] 그렇제만, 절대 안 되는 것은 세상에 없습니다.

풀 브리지 회로(Full Bridge Circuit)

좀 복잡해 보이지만, 동작은 간단합니다. 

풀 브릿지(Full Bridge) 회로

피에조 버저를 구동하기 위한 풀 브리지 회로는 2개의 N-채널 MOSFET(Q7, Q8)과 2개의 P-채널 MOSFET(Q3, Q4)로 구성이 됩니다. 번갈아 켜지는 4개의 스위치라고 보면 되겠습니다. 이 풀 브리지 회로는 하나의 제어 신호와 이와는 완전히 반대 로직(logic)인 또 하나의 신호를 필요로 합니다. MOSFET 스위치 한 쌍이 완전히 번갈아 켜지고 꺼지기 때문입니다. Q5와 Q6는 하나의 디지털 입력을 논리적으로 반대의 신호로 만들어 주는 역할을 합니다. 논리식으로는 NOT인데, 인버터(inverter)라고 부르기도 하지요. Q5와 Q6의 드레인(drain) 출력은 게이트 입력과 완전히 반대의 로직이 됩니다.

쉽게 말해서 N-채널 MOSFET은 게이트 입력이 HIGH가 되면 On이 되고, P-채널 MOSFET은 게이트 입력이 LOW가 되면 On이 된다고 생각하면 됩니다. 

결론을 말하자면, 라즈베리 파이로부터의 GPIO 신호가 HIGH인 경우에는 Q3와 Q8이 On이 되고, LOW인 경우에는 Q4와 Q7이 On이 됩니다. 다시 말하면, GPIO 신호가 HIGH인 경우에는 $V_{BZ4, 1-2}=3.3V$, LOW인 경우에는 $V_{BZ4, 1-2}=-3.3V$가 됩니다. 똑같이 3.3V 단일 전원을 사용했지만, pk-pk 전압이 2배가 되는 효과가 있습니다. [1] 하지만, MOSFET이 상대적으로 많이 사용되었네요.

피에조 버저 구동을 위한 코드

구동 회로 하드웨어는 다르더라도 소프트웨어 코드는 동일합니다. GPIO의 상태를 HIGH-LOW를 바꿔 가며 버저의 떨림을 만드는 것이니까요. 다음 파이썬(Python) 코드처럼 해 봅시다.

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
p = GPIO.PWM(2, 1000)

p.start(50)
time.sleep(5)
p.stop()

라즈베리 파이의 GPIO2를 PWM 출력으로 설정한 뒤, 주파수 1㎑의 신호를 Duty 50%로 출력하도록 했습니다. 어느 구동회로든 하드웨어가 정확하게 만들어졌다면, 삐~ 하고 버저가 5초간 울릴 것입니다. 이 설정은 다시 말하면, GPIO2의 출력이 1초에 HIGH/LOW가 1000번이 바뀐다는 의미이고, 피에조가 1000번의 물리적 변화, 즉 떨림을 만들게 된다는 뜻입니다.

 

다음 줄을

p = GPIO.PWM(2, 1000)

다음과 같이 바꾸면

p = GPIO.PWM(2, 500)

소리가 낮아질 것입니다.

 

주파수에 따라 소리가 달라지는 것입니다. 피에조의 떨림의 횟수가 달라지니까요. 내친김에 다음 파이썬(Python) 코드처럼 해 보세요. 정말 막 짠 코드이긴 하지만 재미는 있을 것입니다. 

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

notes = (0, 2, 4, 5, 7, 9, 11)

GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
p = GPIO.PWM(2, 440)
isRunning = False
p.start(50)

for octave in range(3,6):
        for step in notes:
                p.ChangeFrequency( 440*(2**(octave-4))*2**((step-10)/12) )
                if not isRunning:
                        p.start(50)
                        isRunning = True
                time.sleep(1)

p.stop()

 

임베디드 시스템에서 크딩은 단순히 코딩으로 끝나지 않습니다. 하드웨어에 대한 이해가 뒷받침되어야 좋은 코드가 만들어질 수 있습니다. 프로그램만 짤 줄 아는 것이 임베디드 개발의 전부가 아닌 것이죠.

참고자료

[1] Buzzer Basics - Technologies, Tones, and Drive Circuits, https://www.cuidevices.com/blog/buzzer-basics-technologies-tones-and-driving-circuits

 

Buzzer Basics - Technologies, Tones, and Drive Circuits | CUI Devices

There are many choices for communicating information between a product and the user. One of the most common choices for audio communication is a buzzer. Understanding some of the technologies and configurations of buzzers is useful during the design proces

www.cuidevices.com

[2] 피에조 (Piezo), https://www.rohm.co.kr/electronics-basics/piezo/what1

728x90
반응형