이번 포스트에서는 STM32 자체 ADC 에러들을 AN2834를 번역하여 살펴 보도록 하겠습니다. 몇몇의 Error 들은 어플리케이션이 안고 가야하며 몇몇의 Error들은 교정을 통해 정확도를 높일 수 있습니다. 아무튼 에러에 대해 알아야 나중에 당황하지 않고 개발을 할 수 있습니다.
ADC errors
이 섹션에는 ADC 정확도에 영향을 미치는 주요 오류가 나열되어 있습니다. 설명된오류는 모든 ADC 발생하며 변환 품질은 오류 제거에 따라 달라집니다. 이러한 오류 값은 STM32 MCU 데이터시트의 ADC 특성 섹션에 표시되어 있습니다.
STM32 ADC에는 다양한 정확도 오류 유형이 있습니다. 참조하기 쉽도록 정확도 오류는 1 LSB의 배수로 표시됩니다. 전압 단위의 분해능(Resolution)은 기준 전압에 따라 달라집니다. 전압 측면에서 볼 때 오차는 LSB 수에 1 LSB에 해당하는 전압을 곱하여 계산됩니다.
Offset error
오프셋 오류는 첫 번째 실제(Actual) 전환과 첫 번째 이상적인(Ideal) 전환 간의 편차입니다. 첫 번째 전환은 디지털 ADC 출력이 0에서 1로 변경될 때 발생합니다. 원래 이상적으로는 아날로그 입력 범위가 0.5 LSB에서 1.5 LSB 사이인 경우 디지털 출력은 1이어야 합니다(이상적으로는 첫 번째 전환이 0.5 LSB에서 발생해야 함) 오프셋 오류는 EO로 표시되며 애플리케이션 펌웨어로 쉽게 보정할 수 있습니다.
Example
STM32 ADC(12bit)의 경우 감지 가능한 가장 작은 전압 증분 변화는 LSB로 표현됩니다.
VREF+ = 3.3V인 경우 402.8μV(0.5LSB = 0.5 × 805.6μV)의 입력은 이상적으로 1의 디지털 출력을 생성해야 합니다. 그러나 실제로 ADC는 여전히 0의 판독값을 제공할 수도 있습니다. 550 µV의 아날로그 입력에서 1의 디지털 출력을 얻으면,
0.5LSB보다 큰 아날로그 입력 전압이 첫 번째 전이를 생성하는 경우 오프셋 오류는 양수입니다(양수 오프셋 오류의 예는 그림 7 참조).
0.5 LSB 미만의 아날로그 입력 전압이 첫 번째 전이를 생성하는 경우 오프셋 오류는 음수입니다(음수 오프셋 오류의 예는 그림 8 참조). 아날로그 입력 전압(VAIN)이 VSSA와 같고 ADC가 0이 아닌 디지털 출력을 생성하는 경우 오프셋 오류는 음수입니다. 이는 음의 전압이 첫 번째 전이를 생성한다는 것을 의미합니다.
그림에 오류가 있는 듯.. 위의 양의 Offset 오류와 동일한 그림임
Gain error
게인 오류는 마지막 실제 전환과 마지막 이상적인 전환 간의 편차입니다. EG로 표시됩니다.
마지막 실제 전환은 0xFFE에서 0xFFF로의 전환입니다. 이상적으로는 아날로그 입력이 VREF+ – 0.5 LSB와 같을 때 0xFFE에서 0xFFF로 전환되어야 합니다. 따라서 VREF+= 3.3V의 경우 마지막 이상적인 전환은 3.299597V에서 발생해야 합니다.
ADC가 VAIN < VREF+ – 0.5 LSB에 대해 0xFFF 판독값을 제공하면 음의 게인 오류가 발생합니다.
Example
게인 오류는 아래 공식으로 구합니다.
EG = 마지막 실제 전환 – 이상적인 전환
VREF+ = 3.3V 및 VAIN = 3.298435V인 경우 0xFFE에서 0xFFF로의 전환이 생성된 다음,
VREF+와 동일한 VAIN에 대해 전체 크기 판독값(0xFFF)을 얻지 못한 경우 게인 오류는 양수입니다. 이는 VREF+보다 큰 전압이 마지막 전환을 유발한다는 것을 의미합니다. 그림 9는 양의 게인 오류를 보여주고, 그림 10은 음의 게인 오류를 보여줍니다.
Differential linearity error
차동(혹은 미분) 선형성 오류(DLE)는 실제 단계와 이상적인 단계 사이의 최대 편차입니다. 여기서 '이상적'은 이상적인 전송 곡선이 아니라 ADC 분해능을 의미합니다. DLE는 ED로 표시됩니다. 그림 11에 나와 있습니다.
ED = 실제 단계 폭 - 1 LSB
이상적으로는 1 LSB의 아날로그 입력 전압 변경으로 인해 디지털 코드가 변경되어야 합니다. 디지털 코드 변경을 위해 1LSB보다 큰 아날로그 입력 전압이 필요한 경우 차동 선형성 오류가 관찰됩니다. 따라서 DLE는 하나의 디지털 코드에서 다음 디지털 코드로 변경하는 데 필요한 최대 추가 전압에 해당합니다. DLE는 차등 비선형성(DNL) 오류라고도 합니다.
Example
주어진 디지털 출력은 아날로그 입력 범위와 일치해야 합니다. 이상적으로는 단계 폭이 1LSB여야 합니다. 디지털 출력이 1.9998V ~ 2.0014V의 아날로그 입력 전압 범위에서 동일하다고 가정해 보겠습니다. 단계 폭은 다음과 같습니다.
2.0014V – 1.9998V = 1.6mV.
따라서 ED는 더 높은(2.0014V) 아날로그 전압과 더 낮은(1.9998V) 아날로그 전압 간의 전압 차이에서 1LSB에 해당하는 전압을 뺀 값입니다.
VREF+ = 3.3V인 경우 1.9998V(0x9B2)의 아날로그 입력은 0x9B1과 0x9B3 사이에서 다양한 결과를 제공할 수 있습니다. 마찬가지로 2.0014V(0x9B4) 입력의 경우 결과는 0x9B3에서 0x9B5 사이에서 달라질 수 있습니다.
결과적으로 0x9B3 단계에 해당하는 총 전압 변화는 다음과 같습니다.
Integral linearity error
적분 선형성 오류는 실제 전이와 끝점 상관선 사이의 최대 편차입니다. ILE는 EL로 표시됩니다. 그림 12에 나와 있습니다.
끝점 상관선은 첫 번째 실제 전환과 마지막 실제 전환을 연결하는 A/D 전달 곡선의 선으로 정의할 수 있습니다. EL은 각 전환에 대해 이 선으로부터의 편차입니다. 따라서 끝점 상관선은 실제 전달 곡선에 해당하며 이상적인 전달 곡선과는 아무런 관련이 없습니다.
ILE는 INL(적분 비선형 오류)이라고도 합니다. ILE는 전체 범위에 걸쳐 DLE의 통합입니다.
Example
0에서 1로의 첫 번째 전환이 550μV에서 발생하고 마지막 전환(0xFFE에서 0xFFF로)이 3.298435V(게인 오류)에서 발생하는 경우 실제 디지털 코드 0x1과 0xFFF를 연결하는 전송 곡선의 선은 끝점 상관 관계선입니다.
Total unadjusted error
조정되지 않은 총 오차(TUE)는 실제 전달 곡선과 이상적인 전달 곡선 사이의 최대 편차입니다. 이 매개변수는 발생할 수 있는 총 오류를 지정하여 이상적인 디지털 출력과 실제 디지털 출력 사이의 최대 편차를 발생시킵니다. TUE는 이상적인 예상 값과 모든 입력 전압에 대해 ADC에서 얻은 실제 값 사이에 기록된 최대 편차입니다.
TUE는 ET로 표시됩니다. 그림 13에 나와 있습니다. TUE는 EO, EG, EL, ED의 합이 아닙니다. 오프셋 오류는 낮은 전압에서 디지털 결과에 영향을 미치는 반면 이득 오류는 높은 전압에서 디지털 출력에 영향을 미칩니다.
Example
VREF+ = 3.3V이고 VAIN = 2V인 경우 이상적인 결과는 0x9B2입니다.
TUE = 절대값(실제값 – 이상적인 경우값) = 0x9B4 – 0x9B2 = 0x2 = 2 LSB
추가정보
다음은 STM32H7의 Datasheet에 정의 되어 있는 각 Error들인데 Ideal과 Actual의 Step을 한 눈에 볼 수 있어 이해하기 편합니다.
Reduce the effects of the ADC-related ADC errors
TUE는 모든 EO, EG, EL, ED 오류의 합계가 아닙니다. 이상적인 디지털 값과 실제 디지털 값 사이에서 발생할 수 있는 최대 편차입니다. 동시에 발생하는 하나 이상의 오류로 인해 발생할 수 있습니다.
ILE는 DLE의 통합이므로 최대 오류의 표시기로 간주될 수 있습니다. 디지털 단계에서 발생할 수 있는 최대 오류를 계산하기 위해 DLE와 ILE를 함께 더하면 안됩니다. 각 MCU 데이터시트에 명시된 최대 오류 값은 지정된 전압 및 온도 범위에 걸쳐 실험실 테스트 환경에서 측정된 최악의 오류 값입니다(데이터시트 참조).
ILE 및 DLE는 ADC 설계에 따라 다릅니다. 이를 교정하는 것은 어렵습니다. 마이크로컨트롤러 메모리에 저장된 측정된 ADC 곡선으로 교정할 수 있지만 이를 위해서는 최종 애플리케이션에서 각 개별 MCU에 대한 교정이 필요합니다.
오프셋 및 이득 오류는 STM32 ADC 자체 교정 기능을 사용하거나 마이크로컨트롤러 펌웨어를 통해 쉽게 보상할 수 있습니다.
다음 포스트에서는 주변 환경에 의한 ADC Error들을 알아보도록 하겠습니다.
그럼 이만
'▶ STM32 > Peripheral' 카테고리의 다른 글
STM32 Flash Memory에 대한 이야기 (0) | 2024.03.25 |
---|---|
UART(USART) Printf - HAL & Polling (2) (0) | 2024.03.17 |
Dual Core MCU 에서 RCC, RCC_C1, RCC_C2의 차이점 (0) | 2024.03.02 |
STM32에서 CRC 사용하기 (0) | 2024.02.16 |
USB Type-C® Power Delivery using STM32(6) - Recommendations (1) | 2024.02.16 |