본문 바로가기
임베디드 프로젝트/디바이스 구현

Embedded PLC 보드 브링업 (Bring Up)

by MachineJW 2025. 3. 14.

1. JLCPCB 주문 보드 도착

보드를 수령하고 지하철에서 촬영했다. (약 14일 만에 배송완료)
  • 보드 납땜 상태는 매우 괜찮았다. 설계한 대로 SMT 공정이 잘 적용된 것 같다.
  • 14일 만에 보드가 도착했는데 배송은 UPS에서 담당했다. 환율이 올라서 세금도 더 올라간듯 하다. (약 8만원의 세금이 부과됨)
  • 급하게 뜯느라 사진은 찍지 못하였는데 포장 상태도 매우 잘 된 편이다.

2. 케이스 조립

  • 혹시 나 규격이 맞지 않을지 걱정했지만, 조립 나사 홀 규격에 맞게 잘 적용이 되었다. (자로 열심히 노가다 한 보람이 있다. ㅎㅎ)
  • OLED 0.96인치 디스플레이도 장착에 문제가 없었다.
  • 상부 케이스와 결합 또한 문제가 없었다.
  • 사진은 최종적으로 조립한 모습이다.
  • 보드 SMT는 샘플로 2장만 적용하였고 나머지 3장은 PCB만 제작하였다. (오른쪽 사진은 PCB의 모습과 같이 촬영)

3. 보드 브링업 (Bring Up)

  • 최초 전원 인가 이후 보드에 타는 냄새가 나서 급하게 확인해 보았다. (맞아 본 사람만 아는 그 냄새...)
  • 알고 보니 12V TVS 다이오드 출력 부분에서 24V가 출력 되고 있었다. (브레이크 전압 특성으로 과전류가 흘러 심한 발열 발생)
  • 그래서 바로 수납땜으로 12V TVS 다이오드를 제거하고 쇼트 불량을 확인하였다.
  • 쇼트에 문제가 없음을 테스터기로 확인하고 I2C Adress 인식하는 코드를 작성하고 USB를 통해 빌드 하였다.
#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin();  // 기본적으로 ESP32는 (GPIO 21: SDA, GPIO 22: SCL) 사용

  Serial.println("I2C 스캐닝 시작...");
}

void loop() {
  byte error, address;
  int nDevices = 0;

  Serial.println("Scanning...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C 장치 발견: 0x");
      Serial.println(address, HEX);
      nDevices++;
    }
  }

  if (nDevices == 0) {
    Serial.println("I2C 장치 없음");
  } else {
    Serial.println("I2C 스캔 완료");
  }

  delay(5000);  // 5초마다 다시 확인
}
  • 이미지는 첨부가 되어있지 않지만, 설계한대로 I2C 주소를 성공적으로 인식하였다.
  • 이후 기본적인 동작 테스트를 위해, 미리 준비해둔 펌웨어를 빌드하였다.
USB 펌웨어 빌드 이후
  • 간단하게 디스플레이에 장치명을 띄어보았다.

4. 보드 테스트

  • WiFi 통신 접속에 이상은 없었다.
  • 입/출력과 센서 인터페이스도 이상 없었다.
  • 표시 LED도 잘 제어 된다.
  • 현재기준으로 HMI 장치에 232 통신을 사용하여 송신하는 펌웨어 까지 구현 해보았다.