본문 바로가기
아날로그회로(Analog Circuit)/ADC관련

ZSSC3230 Sensor Signal Conditioner IC 보정 절차 및 Calibration Math 분석

by linuxgo 2025. 8. 15.
반응형

1. 보정 절차

ZSSC3230의 보정 절차는 PC를 통해 제어되는 캘리브레이션 프로세스를 통해 수행되며, 센서 신호의 오프셋, 감도, 온도 드리프트를 보상하기 위한 보정 계수를 비휘발성 메모리(NVM)에 프로그래밍하는 과정을 포함합니다. 아래는 보정 절차의 주요 단계입니다:

  1. 준비 단계
    •    ZSSC3230과 센서를 기본 응용 회로(예: Figure 1. Basic Application Diagram)에 따라 연결합니다.
    •    전원 공급(VDD: 1.68V ~ 3.6V)을 제공하고, I2C 인터페이스(SCL, SDA)를 통해 PC와 통신 연결을 설정합니다.
    •    센서 입력(C0, CC)을 적절히 구성하여 측정 범위(0 ~ 30pF) 내에서 작동하도록 준비합니다.
  2. 캘리브레이션 소프트웨어 실행
    •    Renesas에서 제공하는 calibration.dll 또는 호환 가능한 PC 소프트웨어를 사용하여 보정 프로세스를 시작합니다.
    •    소프트웨어는 I2C를 통해 ZSSC3230와 통신하며, 센서의 원시 데이터를 수집합니다.
  3. 데이터 수집 및 계수 계산
    •    다양한 온도(-40°C ~ 125°C)와 입력 조건에서 센서 데이터를 수집합니다.
    •    내부 DSP 코어가 오프셋, 감도, 온도 보정 계수(Tcg, Tco, Gain_S, Offset_S 등)를 계산합니다.
    •    (2-1/C) 전처리 옵션이 필요한 경우, NVM 레지스터 02HEX의 siginv 비트를 설정하여 활성화합니다.
  4. 보정 계수 프로그래밍
    •    계산된 보정 계수를 24비트(1비트 부호 + 23비트 절대값) 형식으로 NVM에 저장합니다.
    •    저장된 계수는 약 10,000회의 재프로그래밍과 최소 10년의 데이터 보존을 보장합니다.
    •    프로그램 후, NVM의 무결성을 확인하기 위해 읽기 테스트를 수행합니다.
  5. 검증 및 최종 설정
    •    보정 후 센서 출력(I2C 또는 PDM)을 확인하여 오차가 사양 내에 있는지 검증합니다.
    •    필요 시 측정 속도(2ms at 14-bit)와 해상도(최대 18-bit)를 조정하여 최적화합니다.
    •    외부 리셋 핀(RESQ)을 통해 초기화 후 정상 작동 여부를 테스트합니다.

이 절차는 ZSSC3230의 고속 제어, 안전, 실시간 감지 애플리케이션에 필요한 높은 정밀도를 보장하며, 에너지 효율성을 유지합니다.

2. Calibration Math 개요

ZSSC3230은 외부 커패시티브 센서 신호와 내부 온도 센서 신호를 디지털로 변환한 후, 오프셋, 감도, 온도 드리프트를 보상하여 정확한 출력을 제공합니다. Calibration Math는 이러한 보정을 수행하기 위해 내부적으로 26비트 2의 보수 정수 표현을 사용하며, 비휘발성 메모리(NVM)에 저장된 보정 계수를 활용합니다. 주요 특징은 다음과 같습니다:

  •    26비트 2의 보수 정수 연산: 내부 데이터 처리는 26비트 2의 보수 형식을 사용.
  •    계수 저장 형식: NVM에는 24비트(1비트 부호 + 23비트 절대값)로 저장되며, 계산 시 26비트로 확장.
  •    오버플로우/언더플로우 처리: 내부적으로 오버플로우와 언더플로우를 감지하며, 결과가 범위를 벗어나면 자동으로 포화    (saturation) 처리되고 상태 비트로 보고.
  •    선택적 전처리 옵션: (2-1/C) 전처리를 통해 커패시티브 압력 센서의 비선형 특성을 보정 가능.

3. (2-1/C) 전처리 (6.5.1절)

(2-1/C) 전처리는 주로 커패시티브 압력 센서의 전이 특성을 2차 보정에 맞게 선형화하기 위해 사용됩니다. 이 기능은 Normal Measurement Mode에서만 적용되며, Raw Measurement(명령 모드)에서는 사용되지 않습니다.

주요 특징

  •    목적: 커패시티브 압력 센서의 비선형 전이 특성을 선형화하여 2차 보정의 정확성을 높임.
  •    활성화 방법: NVM 레지스터 02HEX의 siginv 비트(비트 11)를 "1"로 설정하여 활성화.
  •    전처리 로직:

    ADC에서 얻은 원시 신호(\(S_{raw}\))를 반전(inversion) 후 1/C 연산을 적용.

    \( S_{rawi} = \left[ 2^{24} - \frac{2^{46}}{S_{raw}} \right] \cdot \frac{2^{25} - 1}{2^{25}} \)

    이 공식은 ADC 값(\(S_{raw}\))을 반전하고 1/C 연산을 수행하여 새로운 값(\(S_{rawi}\))을 생성.
  • 주의사항:
    •    Crange/CSens 반전을 사용할 경우, shift_cap(오프셋 보정 커패시턴스)은 0으로 설정해야 함.
    •    이 전처리는 calibration.dll에서 처리되며, 사용자는 별도로 계산할 필요 없음.

적용 사례

커패시티브 압력 센서의 경우, 전형적인 비선형 전이 특성을 선형화하여 후속 보정의 정확성을 높이는 데 유용. 예: 압력 센서의 출력이 비선형적으로 변할 때, (2-1/C) 전처리를 통해 2차 보정에 적합한 데이터로 변환.

4. 센서 신호 보정 수학 (6.5.2절)

센서 신호 보정은 외부 커패시티브 센서의 원시 데이터(\(S_{raw}\))와 온도 데이터(\(T_{raw}\))를 사용하여 선형화 및 온도 보상을 수행합니다. 보정은 1차 및 2차 보정 항을 포함하며, 보정 계수는 NVM에 저장됩니다. 보정 방식은 SOT_curve 설정(레지스터 02HEX의 비트 15)에 따라 파라볼릭(Parabolic) 또는 S자형(S-shaped)으로 나뉩니다.

4.1 파라볼릭 보정 (SOT_curve = 0)

파라볼릭 보정은 일반적으로 권장되며, 다음과 같은 공식을 사용합니다:

  1. K1 계산 (온도 보정된 게인)

    \( K1 = 2^{23} + \frac{T_{Raw}}{2^{23}} \cdot \left( \frac{4 \cdot SOT_{tcg}}{2^{23}} \cdot T_{Raw} + 4 \cdot Tcg \right) \)

    •    \(SOT_{tcg}\): 게인의 2차 온도 보정 계수.
    •    \(Tcg\): 게인의 1차 온도 보정 계수.
    •    \(T_{Raw}\): 원시 온도 데이터.
  2. K2 계산 (온도 보정된 오프셋)

    \( K2 = 4 \cdot Offset_S + S_{Raw} + \frac{T_{Raw}}{2^{23}} \cdot \left( \frac{4 \cdot SOT_{tco}}{2^{23}} \cdot T_{Raw} + 4 \cdot Tco \right) \)

    •    \(Offset_S\): 센서 오프셋 보정 계수.
    •    \(SOT_{tco}\): 오프셋의 2차 온도 보정 계수.
    •    \(Tco\): 오프셋의 1차 온도 보정 계수.
    •    \(S_{Raw}\): 원시 센서 데이터.
  3. ZSP 계산 (중간 보정 값)

    \( ZSP = \frac{4 \cdot Gain_S}{2^{23}} \cdot \frac{K1}{2^{23}} \cdot K2 + 2^{23} \)

    •    \(Gain_S\): 센서 게인 보정 계수.
    •    결과는 양수 범위로 제한됨.
  4. 최종 출력 S 계산

    \( S = \frac{ZSP}{2^{23}} \cdot \left( \frac{4 \cdot SOT_{sensor}}{2^{23}} \cdot ZSP + 2^{23} \right) + Sensor_Shift \)

    •    \(SOT_{sensor}\): 센서 비선형성을 위한 2차 보정 계수.
    •    \(Sensor_Shift\): 후 보정 오프셋 조정 계수.
    •    결과는 양수 범위로 제한됨.

4.2 S자형 보정 (SOT_curve = 1)

S자형 보정은 비선형성이 S자 형태일 때 사용되며, 다음과 같은 공식을 사용합니다:

  1. ZSS 계산

    \( ZSS = \frac{4 \cdot Gain_S}{2^{23}} \cdot \frac{K1}{2^{23}} \cdot K2 \)

  2. 최종 출력 S 계산

    \( S = \frac{ZSS}{2^{23}} \cdot \left( \frac{4 \cdot SOT_{sensor}}{2^{23}} \cdot |ZSS| + 2^{23} \right) + 2^{23} + Sensor_Shift \)

    •    절대값(\(|ZSS|\))을 사용하여 S자형 곡선을 처리.
    •    결과는 양수 범위로 제한됨.

4.3 변수 및 범위

  • S: I2C를 통해 출력되는 보정된 센서 값 (범위: 0 ~ FFFFFFHEX).
  • S_Raw: ADC에서 얻은 원시 센서 데이터 (범위: -7FFFFFHEX ~ 7FFFFFHEX).
  • T_Raw: 원시 온도 데이터 (범위: -7FFFFFHEX ~ 7FFFFFHEX).
  • Gain_S, Offset_S, Tcg, Tco, SOT_tcg, SOT_tco, SOT_sensor, Sensor_Shift: 모두 24비트 부호-절대값 형식으로 저장되며, 계산 시 26비트로 확장.

4.4 특징

  • 파라볼릭 vs S자형: 파라볼릭 보정이 기본적으로 권장되며, S자형은 특정 비선형 특성에 적합.
  • 계수 저장: Table 7에 명시된 바와 같이, 계수는 1비트 부호 + 23비트 절대값 형식으로 NVM에 저장.
  • 오버플로우 처리: 계산 중 오버플로우/언더플로우 발생 시 상태 비트로 보고되며, 결과는 포화 처리.

5. 온도 신호 보정 (6.5.3절)

온도 신호 보정은 내부 PTAT(Proportional to Absolute Temperature) 기반 온도 센서의 데이터를 보정하여 정확한 온도 값을 제공합니다. 온도 보정은 항상 파라볼릭 형태로 수행됩니다.

공식

  1. ZT 계산 (중간 보정 값)

    \( ZT = \frac{4 \cdot Gain_T}{2^{23}} \cdot (T_{Raw} + 4 \cdot Offset_T) + 2^{23} \)

    •    \(Gain_T\): 온도 게인 보정 계수.
    •    \(Offset_T\): 온도 오프셋 보정 계수.
    •    \(T_{Raw}\): 원시 온도 데이터.
  2. 최종 출력 T 계산

    \( T = \frac{ZT}{2^{23}} \cdot \left( \frac{4 \cdot SOT_T}{2^{23}} \cdot ZT + 2^{23} \right) + T_Shift \)

    •    \(SOT_T\): 온도 비선형성을 위한 2차 보정 계수.
    •    \(T_Shift\): 후 보정 오프셋 조정 계수.

변수 및 범위

  •    T: I2C를 통해 출력되는 보정된 온도 값 (범위: 0 ~ FFFFFFHEX).
  •    Gain_T, Offset_T, SOT_T, T_Shift: 24비트 부호-절대값 형식으로 NVM에 저장.

특징

  •    온도 보정은 항상 14비트 해상도로 수행.
  •    1차(선형) 및 2차(비선형) 보정을 포함하여 온도 센서의 비선형성을 보정.
  •    결과는 양수 범위로 제한되며, 오버플로우/언더플로우는 상태 비트로 보고.

6. 파이썬을 사용한 보정 계수 추출 원리 설명

아래는 7개의 원시 데이터 포인트를 사용한 파라볼릭 보정 공식의 보정 계수(Gain_S, Offset_S, Tcg, Tco, Gain_T, Offset_T) 추출 원리를 설명하는 예제 코드입니다. 이 코드는 최적화 알고리즘을 통해 원시 데이터(S_raw, T_raw)와 보정된 출력(S, T) 간의 오류를 최소화하는 방식을 보여줍니다. 실제 보정 작업은 Renesas에서 제공하는 calibration.dll을 사용하는 것이 권장되며, 이는 데이터시트(예: Figure 1. Basic Application Diagram)에서 설명된 PC-controlled calibration procedure를 지원합니다. 파이썬으로 보정 계수를 구하려면 Renesas 보정 툴과 상호 교차 검증을 통해 결과의 정확성을 보장해야 합니다.

import numpy as np
from scipy.optimize import minimize

# 원시 데이터 (S_raw, T_raw) - 7 포인트 (예시 데이터)
data_points = [
    (-500000, -400000),
    (-300000, -200000),
    (-100000, 0),
    (0, 200000),
    (100000, 400000),
    (300000, 600000),
    (500000, 800000)
]

# 보정된 출력 S와 T (예시로 가정한 값, 실제 측정값으로 대체 필요)
calibrated_S = [1000000, 1200000, 1400000, 1600000, 1800000, 2000000, 2200000]
calibrated_T = [500000, 600000, 700000, 800000, 900000, 1000000, 1100000]

# 2^23 (파라볼릭 보정 공식에서 사용되는 상수)
TWO_POW_23 = 2**23

# 보정 계수 계산 함수
def calculate_calibrated_s(s_raw, t_raw, gain_s, offset_s, tcg, tco):
    k1 = TWO_POW_23 + (t_raw / TWO_POW_23) * (4 * tcg)
    k2 = 4 * offset_s + s_raw + (t_raw / TWO_POW_23) * (4 * tco)
    zsp = (4 * gain_s / TWO_POW_23) * (k1 / TWO_POW_23) * k2 + TWO_POW_23
    s = (zsp / TWO_POW_23) * (TWO_POW_23)  # 단순화된 예시
    return max(0, min(2**24 - 1, s))

def calculate_calibrated_t(t_raw, gain_t, offset_t):
    zt = (4 * gain_t / TWO_POW_23) * (t_raw + 4 * offset_t) + TWO_POW_23
    t = (zt / TWO_POW_23) * (TWO_POW_23)  # 단순화된 예시
    return max(0, min(2**24 - 1, t))

# 비용 함수 (S와 T에 대한 합산 오류 최소화)
def cost_function(params, s_raw_list, t_raw_list, target_s, target_t):
    gain_s, offset_s, tcg, tco, gain_t, offset_t = params
    predicted_s = [calculate_calibrated_s(s_raw, t_raw, gain_s, offset_s, tcg, tco) for s_raw, t_raw in zip(s_raw_list, t_raw_list)]
    predicted_t = [calculate_calibrated_t(t_raw, gain_t, offset_t) for t_raw in t_raw_list]
    return np.sum((np.array(predicted_s) - np.array(target_s)) ** 2) + np.sum((np.array(predicted_t) - np.array(target_t)) ** 2)

# 초기 보정 계수 추정
initial_params = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]  # [gain_s, offset_s, tcg, tco, gain_t, offset_t]

# 최적화 (예시로만 실행)
result = minimize(
    cost_function,
    initial_params,
    args=(np.array([x[0] for x in data_points]), np.array([x[1] for x in data_points]), calibrated_S, calibrated_T),
    method='Nelder-Mead'
)

# 결과 출력 (실제 최적화는 예시용)
optimal_gain_s, optimal_offset_s, optimal_tcg, optimal_tco, optimal_gain_t, optimal_offset_t = result.x
print(f"Example Gain_S: {optimal_gain_s}")
print(f"Example Offset_S: {optimal_offset_s}")
print(f"Example Tcg: {optimal_tcg}")
print(f"Example Tco: {optimal_tco}")
print(f"Example Gain_T: {optimal_gain_t}")
print(f"Example Offset_T: {optimal_offset_t}")

위 코드는 보정 계수 추출의 기본 원리를 보여주며, SciPy의 minimize 함수를 사용하여 오류를 최소화하는 방법을 설명했습니다. 그러나 정확한 보정을 위해 Renesas에서 제공하는 calibration.dll을 사용하는 것이 권장합니다. 이 DLL은 데이터시트(예: Page 1, Features 섹션)에 설명된 PC-controlled calibration procedure를 지원하며, 센서 특성에 맞는 최적의 계수를 계산합니다. 파이썬으로 보정 계수를 구하려면 Renesas 보정 툴과 상호 교차 검증을 통해 결과의 신뢰성을 확인해야 하며, 이는 데이터 불일치나 오차를 방지하는 데 필수적입니다.

반응형