- పిడబ్ల్యుఎం (పల్స్ విత్ మాడ్యులేషన్) అంటే ఏమిటి?
- STM32 లో PWM
- భాగాలు అవసరం
- STM32 యొక్క పిన్ వివరాలు
- సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
- ప్రోగ్రామింగ్ STM32
మునుపటి వ్యాసంలో STM32 ఉపయోగించి ADC మార్పిడి గురించి చూశాము. ఈ ట్యుటోరియల్లో, మేము STM32 లోని PWM (పల్స్ వెడల్పు మాడ్యులేషన్) గురించి నేర్చుకుంటాము మరియు PWM టెక్నిక్ ఉపయోగించి LED యొక్క ప్రకాశం లేదా DC అభిమాని వేగాన్ని ఎలా నియంత్రించగలం.
సిగ్నల్లో రెండు రకాలు ఉన్నాయని మాకు తెలుసు: అనలాగ్ మరియు డిజిటల్. అనలాగ్ సిగ్నల్స్ (3V, 1V… etc) వంటి వోల్టేజ్లను కలిగి ఉంటాయి మరియు డిజిటల్ సిగ్నల్స్ (1 'మరియు 0 లు) కలిగి ఉంటాయి. సెన్సార్ల ఉత్పాదనలు అనలాగ్ సిగ్నల్స్ మరియు ఈ అనలాగ్ సిగ్నల్స్ ADC ని ఉపయోగించి డిజిటల్ గా మార్చబడతాయి, ఎందుకంటే మైక్రోకంట్రోలర్లు డిజిటల్ ను మాత్రమే అర్థం చేసుకుంటారు. ఆ ADC విలువలను ప్రాసెస్ చేసిన తరువాత, అనలాగ్ పరికరాలను నడపడానికి అవుట్పుట్ను అనలాగ్ రూపంలోకి మార్చాలి. దాని కోసం మేము పిడబ్ల్యుఎం, డిజిటల్ టు అనలాగ్ (డిఎసి) కన్వర్టర్లు వంటి కొన్ని పద్ధతులను ఉపయోగిస్తాము.
పిడబ్ల్యుఎం (పల్స్ విత్ మాడ్యులేషన్) అంటే ఏమిటి?
మోటారు వేగాన్ని నియంత్రించడం, దారితీసిన ప్రకాశం వంటి డిజిటల్ విలువను ఉపయోగించి అనలాగ్ పరికరాలను నియంత్రించడానికి PWM ఒక మార్గం. అనలాగ్ సిగ్నల్పై మోటారు మరియు దారితీసిన పనులు మనకు తెలుసు. కానీ పిడబ్ల్యుఎం స్వచ్ఛమైన అనలాగ్ అవుట్పుట్ను అందించదు, పిడబ్ల్యుఎం చిన్న పప్పుల ద్వారా తయారైన అనలాగ్ సిగ్నల్ లాగా కనిపిస్తుంది, ఇది విధి చక్రం ద్వారా అందించబడుతుంది.
PWM యొక్క విధి చక్రం
PWM సిగ్నల్ HIGH (సమయానికి) గా మిగిలి ఉన్న సమయాన్ని డ్యూటీ సైకిల్ అంటారు. సిగ్నల్ ఎల్లప్పుడూ ఆన్లో ఉంటే అది 100% డ్యూటీ సైకిల్లో ఉంటుంది మరియు ఇది ఎల్లప్పుడూ ఆఫ్లో ఉంటే అది 0% డ్యూటీ సైకిల్.
డ్యూటీ సైకిల్ = సమయం ఆన్ చేయండి / (సమయం ఆన్ చేయండి + సమయం ఆఫ్ చేయండి)
STM32 లో PWM
STM32F103C8 లో 15 PWM పిన్స్ మరియు 10 ADC పిన్స్ ఉన్నాయి. 7 టైమర్లు ఉన్నాయి మరియు ప్రతి పిడబ్ల్యుఎం అవుట్పుట్ 4 టైమర్లకు అనుసంధానించబడిన ఛానెల్ ద్వారా అందించబడుతుంది. దీనికి 16-బిట్ పిడబ్ల్యుఎం రిజల్యూషన్ (2 16) ఉంది, అంటే కౌంటర్లు మరియు వేరియబుల్స్ 65535 వరకు పెద్దవిగా ఉంటాయి. 72 మెగాహెర్ట్జ్ క్లాక్ రేట్తో, పిడబ్ల్యుఎం అవుట్పుట్ గరిష్టంగా ఒక మిల్లీసెకన్ల వ్యవధిని కలిగి ఉంటుంది.
- కాబట్టి 65535 విలువ LED యొక్క పూర్తి ప్రకాశాన్ని మరియు DC ఫ్యాన్ యొక్క పూర్తి స్పీడ్ను ఇస్తుంది (100% డ్యూటీ సైకిల్)
- అదేవిధంగా 32767 విలువ DC ఫ్యాన్ (50% డ్యూటీ సైకిల్) యొక్క LED మరియు హాఫ్ స్పీడ్ యొక్క HALF BRIGHTNESS ను ఇస్తుంది.
- మరియు 13107 విలువ (20%) ప్రకాశం మరియు (20%) స్పీడ్ (20% డ్యూటీ సైకిల్) ఇస్తుంది
ఈ ట్యుటోరియల్లో, పిడబ్ల్యుఎం టెక్నిక్ ద్వారా ఎల్ఇడి ప్రకాశం మరియు డిసి ఫ్యాన్ యొక్క వేగాన్ని మార్చడానికి మేము పొటెన్షియోమీటర్ మరియు ఎస్టిఎమ్ 32 ని ఉపయోగిస్తున్నాము. ADC విలువ (0-4095) మరియు అవుట్పుట్ (0-65535) అయిన సవరించిన వేరియబుల్ (PWM విలువ) ను ప్రదర్శించడానికి 16x2 LCD ఉపయోగించబడుతుంది.
ఇతర మైక్రోకంట్రోలర్తో కొన్ని PWM ఉదాహరణలు ఇక్కడ ఉన్నాయి:
- MPLAB మరియు XC8 తో PIC మైక్రోకంట్రోలర్ ఉపయోగించి PWM ను ఉత్పత్తి చేస్తుంది
- రాస్ప్బెర్రీ పైతో సర్వో మోటార్ కంట్రోల్
- పిడబ్ల్యుఎం ఉపయోగించి ఆర్డునో బేస్డ్ ఎల్ఈడి డిమ్మర్
- MSP430G2 ఉపయోగించి పల్స్ వెడల్పు మాడ్యులేషన్ (PWM)
పిడబ్ల్యుఎం సంబంధిత ప్రాజెక్టులన్నింటినీ ఇక్కడ తనిఖీ చేయండి.
భాగాలు అవసరం
- STM32F103C8
- DC అభిమాని
- ULN2003 మోటార్ డ్రైవర్ IC
- LED (RED)
- LCD (16x2)
- పొటెన్టోమీటర్
- బ్రెడ్బోర్డ్
- బ్యాటరీ 9 వి
- జంపర్ వైర్లు
DC అభిమాని: ఇక్కడ ఉపయోగించిన DC అభిమాని పాత PC నుండి BLDC అభిమాని.ఇది బాహ్య సరఫరా అవసరం కాబట్టి మేము 9V dc బ్యాటరీని ఉపయోగిస్తున్నాము.
ULN2003 మోటార్ డ్రైవర్ IC: మోటారు ఏక దిశలో ఉన్నందున మోటారును ఒక దిశలో నడపడానికి ఇది ఉపయోగించబడుతుంది మరియు అభిమాని కోసం బాహ్య శక్తి కూడా అవసరం. ULN2003 ఆధారిత మోటార్ డ్రైవర్ సర్క్యూట్ గురించి ఇక్కడ మరింత తెలుసుకోండి. ULN2003 యొక్క పిక్ రేఖాచిత్రం క్రింద ఉంది:
పిన్స్ (IN1 నుండి IN7) ఇన్పుట్ పిన్స్ మరియు (OUT 1 నుండి OUT 7) సంబంధిత అవుట్పుట్ పిన్స్. COM ఇవ్వబడుతుంది అవుట్పుట్ పరికరాలకు అవసరమైన పాజిటివ్ సోర్స్ వోల్టేజ్.
LED: RED రంగు లెడ్ ఉపయోగించబడుతుంది, ఇది RED కాంతిని విడుదల చేస్తుంది. ఏదైనా రంగులు ఉపయోగించవచ్చు.
పొటెన్టోమీటర్లు: రెండు పొటెన్షియోమీటర్లను ఉపయోగిస్తారు, ఒకటి ADC కి అనలాగ్ ఇన్పుట్ కోసం వోల్టేజ్ డివైడర్ కోసం మరియు మరొకటి లెడ్ యొక్క ప్రకాశాన్ని నియంత్రించడానికి.
STM32 యొక్క పిన్ వివరాలు
పిడబ్ల్యుఎం పిన్స్ వేవ్ ఫార్మాట్ (~) లో సూచించబడటం మనం చూడగలిగినట్లుగా, అలాంటి 15 పిన్స్ ఉన్నాయి, ఎడిసి పిన్స్ ఆకుపచ్చ రంగులో సూచించబడతాయి, అనలాగ్ ఇన్పుట్లకు ఉపయోగించే 10 ఎడిసి పిన్స్ ఉన్నాయి.
సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
వివిధ భాగాలతో STM32 యొక్క కనెక్షన్లు క్రింద వివరించబడ్డాయి:
అనలాగ్ ఇన్పుట్ (ADC) తో STM32
సర్క్యూట్ యొక్క ఎడమ వైపున ఉన్న పొటెన్షియోమీటర్ 3.3V పిన్ నుండి వోల్టేజ్ను నియంత్రించే వోల్టేజ్ రెగ్యులేటర్గా ఉపయోగించబడుతుంది. పొటెన్షియోమీటర్ నుండి పొటెన్టోమీటర్ యొక్క సెంటర్ పిన్ STM32 యొక్క ADC పిన్ (PA4) తో అనుసంధానించబడి ఉంది.
LED తో STM32
STM32 PWM అవుట్పుట్ పిన్ (PA9) సిరీస్ రెసిస్టర్ మరియు కెపాసిటర్ ద్వారా LED యొక్క సానుకూల పిన్తో అనుసంధానించబడి ఉంది.
రెసిస్టర్ మరియు కెపాసిటర్తో LED
PWM పిన్ నుండి నేరుగా ఉత్పత్తి చేయబడినప్పుడు అనలాగ్ అవుట్పుట్ స్వచ్ఛంగా లేనందున PWM అవుట్పుట్ నుండి సరైన అనలాగ్ తరంగాన్ని ఉత్పత్తి చేయడానికి సిరీస్లోని ఒక రెసిస్టర్ మరియు సమాంతరంగా ఒక కెపాసిటర్ LED తో అనుసంధానించబడి ఉన్నాయి.
అభిమానితో ULN2003 & ULN2003 తో STM32
STM32 PWM అవుట్పుట్ పిన్ (PA8) ULN2003 IC యొక్క ఇన్పుట్ పిన్ (IN1) తో అనుసంధానించబడి ఉంది మరియు ULN2003 యొక్క సంబంధిత అవుట్పుట్ పిన్ (OUT1) DC FAN యొక్క ప్రతికూల వైర్తో అనుసంధానించబడి ఉంది.
DC అభిమాని యొక్క పాజిటివ్ పిన్ ULN2003 IC యొక్క COM పిన్తో అనుసంధానించబడి ఉంది మరియు బాహ్య బ్యాటరీ (9V DC) కూడా ULN2003 IC యొక్క అదే COM పిన్తో అనుసంధానించబడి ఉంది. ULN2003 యొక్క GND పిన్ STM32 యొక్క GND పిన్తో అనుసంధానించబడి ఉంది మరియు బ్యాటరీ నెగటివ్ అదే GND పిన్తో అనుసంధానించబడి ఉంది.
LCD తో STM32 (16x2)
ఎల్సిడి పిన్ నం |
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 నెగటివ్ |
గ్రౌండ్ (జి) |
LCD డిస్ప్లే యొక్క విరుద్ధతను నియంత్రించడానికి కుడి వైపున ఉన్న పొటెన్టోమీటర్ ఉపయోగించబడుతుంది. పై పట్టిక LCD మరియు STM32 మధ్య కనెక్షన్ను చూపుతుంది.
ప్రోగ్రామింగ్ STM32
మునుపటి ట్యుటోరియల్ మాదిరిగానే, మేము STM32F103C8 ను FTDI ప్రోగ్రామర్ ఉపయోగించకుండా USB పోర్ట్ ద్వారా Arduino IDE తో ప్రోగ్రామ్ చేసాము. Arduino IDE తో STM32 ప్రోగ్రామింగ్ గురించి తెలుసుకోవడానికి లింక్ను అనుసరించండి. మేము ఆర్డునోలో మాదిరిగానే ప్రోగ్రామింగ్ను కొనసాగించవచ్చు. పూర్తి కోడ్ చివరిలో ఇవ్వబడుతుంది.
ఈ కోడింగ్లో మేము ఎడమ పొటెన్షియోమీటర్ యొక్క సెంటర్ పిన్తో అనుసంధానించబడిన ADC పిన్ (PA4) నుండి ఇన్పుట్ అనలాగ్ విలువను తీసుకోబోతున్నాము మరియు అనలాగ్ విలువను (0-3.3V) డిజిటల్ లేదా పూర్ణాంక ఆకృతిగా (0-4095) మారుస్తాము. ఈ డిజిటల్ విలువ ఎల్ఈడీ ప్రకాశం మరియు డిసి ఫ్యాన్ యొక్క వేగాన్ని నియంత్రించడానికి పిడబ్ల్యుఎం అవుట్పుట్గా అందించబడుతుంది. ADC మరియు మ్యాప్డ్ విలువను (PWM అవుట్పుట్ విలువ) ప్రదర్శించడానికి 16x2 LCD ఉపయోగించబడుతుంది.
మొదట మనం ఎల్సిడి హెడర్ ఫైల్ను చేర్చాలి, ఎల్సిడి పిన్లను డిక్లేర్ చేయాలి మరియు ఈ క్రింది కోడ్ను ఉపయోగించి వాటిని ప్రారంభించాలి. STM32 తో LCD ని ఇంటర్ఫేసింగ్ గురించి మరింత తెలుసుకోండి.
# చేర్చండి
తరువాత STM32 యొక్క పిన్ను ఉపయోగించి పిన్ పేర్లను ప్రకటించండి మరియు నిర్వచించండి
const int అనలాగిన్పుట్ = PA4; // పొటెన్టోమీటర్ నుండి ఇన్పుట్ const int led led = PA9; // LED అవుట్పుట్ const int fan = PA8; // అభిమాని అవుట్పుట్
ఇప్పుడు సెటప్ () లోపల, మేము కొన్ని సందేశాలను ప్రదర్శించి, కొన్ని సెకన్ల తర్వాత వాటిని క్లియర్ చేసి, INPUT పిన్ మరియు PWM అవుట్పుట్ పిన్లను పేర్కొనాలి
lcd.begin (16,2); // ఎల్సిడిని సిద్ధం చేసుకోవడం lcd.clear (); // LCD lcd.setCursor ని క్లియర్ చేస్తుంది (0,0); // వరుస 0 మరియు కాలమ్ lcd.print వద్ద కర్సర్ను సెట్ చేస్తుంది ("CIRCUIT DIGEST"); // సర్క్యూట్ డైజెస్ట్ lcd.setCursor (0,1) ను ప్రదర్శిస్తుంది; // కాలమ్ 0 మరియు అడ్డు వరుస 1 lcd.print వద్ద కర్సర్ను సెట్ చేస్తుంది ("PWM USING STM32"); // STM32 ఆలస్యం (2000) ఉపయోగించి PWM ని ప్రదర్శిస్తుంది ; // ఆలస్యం సమయం lcd.clear (); // LCD పిన్మోడ్ను క్లియర్ చేస్తుంది (అనలాగిన్పుట్, INPUT); // పిన్ మోడ్ అనలాగిన్పుట్ను INPUT పిన్మోడ్ ( లీడ్, పిడబ్ల్యుఎం) గా సెట్ చేయండి ; // సెట్ పిన్ మోడ్ PWM అవుట్పుట్ పిన్మోడ్ (అభిమాని, PWM) గా దారితీసింది ; // పిన్ మోడ్ అభిమానిని పిడబ్ల్యుఎం అవుట్పుట్గా సెట్ చేయండి
అనలాగ్ ఇన్పుట్ పిన్ (PA4) పిన్మోడ్ (అనలాగిన్పుట్, INPUT) ద్వారా INPUT గా సెట్ చేయబడింది , LED పిన్ PWM అవుట్పుట్గా పిన్మోడ్ (లీడ్, PWM) ద్వారా సెట్ చేయబడింది మరియు ఫ్యాన్ పిన్ PWM అవుట్పుట్గా పిన్మోడ్ (ఫ్యాన్, PWM) ద్వారా సెట్ చేయబడింది. ఇక్కడ PWM అవుట్పుట్ పిన్స్ LED (PA9) మరియు ఫ్యాన్ (PA8) లకు అనుసంధానించబడి ఉన్నాయి.
నెక్ట్స్ గర్జన లూప్ () ఫంక్షన్, మేము ADC పిన్ (PA4) నుండి అనలాగ్ సిగ్నల్ చదివి ఆ క్రింద కోడ్ ఉపయోగించి డిజిటల్ పూర్ణాంక విలువలు (0-4095) మార్చుతుంది అనలాగ్ వోల్టేజ్ ఒక పూర్ణాంకం వేరియబుల్ నిల్వ పూర్ణాంకానికి valueadc = analogRead (analoginput);
ఇక్కడ గమనించవలసిన ముఖ్యమైన విషయం ఏమిటంటే, STM32 యొక్క ఛానెల్లు 16-బిట్ రిజల్యూషన్ (0-65535) కలిగి ఉన్న PWM పిన్లు, కాబట్టి మేము దిగువ వంటి మ్యాప్ ఫంక్షన్ను ఉపయోగించి అనలాగ్ విలువలతో మ్యాప్ చేయాలి
int result = map (valueadc, 0, 4095, 0, 65535).
మ్యాపింగ్ ఉపయోగించకపోతే, పొటెన్షియోమీటర్ను మార్చడం ద్వారా మనకు పూర్తి అభిమాని వేగం లేదా LED యొక్క పూర్తి ప్రకాశం లభించదు.
అప్పుడు మేము pwmWrite (అభిమాని, ఫలితం ) ఫంక్షన్లను ఉపయోగించి pwmWrite (led, result) మరియు PWM అవుట్పుట్ను అభిమానికి LED ద్వారా PWM అవుట్పుట్ను LED కి వ్రాస్తాము .
చివరగా మేము ఈ క్రింది ఆదేశాలను ఉపయోగించి LCD డిస్ప్లేలో అనలాగ్ ఇన్పుట్ విలువ (ADC విలువ) మరియు అవుట్పుట్ విలువలు (PWM విలువలు) ప్రదర్శిస్తాము
lcd.setCursor (0,0); // వరుస 0 మరియు కాలమ్ lcd.print ("ADC విలువ =") వద్ద కర్సర్ను సెట్ చేస్తుంది ; // “” lcd.print (valueadc) అనే పదాలను ముద్రిస్తుంది ; // విలువలను ప్రదర్శిస్తుంది lcd.setCursor (0,1); // కాలమ్ 0 మరియు అడ్డు వరుస 1 lcd.print ("అవుట్పుట్ =") వద్ద కర్సర్ను సెట్ చేస్తుంది ; // "" lcd.print (ఫలితం) లోని పదాలను ముద్రిస్తుంది ; // విలువ ఫలితాన్ని ప్రదర్శిస్తుంది
ప్రదర్శనతో పూర్తి కోడ్ వీడియో క్రింద ఇవ్వబడింది.