Verilog_RTL 설계/SoC

[Project]Smart Mobility platform

juniha 2025. 8. 27. 14:47

Main Title  : Smart Mobility platform

Subtitle  
AXI-based Real - time Attitude Stabilization and Autonomous Obstacle Avoidance SoC Platform via 2D Distance Mapping


Development Environment & Tools

  • FPGA (Basys3): Xilinx Vivado
    • Block Design, IP Integration, Verilog Compilation
  • Embedded SW Development: Xilinx Vitis
    • Platform Creation, C Application
  • Simulation & Debugging:
    • Vivado Simulator, Logic Analyzer, UART Monitor (CoolTerm)
  • Python & Scripting: LUT Generation

 Programming Languages

  • Verilog HDL: Custom MyIP (FSM, Cartesian Transform, PWM, etc.)
  • C: I²C Control, AXI Register Access, LCD/OLED/UART Logic
  • Python: Sin/Cos LUT Auto-Generation Script

AXI4_Lite Interface

[그림 1] AXI Read & Write Channels

 

 

AXI4-Lite

  • For simple, low-throughput memory-mapped communication
    (Example: to and from control and status registers)

 

 

 

 

 

 

Transfer Timing Diagram

[그림 2] Transfer Timing Diagram

AXI4_Transactions

[그림 3] AXI Read Transactions
[그림 4] AXI Write Transactions
[그림 5] AXI4 Signals


 System Architecture

[그림 6]  System Architecture


PWM (DC 모터)

🔹Forward Mode

  • Start 버튼을 누르면 차량이 앞으로 이동합니다.
  • Stop 버튼을 누르면 정지합니다.
[영상 1] Forward Mode

🔹Turning Mode

  • Left / Right 버튼을 누르면 한쪽 바퀴가 회전하여 차량의 방향을 전환합니다.
[영상 2] Turning Mode

 

🔹Precise Angle Control

  • 모터의 회전 시간을 기준으로 PWM 듀티 비율을 세밀하게 조정합니다.
  • 일정하고 짧은 회전 시간 동안 동작하여 차량은 매번 약 10도씩 회전하며, 정확한 방향 제어가 가능합니다.
  • 10도씩 회전하는 이유는 초음파 센서동일한 각도로 움직이기 위해 10도씩 회전하도록 설정하였습니다.

PWM (Servo_Motor)

 

  • 원하는 각도는 스위치를 통해 선택되며, FND에는 현재 서보 각도가 10° 단위로 표시됩니다.
  • Enable 신호가 활성화되면 서보 모터는 10°씩 단계적으로 연속 회전합니다.

[그림 7 Servo_Motor ]

 

🔹Servo Motor 1

  • 회전 범위: 0° ~ 180°
  • 환경 스캐닝(거리 측정) 용도로 사용

🔹Servo Motor 2

  • 프로토타입 구조상 회전 범위가 **0° ~ 140°**로 제한됨
  • 초음파 센서와 결합되어 방향 제어 수행
  • 최종 각도는 MPU6050 자세 데이터에 따라 보정됨

🔹Auto-Leveling Behavior

  • 자이로스코프가 수평 상태를 감지하면, Servo 2는 자동으로 **70°**로 설정됨
  • 초음파 센서가 항상 수평 정렬 상태를 유지하도록 보장

Ultrasonic Sensor (HC-SR04)

 

  • 초기 상태에서는 현재 서보 모터의 각도가 FND에 표시됩니다.
  • 모드가 변경되면 FND에 초음파 센서로부터의 실시간 거리 값이 표시됩니다.
  • 리셋 후 서보 모터는 0° 초기 위치로 복귀합니다.

🔹Direction Selection Based on Distance Data

 

  • 19개 방향(10° 간격)에서 거리 데이터를 수집합니다.
  • 가장 먼 거리를 가진 방향을 식별합니다.
  • 초음파 센서는 자동으로 회전하여 가장 먼 방향을 향합니다.
[영상 3] Ultrasonic Sensor (HC-SR04)

 

 

Temperature and Humidity Sensor (DHT11)

 

  • DHT11 센서를 이용해 주변 온도를 측정하고, 이를 초음파 거리 보정에 적용하여 오차를 줄입니다.
  • 보정된 거리 값은 FND에 표시됩니다.

🔹Distance Adjustment Values per Temperature

[그림 7] Distance Adjustment Values per Temperature

🔹Equdation

[그림 8] Equation

 

[영상 4] Temperature and Humidity Sensor (DHT11)

I2C Communication Protocol

🔹I2C OLED Display

 

  • MPU6050 센서 데이터를 I2C를 통해 OLED에 표시
  • 자세(Attitude) 데이터를 실시간 OLED 화면으로 출력

 

[영상 5] I2C OLED Display

🔹UART Serial Output

 

  • MPU6050 센서 데이터를 UART로 출력
  • 자세(Attitude) 데이터를 UART 직렬 통신으로 전송
[영상 6] UART Serial Output

 

Python Script Automation

🔹Purpose

  • FPGA 메모리 IP에서 사용할 사인/코사인 값(.coe 파일) 을 자동 생성 

🔹Key Features

  • 0° ~ 180° 구간에서 10° 간격으로 총 19개 포인트 샘플링
  • sin(θ), cos(θ) 값을 Q1.15 형식(16비트 signed 정수) 으로 변환
  • Vivado Block Memory Generator에서 사용할 수 있는 .coe 파일 자동 생성
  • 생성 예시 파일: sin_lut.coe, cos_lut.coe

[그림 9] sin & cos Value Generator / .coe

 


Proto Type

[그림 10 ] Proto Type

🔹Specific

  • MPU6050 기반 자세 안정화
  • 0°~180° 스윕을 통한 장애물 거리 스캔
  • HC-SR04 & DHT11을 활용한 온도 보정 거리 측정
  • (각도, 거리) 데이터를 (X, Y) 좌표로 변환하여 2D 매핑
  • 자율 장애물 회피 기능 구현

 

 

Implemented Code

 

https://juniha.tistory.com/134

 

[Smart Mobility platform] Implemented Code

AXI_Sensor IP 1. 사용 코드 _ Ultrasonic_DHT11// ============================================================================// module: ultrasonic_correction_dht11// - 초음파(raw) + DHT11(온도) → 보정된 거리(dist_corr)// - 나눗셈을 순

juniha.tistory.com


Summary & Conclusion

구현 과정

Summary & Conclusion

[그림 11] Conclusion

[그림 12] I2C_LCD / OLED 출력