నా ADC పఠనం ఎందుకు సున్నా కంటే ఎక్కువగా ఉంటుంది?
ఇన్పుట్ పిన్ గ్రౌన్దేడ్ అయినప్పటికీ, STM32 NUCLEO-C031C6లో మీ ADC రీడింగ్లు సున్నాకి పడిపోని సమస్యను మీరు ఎప్పుడైనా ఎదుర్కొన్నారా? ఈ అయోమయ పరిస్థితి అనుభవజ్ఞులైన డెవలపర్లకు కూడా తల గోక్కుంటూ ఉంటుంది. 🤔
ఇటీవల, NUCLEO-C031C6 యొక్క ADC మాడ్యూల్తో పని చేస్తున్నప్పుడు, క్లీన్ "0" విలువకు బదులుగా, నా రీడింగ్లు 0–4095 స్కేల్లో 120 చుట్టూ ఉన్నట్లు గమనించాను. పిన్ సురక్షితంగా భూమికి కనెక్ట్ చేయబడినందున ఇది ఊహించనిది. ఇది సూక్ష్మమైన సమస్య, కానీ అన్వేషించదగినది.
హార్డ్వేర్ క్విర్క్ల నుండి కాన్ఫిగరేషన్ సమస్యల వరకు వివిధ కారణాల వల్ల ఇటువంటి క్రమరాహిత్యాలు తలెత్తుతాయి. ఉదాహరణకు, అవశేష వోల్టేజ్, పిన్ పుల్-అప్ రెసిస్టర్లు లేదా సిస్టమ్లోని శబ్దం కూడా ప్లేలో ఉండవచ్చు. ఖచ్చితమైన కొలతలకు ఈ సూక్ష్మ నైపుణ్యాలను అర్థం చేసుకోవడం చాలా ముఖ్యం.
ఈ గైడ్లో, నేను ఈ ప్రవర్తనకు గల కారణాలను పరిశోధిస్తాను మరియు దానిని ఎలా సమర్థవంతంగా పరిష్కరించాలో భాగస్వామ్యం చేస్తాను. చివరికి, మీరు మీ ప్రాజెక్ట్లు సజావుగా సాగేలా చూసుకుంటూ నమ్మకమైన ADC రీడింగ్లను పొందడానికి సన్నద్ధమవుతారు. కలిసి ఈ రహస్యాన్ని ఛేదిద్దాం! 🚀
ఆదేశం | ఉపయోగం యొక్క ఉదాహరణ |
---|---|
HAL_ADC_PollForConversion | ADC మార్పిడి పూర్తయ్యే వరకు వేచి ఉండటానికి ఉపయోగించబడుతుంది. ఫలితాన్ని యాక్సెస్ చేయడానికి ముందు సిద్ధంగా ఉందని నిర్ధారించుకోవడానికి ఇది సింక్రోనస్ ADC డేటా రీడ్లలో ప్రత్యేకంగా ఉపయోగపడుతుంది. |
HAL_ADC_GetValue | డేటా రిజిస్టర్ నుండి మార్చబడిన ADC విలువను తిరిగి పొందుతుంది. ADC హార్డ్వేర్ నుండి సంఖ్యా అవుట్పుట్ను చదవడానికి ఇది చాలా కీలకం. |
HAL_ADC_Start | ADC మార్పిడి ప్రక్రియను ప్రారంభిస్తుంది. ఈ ఆదేశం ADC అనలాగ్ ఇన్పుట్ సిగ్నల్ను ప్రాసెస్ చేయడం ప్రారంభిస్తుందని నిర్ధారిస్తుంది. |
HAL_ADC_Stop | ADC మార్పిడి ప్రక్రియను ఆపివేస్తుంది. కొనసాగుతున్న మార్పిడులను ముగించడానికి ఉపయోగించబడుతుంది, ప్రత్యేకించి కాన్ఫిగరేషన్లు లేదా ఛానెల్లను మార్చేటప్పుడు. |
ADC_ChannelConfTypeDef | నమూనా సమయం మరియు ర్యాంక్ వంటి ADC ఛానెల్ కోసం నిర్దిష్ట సెట్టింగ్లను కాన్ఫిగర్ చేయడానికి ఉపయోగించే నిర్మాణం. ఖచ్చితమైన ADC కాన్ఫిగరేషన్లకు అవసరం. |
HAL_ADC_ConfigChannel | ADC_ChannelConfTypeDefలో అందించిన సెట్టింగ్ల ఆధారంగా ADC ఛానెల్ పారామితులను కాన్ఫిగర్ చేస్తుంది. వ్యక్తిగత ఛానెల్లను ఎంచుకోవడానికి మరియు ట్యూనింగ్ చేయడానికి ఇది అవసరం. |
numpy.random.normal | సాధారణ పంపిణీని అనుసరించి యాదృచ్ఛిక సంఖ్యలను ఉత్పత్తి చేస్తుంది. ఈ సందర్భంలో, పరీక్ష ప్రయోజనాల కోసం ADC సిగ్నల్లో శబ్దాన్ని అనుకరించడానికి ఇది ఉపయోగించబడుతుంది. |
unittest.TestCase | పరీక్ష కేసులను సృష్టించడం కోసం పైథాన్ యూనిట్టెస్ట్ మాడ్యూల్ అందించిన బేస్ క్లాస్. ఇది యూనిట్ పరీక్షలను సమర్థవంతంగా నిర్మించడంలో మరియు అమలు చేయడంలో సహాయపడుతుంది. |
assertEqual | పైథాన్ యొక్క యూనిట్టెస్ట్ ఫ్రేమ్వర్క్లో భాగం, రెండు విలువలు సమానంగా ఉన్నాయని ధృవీకరించడానికి ఉపయోగించబడుతుంది. ఉదాహరణలో, ఇన్పుట్ గ్రౌన్దేడ్ అయినప్పుడు ADC విలువలు ఆశించిన అవుట్పుట్తో సరిపోలుతున్నాయో లేదో తనిఖీ చేస్తుంది. |
plt.plot | పైథాన్ యొక్క Matplotlib లైబ్రరీలో 2D లైన్ ప్లాట్ను రూపొందించడానికి ఉపయోగించబడుతుంది. ఇక్కడ, ఇది డీబగ్గింగ్ మరియు విశ్లేషణ కోసం ADC సిగ్నల్ మరియు శబ్దాన్ని దృశ్యమానం చేస్తుంది. |
STM32లో ADC రీడింగ్లను డీబగ్ చేయడం మరియు ఆప్టిమైజ్ చేయడం ఎలా
C లో వ్రాయబడిన మొదటి స్క్రిప్ట్, STM32 NUCLEO-C031C6లో HAL (హార్డ్వేర్ అబ్స్ట్రాక్షన్ లేయర్) లైబ్రరీని ఉపయోగించి ADC విలువలను కాన్ఫిగర్ చేయడానికి మరియు చదవడానికి రూపొందించబడింది. ఈ స్క్రిప్ట్ ADC పెరిఫెరల్ని ప్రారంభిస్తుంది, కావలసిన ఛానెల్ని కాన్ఫిగర్ చేస్తుంది మరియు అనలాగ్ ఇన్పుట్ నుండి మార్చబడిన డిజిటల్ విలువను రీడ్ చేస్తుంది. వంటి ఆదేశాలు HAL_ADC_Start మరియు HAL_ADC_GetValue ఇక్కడ అవసరం. ఉదాహరణకు, HAL_ADC_PollForConversion విలువను తిరిగి పొందే ముందు ADC ప్రక్రియ పూర్తయిందని నిర్ధారిస్తుంది, అసంపూర్ణమైన లేదా తప్పు డేటాను చదవడాన్ని నివారించడంలో సహాయపడుతుంది. దీని యొక్క వాస్తవ-ప్రపంచ అనువర్తనం సెన్సార్ విలువలను పర్యవేక్షించడాన్ని కలిగి ఉండవచ్చు, ఇక్కడ ఖచ్చితత్వం చాలా ముఖ్యమైనది. 😊
పైథాన్లో వ్రాయబడిన రెండవ స్క్రిప్ట్, అనలాగ్ సిగ్నల్స్ మరియు నాయిస్ ఉపయోగించి అనుకరించడం ద్వారా ADC ప్రవర్తనను మోడల్ చేస్తుంది మొద్దుబారిన. తెలిసిన సిగ్నల్కు యాదృచ్ఛిక శబ్దాన్ని వర్తింపజేయడం ద్వారా, డెవలపర్లు ADC రీడింగులను నాయిస్ ఎలా ప్రభావితం చేస్తుందో బాగా అర్థం చేసుకోగలరు మరియు తగిన వడపోత పద్ధతులను వర్తింపజేయగలరు. IoT సిస్టమ్ల వంటి ధ్వనించే వాతావరణాలతో పనిచేసేటప్పుడు ఈ విధానం ప్రత్యేకంగా ఉపయోగపడుతుంది, ఇక్కడ బాహ్య జోక్యం సంకేతాలను వక్రీకరించవచ్చు. ఉపయోగించి రూపొందించబడిన విజువలైజేషన్ matplotlib ADC సిగ్నల్ ప్రాసెసింగ్ను డీబగ్ చేయడానికి మరియు మెరుగుపరచడానికి స్పష్టమైన మార్గాన్ని అందిస్తుంది. ఉదాహరణకు, పారిశ్రామిక సెటప్లోని ఉష్ణోగ్రత సెన్సార్ ధ్వనించే రీడింగ్లను ఉత్పత్తి చేస్తే, ఈ స్క్రిప్ట్ సమస్యను అనుకరించడంలో మరియు తగ్గించడంలో సహాయపడుతుంది.
మూడవ స్క్రిప్ట్ పైథాన్లను ఉపయోగించి ADC-సంబంధిత దృశ్యాల కోసం యూనిట్ పరీక్షను ప్రదర్శిస్తుంది ఏకపరీక్ష ఫ్రేమ్వర్క్. విశ్వసనీయతను నిర్ధారించడానికి ఇది చాలా కీలకం, ఎందుకంటే ADC కోడ్ వివిధ పరిస్థితులలో ఆశించిన విధంగా ప్రవర్తిస్తుందని ఇది ధృవీకరిస్తుంది. ఉదాహరణకు, ఛానెల్ పిన్ గ్రౌన్దేడ్ అయినప్పుడు, పరీక్ష ADC విలువ సున్నా అని నిర్ధారిస్తుంది, అయితే డిస్కనెక్ట్ చేయబడిన పిన్లు సున్నా కాని విలువలను అందిస్తాయి. సాపేక్ష వినియోగ సందర్భం స్మార్ట్ ఇరిగేషన్ సిస్టమ్లో నీటి స్థాయి సెన్సార్ను పరీక్షించడం కావచ్చు: ఇది "ఖాళీ" లేదా "పూర్తి" అని సరిగ్గా చదివినట్లు ధృవీకరించడం సంభావ్య హార్డ్వేర్ నష్టం లేదా సిస్టమ్ వైఫల్యాన్ని నివారిస్తుంది. 🚀
మొత్తంమీద, ఈ స్క్రిప్ట్లు ADC విలువ రీడింగ్లలో నిర్దిష్ట సవాళ్లను పరిష్కరించడానికి రూపొందించబడ్డాయి, ప్రత్యేకించి గ్రౌండెడ్ పిన్లో సున్నా కాని విలువలు వంటి ఊహించని ఫలితాలు సంభవించినప్పుడు. C-ఆధారిత స్క్రిప్ట్ అవసరమైన STM32 ADC ఆదేశాలు మరియు కాన్ఫిగరేషన్లను హైలైట్ చేస్తుంది. ఇంతలో, పైథాన్ స్క్రిప్ట్లు ADC దృశ్యాలను మాడ్యులర్ మరియు పునర్వినియోగ మార్గంలో అనుకరించడం, దృశ్యమానం చేయడం మరియు పరీక్షించడం ద్వారా దీన్ని విస్తరించాయి. DIY హోమ్ ఆటోమేషన్ ప్రాజెక్ట్ను ట్రబుల్షూట్ చేసినా లేదా ప్రొఫెషనల్ ఎంబెడెడ్ సిస్టమ్ను రూపొందించినా, ఈ స్క్రిప్ట్లు మరియు వాటి వివరించిన వినియోగం ADC పనితీరును ఆప్టిమైజ్ చేయడానికి బలమైన ప్రారంభ బిందువును అందిస్తాయి. అనుకరణ, విజువలైజేషన్ మరియు టెస్టింగ్ని కలపడం ద్వారా, మీరు దాదాపు ఏదైనా ADC-సంబంధిత సమస్యను విశ్వాసంతో పరిష్కరించవచ్చు. 😊
NUCLEO-C031C6పై జీరో కాని ADC రీడింగ్లను పరిష్కరిస్తోంది
ఈ స్క్రిప్ట్ ADC విలువలను కాన్ఫిగర్ చేయడానికి మరియు చదవడానికి STM32 HAL లైబ్రరీని ఉపయోగిస్తుంది, శబ్దం లేదా సరికాని గ్రౌండింగ్ వంటి సంభావ్య సమస్యలను డీబగ్గింగ్ చేయడంపై దృష్టి పెడుతుంది.
#include "stm32c0xx_hal.h"
ADC_HandleTypeDef hadc;
void SystemClock_Config(void);
static void MX_ADC_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_ADC_Init();
uint32_t adc_value;
while (1) {
HAL_ADC_Start(&hadc);
if (HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY) == HAL_OK) {
adc_value = HAL_ADC_GetValue(&hadc);
if (adc_value < 10) {
printf("ADC reads near zero: %lu\\n", adc_value);
} else {
printf("Unexpected ADC value: %lu\\n", adc_value);
}
}
HAL_ADC_Stop(&hadc);
}
}
static void MX_ADC_Init(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
HAL_ADC_Init(&hadc);
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc, &sConfig);
}
డీబగ్గింగ్ ADC రీడింగ్లు: పిన్-లెవల్ సిమ్యులేషన్
ఈ పైథాన్ స్క్రిప్ట్ ఒక సాధారణ నమూనాను అనుకరించడం మరియు నాయిస్ ఫిల్టరింగ్ పద్ధతులను వర్తింపజేయడం ద్వారా ADC సిగ్నల్ విశ్లేషణను ప్రదర్శిస్తుంది.
import numpy as np
import matplotlib.pyplot as plt
def simulate_adc_reading(signal, noise_level):
noise = np.random.normal(0, noise_level, len(signal))
adc_values = signal + noise
adc_values[adc_values < 0] = 0
return adc_values
time = np.linspace(0, 1, 1000)
signal = np.zeros_like(time)
signal[400:600] = 1 # Simulated signal
adc_readings = simulate_adc_reading(signal, 0.05)
plt.plot(time, adc_readings)
plt.title("ADC Simulation with Noise")
plt.xlabel("Time (s)")
plt.ylabel("ADC Value")
plt.grid()
plt.show()
ADC విశ్వసనీయత కోసం యూనిట్ టెస్టింగ్
ఈ స్క్రిప్ట్ ఆశించిన విలువలకు వ్యతిరేకంగా ADC రీడింగ్లను ధృవీకరించడం కోసం ఒక సాధారణ పైథాన్ యూనిట్టెస్ట్ను ప్రదర్శిస్తుంది.
import unittest
def adc_reading_simulation(ground_pin):
if ground_pin == "connected":
return 0
return 120 # Simulated error
class TestADC(unittest.TestCase):
def test_grounded_pin(self):
self.assertEqual(adc_reading_simulation("connected"), 0)
def test_unexpected_value(self):
self.assertNotEqual(adc_reading_simulation("disconnected"), 0)
if __name__ == "__main__":
unittest.main()
STM32 అప్లికేషన్లలో ADC ఆఫ్సెట్ సమస్యలను అర్థం చేసుకోవడం
STM32 యొక్క అనలాగ్-టు-డిజిటల్ కన్వర్టర్ (ADC)తో పని చేస్తున్నప్పుడు, సున్నా కాని రీడింగ్లలో ఆఫ్సెట్ ఎర్రర్ల పాత్రను గుర్తించడం చాలా అవసరం. ఆఫ్సెట్ ఎర్రర్ అనేది ADC ఫలితాలలో స్థిరమైన విచలనాన్ని సూచిస్తుంది, తరచుగా హార్డ్వేర్ లోపాలు లేదా సరికాని కాన్ఫిగరేషన్ కారణంగా సంభవిస్తుంది. ఈ లోపం ముఖ్యంగా తక్కువ-వోల్టేజ్ సిగ్నల్స్లో గుర్తించదగినది, ఇక్కడ అమరికలో కొంచెం అసమతుల్యత కూడా గణనీయమైన తప్పులకు దారి తీస్తుంది. తరచుగా అంతర్గత లీకేజ్ కరెంట్లు లేదా ఇన్పుట్ ఇంపెడెన్స్ ఎఫెక్ట్ల కారణంగా 0కి బదులుగా 120గా ఉండే గ్రౌండెడ్ పిన్ క్లాసిక్ కేస్. పరికర క్రమాంకనం సమయంలో ఇంజనీర్లు తరచుగా ఈ సమస్యను పరిష్కరిస్తారు. 🤔
ADC పనితీరు యొక్క ఒక విస్మరించబడిన అంశం రిఫరెన్స్ వోల్టేజ్ స్థిరత్వం యొక్క ప్రాముఖ్యత. STM32 ADC పూర్తి స్థాయి కొలతల కోసం Vref+ పిన్ని బెంచ్మార్క్గా ఉపయోగిస్తుంది. సూచన వోల్టేజ్ హెచ్చుతగ్గులకు గురైతే, ADC విలువ ఆశించిన ఫలితాల నుండి వైదొలగవచ్చు. విద్యుత్ సరఫరా లేదా బాహ్య భాగాల నుండి వచ్చే శబ్దం దీనిని మరింత తీవ్రతరం చేస్తుంది. ఉదాహరణకు, ఫిల్టర్ చేయని USB పవర్ సోర్స్ని ఉపయోగించడం వలన సున్నితమైన ADC కొలతలకు అంతరాయం కలిగించే అలలను పరిచయం చేయవచ్చు. డెవలపర్లు తరచుగా బాహ్య డీకప్లింగ్ కెపాసిటర్లు లేదా స్థిరమైన రిఫరెన్స్ రెగ్యులేటర్లతో దీనిని తగ్గించుకుంటారు.
మరొక కీలకమైన అంశం నమూనా సమయం ఎంపిక. ఒక చిన్న నమూనా సమయం అధిక-ఇంపెడెన్స్ మూలాల నుండి చదివేటప్పుడు స్థిరీకరించడానికి ADCని అనుమతించకపోవచ్చు, ఫలితంగా సరికాని మార్పిడులు ఏర్పడతాయి. సోర్స్ ఇంపెడెన్స్ ఆధారంగా ADC నమూనా సమయాన్ని సర్దుబాటు చేయడం వలన ఖచ్చితత్వం గణనీయంగా పెరుగుతుంది. బ్యాటరీ మానిటరింగ్ సిస్టమ్ల వంటి అప్లికేషన్లలో ఇది చాలా కీలకం, ఇక్కడ ఛార్జ్ స్థాయిలను నిర్ణయించడానికి ఖచ్చితమైన వోల్టేజ్ రీడింగ్లు కీలకం. ఈ అభ్యాసాలను చేర్చడం సరైన ADC పనితీరు మరియు విశ్వసనీయతను నిర్ధారిస్తుంది. 🚀
STM32 ADC రీడింగ్ల గురించి సాధారణ ప్రశ్నలు
- పిన్ గ్రౌన్దేడ్ అయినప్పుడు నా ADC ఎందుకు సున్నాని చదవదు?
- ఇది ఆఫ్సెట్ లోపాలు, అంతర్గత లీకేజీ కరెంట్లు లేదా సరికాని గ్రౌండింగ్ వల్ల కావచ్చు. వంటి ఆదేశాలను ఉపయోగించండి HAL_ADC_ConfigChannel మీ సెట్టింగ్లను చక్కగా ట్యూన్ చేయడానికి.
- ADC ఖచ్చితత్వంలో సూచన వోల్టేజ్ పాత్ర ఏమిటి?
- సూచన వోల్టేజ్ ADC మార్పిడుల కోసం స్కేల్ను సెట్ చేస్తుంది. Vref+లో శబ్దం కొలతలను వక్రీకరించవచ్చు. డీకప్లింగ్ కెపాసిటర్లను ఉపయోగించి దాన్ని స్థిరీకరించండి.
- అధిక-ఇంపెడెన్స్ మూలాల కోసం నేను ADC ఖచ్చితత్వాన్ని ఎలా మెరుగుపరచగలను?
- ఉపయోగించి నమూనా సమయాన్ని పెంచండి ADC_SAMPLETIME_239CYCLES_5 ADC స్థిరీకరించడానికి మరింత సమయాన్ని అనుమతించడానికి.
- ADC రీడింగులను డీబగ్ చేయడానికి ఉత్తమ మార్గం ఏమిటి?
- వంటి డీబగ్గింగ్ సాధనాలు మరియు స్క్రిప్ట్లను ఉపయోగించండి HAL_ADC_GetValue ముడి రీడింగ్లను పర్యవేక్షించడానికి మరియు అసమానతలను గుర్తించడానికి.
- నా విద్యుత్ సరఫరా నుండి వచ్చే శబ్దం ADC పనితీరును ప్రభావితం చేయగలదా?
- అవును, అస్థిర విద్యుత్ వనరులు శబ్దాన్ని పరిచయం చేస్తాయి. ఫిల్టర్ చేయబడిన సరఫరా లేదా ప్రత్యేక వోల్టేజ్ రెగ్యులేటర్ దీనిని తగ్గించడంలో సహాయపడుతుంది.
విశ్వసనీయ ADC పనితీరు కోసం కీలకమైన అంశాలు
గ్రౌండెడ్ పిన్లపై సున్నా కాని రీడింగ్ల వంటి ADC తప్పులు తరచుగా ఆఫ్సెట్ లోపాలు లేదా శబ్దం వల్ల సంభవిస్తాయి. వీటిని పరిష్కరించడానికి సరైన కాన్ఫిగరేషన్ మరియు స్టెబిలైజేషన్ టెక్నిక్లు అవసరం, IoT లేదా సెన్సార్ మానిటరింగ్ వంటి సున్నితమైన సిస్టమ్ల కోసం నమ్మకమైన డేటాను నిర్ధారిస్తుంది. 😊
మాదిరి సమయం మరియు సూచన వోల్టేజ్కి సర్దుబాట్లతో సహా ప్రాక్టికల్ డీబగ్గింగ్ సాధారణ ADC సవాళ్లను పరిష్కరిస్తుంది. ఈ అంతర్దృష్టులను వర్తింపజేయడం వలన వృత్తిపరమైన ప్రాజెక్ట్లు లేదా DIY ఎలక్ట్రానిక్ల కోసం సున్నితమైన పనితీరును నిర్ధారిస్తుంది. ఇంజనీర్లు సరైన విధానంతో ఇటువంటి సమస్యలను నమ్మకంగా పరిష్కరించగలరు. 🚀
ADC ట్రబుల్షూటింగ్ కోసం మూలాలు మరియు సూచనలు
- STM32 HAL లైబ్రరీ మరియు ADC కాన్ఫిగరేషన్పై వివరాలు అధికారిక STM32 డాక్యుమెంటేషన్ నుండి సూచించబడ్డాయి. STM32CubeIDE డాక్యుమెంటేషన్
- ADC ఆఫ్సెట్ ఎర్రర్ కరెక్షన్ మరియు నాయిస్ ఫిల్టరింగ్లోని అంతర్దృష్టులు సాంకేతిక ఫోరమ్లలో కనిపించే ఆచరణాత్మక ఉదాహరణల నుండి స్వీకరించబడ్డాయి. ఎలక్ట్రానిక్స్ స్టాక్ ఎక్స్ఛేంజ్
- పైథాన్ ఆధారిత ADC సిగ్నల్ సిమ్యులేషన్ పద్ధతులు పైథాన్ మాట్ప్లాట్లిబ్ లైబ్రరీ సైట్లో అందుబాటులో ఉన్న ట్యుటోరియల్ల ద్వారా ప్రేరణ పొందాయి. Matplotlib డాక్యుమెంటేషన్