- Arduino మరియు STM32F103C8 లో ADC ని పోల్చడం
- STM32 లో ADC
- అనలాగ్ సిగ్నల్ ఎలా డిజిటల్ ఫార్మాట్గా మార్చబడుతుంది
- STM32F103C8T6 లో ADC పిన్స్
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం మరియు వివరణలు
- ADC విలువలను చదవడానికి STM32 ప్రోగ్రామింగ్
దాదాపు ప్రతి ఎంబెడెడ్ అప్లికేషన్లో ఉపయోగించే ఒక సాధారణ లక్షణం ADC మాడ్యూల్ (అనలాగ్ టు డిజిటల్ కన్వర్టర్). ఈ అనలాగ్ టు డిజిటల్ కన్వర్టర్స్ టెంపరేచర్ సెన్సార్, టిల్ట్ సెన్సార్, కరెంట్ సెన్సార్, ఫ్లెక్స్ సెన్సార్ మరియు మరెన్నో వంటి అనలాగ్ సెన్సార్ల నుండి వోల్టేజ్ చదవగలదు. కాబట్టి ఈ ట్యుటోరియల్లో ఎనర్జియా IDE ని ఉపయోగించి అనలాగ్ వోల్టేజ్లను చదవడానికి STM32F103C8 లో ADC ని ఎలా ఉపయోగించాలో నేర్చుకుంటాము. మేము STM32 బ్లూ పిల్ బోర్డ్కు ఒక చిన్న పొటెన్షియోమీటర్ను ఇంటర్ఫేస్ చేస్తాము మరియు అనలాగ్ పిన్కు భిన్నమైన వోల్టేజ్ను సరఫరా చేస్తాము, వోల్టేజ్ చదివి 16x2 LCD స్క్రీన్లో ప్రదర్శిస్తాము.
Arduino మరియు STM32F103C8 లో ADC ని పోల్చడం
ఆర్డునో బోర్డులో, ఇది 6 ఛానల్ (మినీ మరియు నానోలో 8 ఛానెల్స్, మెగాపై 16), 0V-5V యొక్క ఇన్పుట్ వోల్టేజ్ పరిధితో 10-బిట్ ADC ని కలిగి ఉంది. దీని అర్థం 0 మరియు 523 వోల్ట్ల మధ్య ఇన్పుట్ వోల్టేజ్లను 0 మరియు 1023 మధ్య పూర్ణాంక విలువలుగా మ్యాప్ చేస్తుంది. ఇప్పుడు STM32F103C8 విషయంలో మనకు 10 ఛానెల్స్ ఉన్నాయి, ఇన్పుట్ పరిధి 0V -3.3V తో 12-బిట్ ADC. ఇది 0 మరియు 3.3 వోల్ట్ల మధ్య ఇన్పుట్ వోల్టేజ్లను 0 మరియు 4095 మధ్య పూర్ణాంక విలువలుగా మ్యాప్ చేస్తుంది.
STM32 లో ADC
STM32 మైక్రోకంట్రోలర్లలో పొందుపరిచిన ADC SAR (వరుస ఉజ్జాయింపు రిజిస్టర్) సూత్రాన్ని ఉపయోగిస్తుంది, దీని ద్వారా మార్పిడి అనేక దశల్లో జరుగుతుంది. మార్పిడి దశల సంఖ్య ADC కన్వర్టర్లోని బిట్ల సంఖ్యకు సమానం. ప్రతి దశ ADC గడియారం ద్వారా నడపబడుతుంది. ప్రతి ADC గడియారం ఫలితం నుండి అవుట్పుట్ వరకు ఒక బిట్ను ఉత్పత్తి చేస్తుంది. ADC అంతర్గత రూపకల్పన స్విచ్డ్-కెపాసిటర్ టెక్నిక్ మీద ఆధారపడి ఉంటుంది. మీరు STM32 కి క్రొత్తగా ఉంటే, STM32 ట్యుటోరియల్తో మా ప్రారంభించడం ప్రారంభించండి.
12-బిట్ రిజల్యూషన్
ఈ ADC 10 ఛానల్ 12-బిట్ ADC. ఇక్కడ 10 ఛానల్ అనే పదం 10 ADC పిన్స్ ఉన్నాయని సూచిస్తుంది, వీటిని ఉపయోగించి మేము అనలాగ్ వోల్టేజ్ను కొలవగలము. 12-బిట్ అనే పదం ADC యొక్క తీర్మానాన్ని సూచిస్తుంది. 12-బిట్ అంటే పది (2 12) శక్తికి 2 అంటే 4096. ఇది మా ఎడిసికి నమూనా దశల సంఖ్య, కాబట్టి మా ఎడిసి విలువల పరిధి 0 నుండి 4095 వరకు ఉంటుంది. విలువ 0 నుండి 40 వరకు పెరుగుతుంది 4095 ప్రతి దశకు వోల్టేజ్ విలువ ఆధారంగా, దీనిని ఫార్ములా ద్వారా లెక్కించవచ్చు
వోల్టేజ్ / స్టెప్ = రిఫరెన్స్ వోల్టేజ్ / 4096 = (3.3 / 4096 = 8.056 ఎంవి) యూనిట్కు.
అనలాగ్ సిగ్నల్ ఎలా డిజిటల్ ఫార్మాట్గా మార్చబడుతుంది
కంప్యూటర్లు బైనరీ / డిజిటల్ విలువలను (1 మరియు 0 లు) మాత్రమే నిల్వ చేసి ప్రాసెస్ చేస్తాయి. కాబట్టి వోల్ట్లలో సెన్సార్ అవుట్పుట్ వంటి అనలాగ్ సిగ్నల్స్ ప్రాసెసింగ్ కోసం డిజిటల్ విలువలుగా మార్చబడాలి మరియు మార్పిడి ఖచ్చితంగా ఉండాలి.ఒక ఇన్పుట్ అనలాగ్ వోల్టేజ్ STM32 కి దాని అనలాగ్ ఇన్పుట్లలో ఇవ్వబడినప్పుడు, అనలాగ్ విలువ చదవబడుతుంది మరియు పూర్ణాంక వేరియబుల్ లో నిల్వ చేయబడుతుంది. నిల్వ చేసిన అనలాగ్ విలువ (0-3.3 వి) దిగువ సూత్రాన్ని ఉపయోగించి పూర్ణాంక విలువలుగా (0-4096) మార్చబడుతుంది:
INPUT VOLTAGE = (ADC విలువ / ADC రిజల్యూషన్) * రిఫరెన్స్ వోల్టేజ్
రిజల్యూషన్ = 4096
సూచన = 3.3 వి
STM32F103C8T6 లో ADC పిన్స్
PA0 నుండి PB1 వరకు STM32 లో 10 అనలాగ్ పిన్స్ ఉన్నాయి.
ఇతర మైక్రోకంట్రోలర్లలో ADC ఎలా ఉపయోగించాలో కూడా తనిఖీ చేయండి:
- Arduino Uno లో ADC ని ఎలా ఉపయోగించాలి?
- 8051 మైక్రోకంట్రోలర్తో ADC0808 ఇంటర్ఫేసింగ్
- పిఐసి మైక్రోకంట్రోలర్ యొక్క ఎడిసి మాడ్యూల్ ఉపయోగించడం
- రాస్ప్బెర్రీ పై ADC ట్యుటోరియల్
- MSP430G2 లో ADC ని ఎలా ఉపయోగించాలి - అనలాగ్ వోల్టేజ్ను కొలవడం
భాగాలు అవసరం
- STM32F103C8
- LCD 16 * 2
- పొటెన్టోమీటర్ 100 కే
- బ్రెడ్బోర్డ్
- వైర్లను కనెక్ట్ చేస్తోంది
సర్క్యూట్ రేఖాచిత్రం మరియు వివరణలు
ఇంటర్ఫేస్ సర్క్యూట్లో 16 * 2 LCD మరియు అనలాగ్ ఇన్పుట్ ఒక STM32F103C8T6 వరకు బోర్డు క్రింద చూపించాం.
LCD కోసం చేసిన కనెక్షన్లు క్రింద ఇవ్వబడ్డాయి:
ఎల్సిడి పిన్ నం |
LCD పిన్ పేరు |
STM32 పిన్ పేరు |
1 |
గ్రౌండ్ (Gnd) |
గ్రౌండ్ (జి) |
2 |
వీసీసీ |
5 వి |
3 |
VEE |
సెంటర్ ఆఫ్ పొటెన్టోమీటర్ నుండి పిన్ చేయండి |
4 |
రిజిస్టర్ సెలెక్ట్ (RS) |
పిబి 11 |
5 |
చదవండి / వ్రాయండి (RW) |
గ్రౌండ్ (జి) |
6 |
ప్రారంభించండి (EN) |
పిబి 10 |
7 |
డేటా బిట్ 0 (DB0) |
కనెక్షన్ లేదు (NC) |
8 |
డేటా బిట్ 1 (డిబి 1) |
కనెక్షన్ లేదు (NC) |
9 |
డేటా బిట్ 2 (డిబి 2) |
కనెక్షన్ లేదు (NC) |
10 |
డేటా బిట్ 3 (డిబి 3) |
కనెక్షన్ లేదు (NC) |
11 |
డేటా బిట్ 4 (డిబి 4) |
పిబి 0 |
12 |
డేటా బిట్ 5 (డిబి 5) |
పిబి 1 |
13 |
డేటా బిట్ 6 (డిబి 6) |
పిసి 13 |
14 |
డేటా బిట్ 7 (డిబి 7) |
పిసి 14 |
15 |
LED పాజిటివ్ |
5 వి |
16 |
LED నెగటివ్ |
గ్రౌండ్ (జి) |
కనెక్షన్లు పైన ఇచ్చిన పట్టిక ప్రకారం తయారు చేయబడతాయి. సర్క్యూట్లో రెండు పొటెన్టోమీటర్లు ఉన్నాయి, మొదటిది వోల్టేజ్ డివైడర్ కోసం ఉపయోగించబడుతుంది, ఇది వోల్టేజ్ను మార్చడానికి మరియు STM32 కు అనలాగ్ ఇన్పుట్ను అందించడానికి ఉపయోగపడుతుంది. ఈ పొటెన్షియోమీటర్ యొక్క ఎడమ పిన్ STM32 (3.3V) నుండి ఇన్పుట్ పాజిటివ్ వోల్టేజ్ పొందుతుంది మరియు కుడి పిన్ భూమికి అనుసంధానించబడి ఉంటుంది, పొటెన్టోమీటర్ యొక్క సెంటర్ పిన్ STM32 యొక్క అనలాగ్ ఇన్పుట్ పిన్ (PA7) తో అనుసంధానించబడి ఉంటుంది. ఇతర పొటెన్షియోమీటర్ LCD డిస్ప్లే యొక్క వ్యత్యాసాన్ని మార్చడానికి ఉపయోగించబడుతుంది. STM32 కోసం విద్యుత్ వనరు PC లేదా ల్యాప్టాప్ నుండి USB విద్యుత్ సరఫరా ద్వారా అందించబడుతుంది.
ADC విలువలను చదవడానికి STM32 ప్రోగ్రామింగ్
మా మునుపటి ట్యుటోరియల్లో, USB పోర్ట్ను ఉపయోగించి ప్రోగ్రామింగ్ STM32F103C8T6 బోర్డ్ గురించి తెలుసుకున్నాము. కాబట్టి మాకు ఇప్పుడు ఎఫ్టిడిఐ ప్రోగ్రామర్ అవసరం లేదు. STM32 యొక్క USB పోర్ట్ ద్వారా PC కి కనెక్ట్ చేయండి మరియు ARDUINO IDE తో ప్రోగ్రామింగ్ ప్రారంభించండి. అనలాగ్ వోల్టేజ్ చదవడానికి ARDUINO IDE లో మీ STM32 ను ప్రోగ్రామింగ్ చేయడం చాలా సులభం. ఇది arduino బోర్డు లాంటిది. STM32 యొక్క జంపర్ పిన్లను మార్చాల్సిన అవసరం లేదు.
ఈ ప్రోగ్రామ్లో అనలాగ్ విలువను చదివి, ఆ విలువతో వోల్టేజ్ను లెక్కించి, ఆపై ఎల్సిడి తెరపై అనలాగ్ మరియు డిజిటల్ విలువలు రెండింటినీ ప్రదర్శిస్తుంది.
మొదట LCD పిన్లను నిర్వచించండి. ఇవి STM32 యొక్క పిన్ LCD పిన్లకు అనుసంధానించబడి ఉన్నాయని నిర్వచించాయి. మీ అవసరాలకు అనుగుణంగా మీరు సవరించవచ్చు.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // ఎల్సిడితో అనుసంధానించబడిన పిన్ పేర్లను పేర్కొనండి
తరువాత, మేము LCD డిస్ప్లే కోసం హెడర్ ఫైల్ను చేర్చుతాము. ఇది STM32 LCD తో ఎలా సంభాషించాలో కోడ్ ఉన్న లైబ్రరీని పిలుస్తుంది. మేము పైన నిర్వచించిన పిన్ పేర్లతో లిక్విడ్ క్రిస్టల్ ఫంక్షన్ పిలువబడిందని నిర్ధారించుకోండి.
# చేర్చండి
సెటప్ () ఫంక్షన్ లోపల, మేము LCD స్క్రీన్లో ప్రదర్శించడానికి ఒక పరిచయ సందేశాన్ని ఇస్తాము. మీరు STM32 తో LCD ని ఇంటర్ఫేసింగ్ గురించి తెలుసుకోవచ్చు.
lcd.begin (16, 2); // మేము 16 * 2 LCD lcd.clear () ను ఉపయోగిస్తున్నాము; // స్క్రీన్ను క్లియర్ చేయండి lcd.setCursor (0, 0); // మొదటి వరుసలో మొదటి కాలమ్ lcd.prin t ("CIRCUITDIGEST"); // ఈ lcd.setCursor (0, 1) ను ముద్రించండి ; // సెకండ్ వరుస మొదటి కోలం n lcd.print ("STM32F103C8"); // థీ ముద్రించండి లు ఆలస్యం (2000); // రెండు సెకండ్ల కోసం వేచి ఉండండి lcd.clear (); // స్క్రీన్ను క్లియర్ చేయండి lcd.setCursor (0, 0); // మొదటి వరుసలో మొదటి కాలమ్ lcd.print ("ADC IN USING"); // ఈ lcd.setCursor (0,1) ను ప్రింట్ చేయండి ; // సెకండ్ అడ్డు వరుస మొదటి కాలమ్ lcd.print ("STM32F103C8"); // ఈ ఆలస్యాన్ని ముద్రించండి (2000); // రెండు సెకండ్ల కోసం వేచి ఉండండి lcd.clear (); // స్క్రీన్ క్లియర్
చివరగా, మా అనంతమైన లూప్ () ఫంక్షన్ లోపల, మేము పొటెన్షియోమీటర్ నుండి PA7 పిన్కు సరఫరా చేసిన అనలాగ్ వోల్టేజ్ చదవడం ప్రారంభిస్తాము. మేము ఇప్పటికే చర్చించినట్లుగా, మైక్రోకంట్రోలర్ ఒక డిజిటల్ పరికరం మరియు ఇది వోల్టేజ్ల స్థాయిని నేరుగా చదవదు. SAR సాంకేతికతను ఉపయోగించి వోల్టేజ్ స్థాయిని 0 నుండి 4096 వరకు మ్యాప్ చేస్తారు. ఈ విలువలను ADC విలువలు అంటారు, ఈ ADC విలువను పొందడానికి ఈ క్రింది పంక్తిని ఉపయోగించండి
int val = అనలాగ్ రీడ్ (A7); // పిన్ PA 7 నుండి ADC విలువను చదవండి
ఇక్కడ పిన్ యొక్క అనలాగ్ విలువను చదవడానికి అనలాగ్ రీడ్ () ఫంక్షన్ ఉపయోగించబడుతుంది. చివరగా మనం ఈ విలువను “ val ” అనే వేరియబుల్ లో సేవ్ చేస్తాము. ఈ వేరియబుల్ రకం పూర్ణాంకం ఎందుకంటే ఈ వేరియబుల్లో నిల్వ చేయడానికి 0 నుండి 4096 వరకు విలువలను మాత్రమే పొందుతాము.
తదుపరి దశ ADC విలువ నుండి వోల్టేజ్ విలువను లెక్కించడం. ఇది చేయుటకు మనకు ఈ క్రింది సూత్రాలు ఉన్నాయి
వోల్టేజ్ = (ADC విలువ / ADC రిజల్యూషన్) * రిఫరెన్స్ వోల్టాగ్ ఇ
మా విషయంలో మన మైక్రోకంట్రోలర్ యొక్క ADC రిజల్యూషన్ 4096 అని మనకు ఇప్పటికే తెలుసు. ADC విలువ మునుపటి వరుసలో కూడా కనుగొనబడింది మరియు val అనే వేరియబుల్ ని నిల్వ చేస్తుంది. సూచన వోల్టేజ్ మైక్రోకంట్రోలర్ నడిపే వద్ద వోల్టేజ్ సమానం. STM32 బోర్డు USB కేబుల్ ద్వారా శక్తిని పొందినప్పుడు ఆపరేటింగ్ వోల్టేజ్ 3.3V. బోర్డులోని Vcc మరియు గ్రౌండ్ పిన్ అంతటా మల్టీమీటర్ ఉపయోగించి మీరు ఆపరేటింగ్ వోల్టేజ్ను కూడా కొలవవచ్చు. కాబట్టి పై సూత్రం క్రింద చూపిన విధంగా మన విషయంలో సరిపోతుంది
ఫ్లోట్ వోల్టేజ్ = (ఫ్లోట్ (వాల్) / 4096) * 3.3; ADC విలువను వోల్టాగ్ ఇగా మార్చడానికి // సూత్రాలు ఇ
మీరు లైన్ ఫ్లోట్ (వాల్) తో గందరగోళం చెందవచ్చు. వేరియబుల్ “వాల్” ను ఇంట్ డేటా రకం నుండి “ఫ్లోట్” డేటా రకంగా మార్చడానికి ఇది ఉపయోగించబడుతుంది. ఈ మార్పిడి అవసరం ఎందుకంటే ఫ్లోట్లో వాల్ / 4096 ఫలితం వస్తేనే దాన్ని 3.3 గుణించవచ్చు. విలువ పూర్ణాంకంలో స్వీకరించబడితే అది ఎల్లప్పుడూ 0 గా ఉంటుంది మరియు ఫలితం కూడా సున్నా అవుతుంది. మేము ADC విలువ మరియు వోల్టేజ్ను లెక్కించిన తర్వాత, మిగిలి ఉన్నది ఫలితాన్ని LCD స్క్రీన్పై ప్రదర్శించడం, ఈ క్రింది పంక్తులను ఉపయోగించి చేయవచ్చు
lcd.setCursor (0, 0); // కర్సర్ను కాలమ్ 0, లైన్ 0 lcd.print ("ADC Val:") కు సెట్ చేయండి; lcd.print (val); // ADC విలువను ప్రదర్శించు lcd.setCursor (0, 1); // కర్సర్ను కాలమ్ 0, లైన్ 1 ఎల్సిడి.ప్రింట్ ("వోల్టేజ్:") కు సెట్ చేయండి; lcd.print (వోల్టేజ్); // డిస్ప్లే వోల్టేజ్
పూర్తి కోడ్ మరియు ప్రదర్శన వీడియో క్రింద ఇవ్వబడింది.