Arduino BOB를 사용하여 신속하게 센서 및 주변 장치 평가

작성자: Clive "Max" Maxfield

DigiKey 북미 편집자 제공

사물 인터넷(IoT)의 부상은 주요 사물을 연결하려는 많은 혁신적인 신생 기업에 영감을 주었습니다. 하지만 대부분의 신생 기업은 소규모 설계 팀으로 이루어져 있으며 출시 시간을 단축해야 하는 제약 조건이 있습니다. 따라서 아날로그, 디지털, 무선 주파수(RF), 무선/유선 네트워킹을 비롯한 다양한 엔지니어링 영역과 작업 전반에서 개별 디자이너들이 늘어나고 있습니다. 디자이너는 자연스럽게 IC, 센서, 주변 장치의 평가를 가속화하고 평가 비용을 절감할 수 있는 방법을 지속적으로 모색합니다.

한 가지 옵션은 솔루션을 지원하기 위해 IC 벤더가 제공하는 평가 및 개발 키트를 사용하는 것입니다. 충분한 지원이 있을 경우 이는 완벽한 접근 방식입니다. 다른 옵션은 Arduino 에코시스템을 살펴보는 것입니다. Arduino는 애호가들만 찾던 시스템에서 정식 설계 및 지원 에코시스템으로 진화했습니다.

이 기사에서는 설계자가 Arduino를 통해 센서 및 주변 장치 브레이크아웃 기판(BOB) 형태의 오픈 소스 하드웨어를 라이브러리 및 예제 프로그램 형태의 오픈 소스 소프트웨어와 함께 사용하여 설계 주기 초기에 IC, 주변 장치, 센서 평가를 시작할 수 있는 방법을 보여줍니다. 예를 들어 Maxim Integrated의 실시간 클록(RTC)과 Adafruit Industries의 BOB를 사용합니다.

IoT의 부상

최초의 IoT 사례 중 하나는 1980년대 초 Carnegie Mellon University에서 코카콜라 판매기를 유선으로 연결하여 프로그래머들이 실제 판매기로 가기 전에 인터넷을 통해 음료가 이용 가능하고 시원한지 여부를 확인할 수 있도록 한 것에서 시작되었습니다. IoT 개념이 공식적으로 명명된 것은 1999년입니다.

IoT가 실제로 등장한 정확한 시점에는 논쟁이 있습니다. 아시다시피 IoT의 탄생을 나타내는 가장 적절한 정의는 “많은 “사물” 또는 “물체”가 사람이 아닌 인터넷에 연결된 시점”입니다. 이에 근거하면 IoT는 2008년에서 2009년 사이에 탄생한 것으로 예상되며 사물/사람 비율이 2003년 0.08에서 2010년에는 1.84로 증가했습니다.

Arduino의 부상

IoT의 태생은 2000년대 초 제조업체의 움직임 증가와 일치합니다. Arduino가 세계 최초로 배포된 것은 2005년이었습니다. 이 해는 Make 매거진이 런칭된 연도이자 제1회 Maker Faire가 열리기 한 해 전입니다.

Arduino가 도입된 이래로 오픈 소스 소프트웨어 및 하드웨어 에코시스템이 정교하게 진화했습니다. 체계적으로 지원되는 Arduino 에코시스템을 전문 설계자 영역에 도입하여 설계자의 업무를 간소화하고 출시 시간을 단축해야 했습니다.

실제로 유기적으로 솔루션이 만들어졌습니다. Arduino를 중심으로 성장한 거대한 에코시스템으로 인해 예상치 못한 부작용이 발생했습니다. 즉, 전문 설계자들이 센서와 주변 장치를 설계에 적용하기 전에 Arduino를 사용하여 평가한다는 점입니다. 현재 RTC를 비롯하여 이와 관련한 많은 사례가 있습니다.

RTC를 통한 주변 장치 평가 예

거의 모든 최신 32비트 마이크로 컨트롤러에는 RTC가 내장되어 있으며, 많은 16비트 및 8비트 마이크로 컨트롤러에도 RTC가 내장되어 있습니다. 이로 인해 기판 공간이 축소되고, 부품 명세서(BOM)가 간소화되고, 최종 제품 비용이 절감되지만, 내부 RTC를 사용할 경우 단점이 있습니다.

한 가지 단점은 마이크로 컨트롤러에서 소프트웨어의 제어에 따라 내부 RTC를 활성화 또는 비활성화해야 하므로 전력 결함이 발생하여 마이크로 컨트롤러가 잠기거나 코드가 실행 중인 동안 RTC가 비활성화될 수 있습니다. 그에 비해 외장형 RTC는 별도의 전력 레일과 수정을 포함하므로 더 강력하고 마이크로 컨트롤러에서 실행 중인 코드로 인해 꺼질 가능성이 낮습니다. 또한 외장형 RTC는 일반적으로 마이크로 컨트롤러보다 더 큰 칩 제조 공정 노드를 사용하여 구현되며, 더 큰 실리콘 실장 면적으로 인해 방사선(예: 우주 방사선)에 의해 발생하는 SEU(Single Event Upset)와 같은 비트 플립의 영향을 덜 받게 됩니다.

RTC IC 예: Maxim Integrated DS1307 및 DS3231

널리 사용되는 RTC IC에는 Maxim Integrated의 DS1307DS3231의 두 가지가 있습니다. 두 장치는 모두 초, 분, 시, 일, 날짜, 월 및 연도 정보를 추적하고, 31일보다 짧은 월을 자동으로 조정하고, 윤년을 고려하고, 24시간 또는 12시간 모드를 지원합니다. 또한 두 장치는 직렬 I2C 버스를 통해 호스트 마이크로 컨트롤러와 통신하고, 전력 결함이 감지되면 자동으로 백업 공급 장치(일반적으로 배터리)로 전환합니다. 따라서 시간 유지 작업이 유지될 수 있습니다(그림 1).

Maxim의 DS1307 외장형 RTC 구성도그림 1: DS1307은 외장형 RTC의 좋은 예입니다. 두 장치는 자체 로컬 수정 및 전력 레일을 활용하며, 코드 오류가 발생하지 않습니다. 또한 I2C 인터페이스를 통해 호스트 마이크로 컨트롤러와 통신합니다. (이미지 출처: Maxim Integrated)

두 장치의 차이점은 규격서를 확인하십시오. 예를 들어 DS1307은 5V 전력 공급과 외부 수정이 필요합니다. 그에 비해 더 정밀한 DS3231은 2.3V ~ 5.5V 전력으로 작동할 수 있으며, 온도 보정형 수정 발진기(TCXO)와 수정이 내장되어 있습니다.

두 부품의 차이가 즉시 드러나지 않는 경우도 있습니다. 예를 들어 두 장치 모두 방형파(SQW) 출력을 제공하므로, 소프트웨어 제어를 통해 활성화할 경우 외부 풀업 저항기가 필요합니다. 하지만 DS1307의 경우 1Hz, 4.096kHz, 8.192kHz 또는 32.768kHz 신호를 생성하도록 SQW 출력을 프로그래밍할 수 있습니다. 그에 비해 DS3231의 경우 1Hz, 1,024kHz, 4.096kHz 또는 8.192kHz 신호를 생성하도록 이 출력을 프로그래밍할 수 있습니다.

DS1307의 경우 클록의 정확도는 수정의 정확도와 발진기 회로의 정전 용량 부하와 수정이 트리밍된 정전 용량 부하 사이의 일치 정확도에 따라 달라집니다. 그에 비해 온도 보정형 DS3231의 경우 정확도 수치가 -40°C ~ +85°C에서 연간 ±2분 이내로 더 구체적으로 지정됩니다(그림 2).

Maxim의 DS3231 온도 보정형 수정 발진기 구성도그림 2: DS3231은 -40°C ~ +85°C 온도 범위에서 정확도가 연간 ±2분인 온도 보정형 수정 발진기입니다. (이미지 출처: Maxim Integrated)

따라서 두 장치의 규격서 간에 "방해 요소"가 없다고 가정할 때 설계자는 실제로 두 장치를 어떻게 평가할까요? 한 가지 솔루션은 맞춤형 브레이크아웃 기판(BOB)을 설계하여 구축하고, 처음부터 구동할 코드를 개발하는 것입니다. 더 빠르고 더 비용 효율적인 솔루션은 Arduino 하드웨어 및 소프트웨어 에코시스템의 일부로 개발된 기성 BOB 및 코드를 사용하는 것입니다.

RTC BOB 예: Adafruit DS1307 및 ChronoDot

DS1307 및 DS3231 IC에 널리 사용되는 BOB에는 Adafruit 3296 DS1307 실시간 클록 BOB(그림 3)와 255 ChronoDot 초정밀 실시간 클록 V2.1 BOB(그림 4)의 두 가지가 있습니다.

Adafruit의 DS1307 RTC BOB 이미지그림 3: Adafruit DS1307 RTC BOB (이미지 출처: Adafruit Industries)

ChronoDot의 초정밀 실시간 클록 v2.1 BOB 이미지그림 4: ChronoDot의 초정밀 실시간 클록 v2.1 BOB (이미지 출처: Adafruit Industries)

예를 들어 적절한 마이크로 컨트롤러 개발 기판(예: Arduino Uno R3)과 인터넷을 통해 다운로드할 수 있는 오픈 소스 라이브러리 및 예제 코드를 함께 결합할 경우 내장형 시스템 및 IoT 전문 설계자가 즉시 실행할 수 있습니다.

설계자는 평가를 완료한 후 BOB를 위한 오픈 소스 하드웨어 설계 중 적절한 부분을 가져와서 자체 설계에 직접 통합할 수 있습니다. 마찬가지로 오픈 소스 라이브러리와 오픈 소스 예제를 기반으로 개발한 코드를 제품의 일부로 사용할 수 있습니다.

소프트웨어 개발자를 위한 유용한 하드웨어 정보

앞서 언급한 대로 DS1307 및 DS3231 RTC는 모두 직렬 I2C 버스를 통해 호스트 마이크로 컨트롤러와 통신합니다. 소프트웨어 개발자를 힘들게 하는 "문제" 중 하나는 이 버스를 형성하는 두 신호(SCL 및 SDA)에 풀업 저항기가 필요하다는 것입니다.

ChronoDot에는 추가할 수 있는 R1 및 R2 주석이 붙은 패드가 있지만, Adafruit의 DS1307 및 DS3231(ChronoDot) BOB에는 이러한 저항기가 포함되어 있지 않습니다.

풀업 저항기가 포함되어 있지 않은 이유는 I2C 버스에 여러 장치(IC 또는 BOB)를 연결할 수 있기 때문입니다. I2C 버스는 7비트 주소(27 = 128)를 사용합니다. 하지만 주소 0000000은 버스에서 모든 장치의 주소를 지정하는 데 사용되는 일반 호출 주소입니다. 따라서 이론적으로 버스에서는 이 주소를 제외한 127개의 개별 장치를 지원할 수 있습니다. 지원될 수 있는 실제 장치 수는 총 400pF로 제한되는 버스의 정전 용량(추적 정전 용량과 부하 정전 용량 포함)에 따라 달라집니다.

하드웨어 설계자가 병렬로 연결되는 여러 저항기의 등량 가치를 계산하는 데 사용되는 수식이 있습니다. 이 논의의 목적에 따라 다음의 간단한 예를 생각해 볼 수 있습니다. 두 장치의 풀업 저항기 값이 같은 경우 결과 저항은 값의 1/2이고, 네 장치의 풀업 저항기 값이 같은 경우 결과 저항은 값의 1/4입니다.

버스에 풀업 저항기가 내장된 I2C 장치가 이미 있는 경우 추가 조치가 필요하지 않습니다. 풀업 저항기가 없고 설계자가 향후에 기판 실장 풀업 저항기를 포함하는 BOB를 추가할 가능성이 없는 경우 4.7kΩ 저항기 쌍을 풀업용으로 사용하는 것이 좋습니다. 하지만 나중에 풀업 저항기를 포함하는 BOB를 추가할 가능성이 있는 경우 다른 BOB를 버스에 추가하기 전후에 두 BOB가 모두 작동하므로 여기서는 10kΩ 저항기 쌍을 추가해야 합니다.

하드웨어 설계자를 위한 유용한 소프트웨어 정보

"유선 라이브러리"는 I2C 장치와의 2선식 클래스 통신을 용이하게 해주는 통신 라이브러리입니다. Arduino의 경우 통합 개발 환경(IDE)의 일부로 이 라이브러리를 제공하므로 설계자는 프로그램의 시작 부분에 #include <Wire.h> 문을 추가하기만 하면 됩니다.

실제로 적합한 RTC 라이브러리를 추적합니다. 유용한 라이브러리로는 Github에서 다운로드할 수 있는 Adafruit의 RTClib이 있습니다. 그런 다음 프로그램의 시작 부분에 #include "RTClib.h" 문을 추가합니다.

일반적으로 상수 값이 정의된 후 사용 중인 BOB에 따라 RTC_ DS1307 RTC; 또는 RTC_DS3231 RTC; 문을 사용하여 RTC를 인스턴스화합니다(인스턴스 생성).

프로그램에서 모든 설정을 마친 후(Arduino 스케치의 경우 setup() 함수의 일부로 사용) 설계자는 Wire.begin(); 및 RTC.begin(); 문을 추가하여 I2C 통신 및 RTC 서브 시스템을 인스턴스화해야 합니다.

앞서 언급한 Github 페이지에 제공된 예에서는 현재 날짜와 시간을 빠르게 액세스하여 조정하는 방법을 보여줍니다. 방형파(SQW) 출력에 액세스하는 방법은 자세히 나와 있지 않습니다. 기본적으로 이 출력은 전력 절감을 위해 비활성화되어 있습니다. 예를 들어 이 핀을 사용하려면 핀을 활성화하고 1Hz에서 실행하도록 설정한 후 이 신호를 사용하여 호스트 마이크로 컨트롤러에서 인터럽트를 트리거할 수 있습니다.

소프트웨어 개발자가 라이브러리 코드에서 이러한 모든 사항을 추적하는 데 어려움이 없지만, 하드웨어 설계 엔지니어의 경우 이 코드를 처리하기 힘들 수 있으므로 간략히 요약하면 다음과 같습니다.

DS1307의 경우 RTC.Ds1307SqwPinMode(<option>); 형식의 문을 하나 이상 추가하면 됩니다. 여기서 지원되는 옵션 값은 ON, OFF, SquareWave1HZ, SquareWave4kHz, SquareWave8kHzSquareWave32kHz입니다.

마찬가지로 DS3231의 경우 RTC.Ds3231SqwPinMode(<option>); 형식의 문을 하나 이상 추가합니다. 여기서 지원되는 옵션 값은 ON, OFF, DS3231_SquareWave1Hz, DS3231_SquareWave1kHz, DS3231_SquareWave4kHzDS3231_SquareWave8kHz입니다.

결론

소규모 팀과 출시 시간 제약이 있는 설계자는 여러 엔지니어링 영역 및 작업을 수용하고 IC, 센서, 주변 장치 평가를 가속화하고 평가 비용을 절감할 수 있는 방법을 지속적으로 모색해야 합니다. 제시된 것처럼 한 가지 방법은 센서 및 주변 장치 브레이크아웃 기판(BOB) 형태의 오픈 소스 하드웨어와 라이브러리 및 예제 프로그램 형태의 오픈 소스 소프트웨어와 함께 Arduino를 사용하는 것입니다.

DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

작성자 정보

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield는 1980년 영국 Sheffield Hallam University에서 제어 공학 학사 학위를 받았으며 이후 중앙 컴퓨터용 중앙 처리 장치(CPU) 설계자로 일하기 시작했습니다. 수년에 걸쳐 Max는 실리콘 칩에서 회로 기판, 뇌파 증폭기에서 스팀펑크 예언 엔진(steampunk Prognostication Engines)에 이르는 다양한 제품을 설계했습니다. 또한 30년 이상 전자 설계 자동화(EDA) 부문을 이끌어 왔습니다.

Max는 Designus Maximus Unleashed(앨라배마에서는 금서임), Bebop to the Boolean Boogie(전자 제품 관련 색다른 안내서), EDA: Where Electronics Begins, FPGA: Instant Access 및 How Computers Do Math 등 다양한 도서의 저자/공동저자입니다. Max가 운영 중인 “Max’s Cool Beans” 블로그에 방문해 보세요.

게시자 정보

DigiKey 북미 편집자