- పిడబ్ల్యుఎం సిగ్నల్ అంటే ఏమిటి?
- PIC16F877A ఉపయోగించి PWM:
- PWM సంకేతాలను రూపొందించడానికి PIC ను ప్రోగ్రామింగ్ చేయడం:
- స్కీమాటిక్స్ మరియు టెస్టింగ్:
- హార్డ్వేర్పై పనిచేస్తోంది:
MPLAB మరియు XC8 ఉపయోగించి PIC మైక్రోకంట్రోలర్లను నేర్చుకోవడం మా 10 వ ట్యుటోరియల్. ఇప్పటి వరకు, పిఐసితో ఎల్ఇడి బ్లింక్, పిఐసిలో టైమర్స్, ఎల్సిడిని ఇంటర్ఫేసింగ్, 7-సెగ్మెంట్ ఇంటర్ఫేసింగ్, పిఐసిని ఉపయోగించి ఎడిసి వంటి అనేక ప్రాథమిక ట్యుటోరియల్లను మేము కవర్ చేసాము. మీరు సంపూర్ణ అనుభవశూన్యుడు అయితే, దయచేసి ఇక్కడ పిఐసి ట్యుటోరియల్స్ యొక్క పూర్తి జాబితాను సందర్శించండి మరియు నేర్చుకోవడం ప్రారంభించండి.
ఈ ట్యుటోరియల్లో, PIC PIC16F877A ఉపయోగించి PWM సిగ్నల్లను ఎలా ఉత్పత్తి చేయాలో నేర్చుకుంటాము. మా PIC MCU లో కంపేర్ క్యాప్చర్ మాడ్యూల్ (CCP) అనే ప్రత్యేక మాడ్యూల్ ఉంది, దీనిని PWM సిగ్నల్స్ ఉత్పత్తి చేయడానికి ఉపయోగించవచ్చు. ఇక్కడ, మేము 0 k నుండి 100% వరకు వేరియబుల్ డ్యూటీ సైకిల్తో 5 kHz యొక్క PWM ను ఉత్పత్తి చేస్తాము. మేము పొటెన్షియోమీటర్ను ఉపయోగిస్తున్న విధి చక్రంలో తేడా ఉండటానికి, అందువల్ల పిడబ్ల్యుఎమ్తో ప్రారంభించే ముందు ఎడిసి ట్యుటోరియల్ నేర్చుకోవడం మంచిది. పిడబ్ల్యుఎం మాడ్యూల్ దాని ఫ్రీక్వెన్సీని సెట్ చేయడానికి టైమర్లను కూడా ఉపయోగిస్తుంది, అందువల్ల ఇక్కడ టైమర్లను ఎలా ఉపయోగించాలో ముందుగా తెలుసుకోండి. ఇంకా, ఈ ట్యుటోరియల్లో పిడబ్ల్యుఎం విలువలను అనలాగ్ వోల్టేజ్గా మార్చడానికి ఆర్సి సర్క్యూట్ మరియు ఎల్ఇడిని ఉపయోగిస్తాము మరియు ఎల్ఇడి కాంతిని మసకబారడానికి ఉపయోగిస్తాము.
పిడబ్ల్యుఎం సిగ్నల్ అంటే ఏమిటి?
పల్స్ వెడల్పు మాడ్యులేషన్ (పిడబ్ల్యుఎం) అనేది డిజిటల్ సిగ్నల్, ఇది సాధారణంగా కంట్రోల్ సర్క్యూట్లో ఉపయోగించబడుతుంది. ఈ సిగ్నల్ ముందే నిర్వచించిన సమయం మరియు వేగంతో అధిక (5 వి) మరియు తక్కువ (0 వి) గా సెట్ చేయబడింది. సిగ్నల్ ఎక్కువగా ఉండే సమయాన్ని “ఆన్ టైమ్” అని పిలుస్తారు మరియు సిగ్నల్ తక్కువగా ఉండే సమయాన్ని “ఆఫ్ టైమ్” అంటారు. క్రింద చర్చించినట్లు PWM కోసం రెండు ముఖ్యమైన పారామితులు ఉన్నాయి:
PWM యొక్క విధి చక్రం:
PWM సిగ్నల్ HIGH (సమయానికి) గా మిగిలి ఉన్న సమయాన్ని డ్యూటీ సైకిల్ అంటారు. సిగ్నల్ ఎల్లప్పుడూ ఆన్లో ఉంటే అది 100% డ్యూటీ సైకిల్లో ఉంటుంది మరియు ఇది ఎల్లప్పుడూ ఆఫ్లో ఉంటే అది 0% డ్యూటీ సైకిల్.
డ్యూటీ సైకిల్ = సమయం ఆన్ చేయండి / (సమయం ఆన్ చేయండి + సమయం ఆఫ్ చేయండి)
PWM యొక్క ఫ్రీక్వెన్సీ:
PWM సిగ్నల్ యొక్క ఫ్రీక్వెన్సీ ఒక PWM ఒక కాలాన్ని ఎంత వేగంగా పూర్తి చేస్తుందో నిర్ణయిస్తుంది. పై చిత్రంలో చూపిన విధంగా ఒక కాలం PWM సిగ్నల్ యొక్క ఆన్ మరియు ఆఫ్ పూర్తయింది. మా ట్యుటోరియల్లో మనం 5KHz ఫ్రీక్వెన్సీని సెట్ చేస్తాము.
PIC16F877A ఉపయోగించి PWM:
CCP (పోల్చండి క్యాప్చర్ PWM) మాడ్యూల్ ఉపయోగించి PWM సిగ్నల్స్ మా PIC మైక్రోకంట్రోలర్లో ఉత్పత్తి చేయబడతాయి. మా పిడబ్ల్యుఎం సిగ్నల్ యొక్క రిజల్యూషన్ 10-బిట్, అంటే 0 విలువకు 0% విధి చక్రం ఉంటుంది మరియు 1024 (2 ^ 10) విలువకు 100% విధి చక్రం ఉంటుంది. మా పిఐసి ఎంసియు (సిసిపి 1 మరియు సిసిపి 2) లో రెండు సిసిపి మాడ్యూల్స్ ఉన్నాయి, దీని అర్థం మనం రెండు వేర్వేరు పిన్స్ (పిన్ 17 మరియు 16) లలో ఒకేసారి రెండు పిడబ్ల్యుఎం సిగ్నల్స్ ను ఉత్పత్తి చేయగలము, మా ట్యుటోరియల్ లో పిన్ 17 పై పిడబ్ల్యుఎం సిగ్నల్స్ ఉత్పత్తి చేయడానికి సిసిపి 1 ను ఉపయోగిస్తున్నాము.
మా PIC MCU ని ఉపయోగించి PWM సిగ్నల్స్ ఉత్పత్తి చేయడానికి క్రింది రిజిస్టర్లు ఉపయోగించబడతాయి:
- CCP1CON (CCP1 నియంత్రణ రిజిస్టర్)
- T2CON (టైమర్ 2 కంట్రోల్ రిజిస్టర్)
- PR2 (టైమర్ 2 మాడ్యూల్స్ పీరియడ్ రిజిస్టర్)
- CCPR1L (CCP రిజిస్టర్ 1 తక్కువ)
PWM సంకేతాలను రూపొందించడానికి PIC ను ప్రోగ్రామింగ్ చేయడం:
మా ప్రోగ్రామ్లో మేము ఒక పొటెన్షియోమీటర్ నుండి 0-5v యొక్క అనలాగ్ వోల్టేజ్ను చదివి, మా ADC మాడ్యూల్ ఉపయోగించి 0-1024 కు మ్యాప్ చేస్తాము. అప్పుడు మేము 5000Hz ఫ్రీక్వెన్సీతో PWM సిగ్నల్ను ఉత్పత్తి చేస్తాము మరియు ఇన్పుట్ అనలాగ్ వోల్టేజ్ ఆధారంగా దాని విధి చక్రంలో మారుతూ ఉంటాము. అంటే 0-1024 0% -100% డ్యూటీ సైకిల్గా మార్చబడుతుంది. ఈ ట్యుటోరియల్ మీరు ఇప్పటికే పిఐసిలో ఎడిసిని ఉపయోగించడం నేర్చుకున్నారని, ఇక్కడ నుండి చదవండి, ఎందుకంటే మేము ఈ ట్యుటోరియల్లో దాని గురించి వివరాలను దాటవేస్తాము.
కాబట్టి, కాన్ఫిగరేషన్ బిట్స్ సెట్ చేయబడి, అనలాగ్ విలువను చదవడానికి ప్రోగ్రామ్ వ్రాసిన తర్వాత, మేము PWM తో కొనసాగవచ్చు.
PWM ఆపరేషన్ కోసం CCP మాడ్యూల్ను కాన్ఫిగర్ చేసేటప్పుడు ఈ క్రింది చర్యలు తీసుకోవాలి:
- పిఆర్ 2 రిజిస్టర్కు రాయడం ద్వారా పిడబ్ల్యుఎం కాలాన్ని సెట్ చేయండి.
- CCPR1L రిజిస్టర్ మరియు CCP1CON <5: 4> బిట్లకు వ్రాసి PWM విధి చక్రం సెట్ చేయండి.
- TRISC <2> బిట్ను క్లియర్ చేయడం ద్వారా CCP1 పిన్ని అవుట్పుట్ చేయండి.
- TMR2 ప్రీస్కేల్ విలువను సెట్ చేయండి మరియు T2CON కు వ్రాయడం ద్వారా టైమర్ 2 ని ప్రారంభించండి.
- PWM ఆపరేషన్ కోసం CCP1 మాడ్యూల్ను కాన్ఫిగర్ చేయండి.
పిడబ్ల్యుఎం సిగ్నల్స్ ఉత్పత్తి చేయడానికి ఈ ప్రోగ్రామ్లో రెండు ముఖ్యమైన విధులు ఉన్నాయి. ఒకటి PWM_Initialize () ఫంక్షన్, ఇది PWM మాడ్యూల్ను సెటప్ చేయడానికి అవసరమైన రిజిస్టర్లను ప్రారంభించి, ఆపై PWM పనిచేయవలసిన ఫ్రీక్వెన్సీని సెట్ చేస్తుంది, మరొక ఫంక్షన్ PWM_Duty () ఫంక్షన్, ఇది PWM సిగ్నల్ యొక్క విధి చక్రం సెట్ చేస్తుంది అవసరమైన రిజిస్టర్లు.
PWM_Initialize () {PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1; // డేటాషీట్ ఉపయోగించి PR2 సూత్రాలను అమర్చుట // 5KHZ CCP1M3 = 1 లో PWM పని చేస్తుంది; CCP1M2 = 1; // CCP1 మాడ్యూల్ T2CKPS0 = 1; T2CKPS1 = 0; TMR2ON = 1; // టైమర్ మాడ్యూల్ను కాన్ఫిగర్ చేయండి TRISC2 = 0; // సి పై పోర్ట్ పిన్ను అవుట్పుట్గా చేయండి}
పై ఫంక్షన్ PWM ప్రారంభ ఫంక్షన్, ఈ ఫంక్షన్లో CCP1 మాడ్యూల్ బిట్ CCP1M3 మరియు CCP1M2 ను అధికంగా చేయడం ద్వారా PWM ను ఉపయోగించడానికి సెట్ చేయబడింది.
టైమర్ మాడ్యూల్ యొక్క ప్రీస్కాలర్ బిట్ T2CKPS0 ను అధికంగా మరియు T2CKPS1 ను బిట్ TMR2ON టైమర్ ప్రారంభించడానికి సెట్ చేయడం ద్వారా సెట్ చేయబడింది.
ఇప్పుడు, మేము PWM సిగ్నల్ యొక్క ఫ్రీక్వెన్సీని సెట్ చేయాలి. ఫ్రీక్వెన్సీ యొక్క విలువను PR2 రిజిస్టర్కు వ్రాయాలి. దిగువ సూత్రాలను ఉపయోగించి కావలసిన ఫ్రీక్వెన్సీని సెట్ చేయవచ్చు
PWM కాలం = * 4 * TOSC * (TMR2 ప్రీస్కేల్ విలువ)
పిఆర్ 2 పొందడానికి ఈ సూత్రాలను తిరిగి అమర్చడం ఇస్తుంది
పిఆర్ 2 = (కాలం / (4 * టాస్క్ * టిఎంఆర్ 2 ప్రీస్కేల్)) - 1
కాలం = (1 / PWM_freq) మరియు Tosc = (1 / _XTAL_FREQ) అని మాకు తెలుసు. అందువలన…..
PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1;
ఫ్రీక్వెన్సీని సెట్ చేసిన తర్వాత ఈ ఫంక్షన్ను మళ్లీ పిలవవలసిన అవసరం లేదు తప్ప మనం ఫ్రీక్వెన్సీని మార్చాలి. మా ట్యుటోరియల్లో నేను PWM_freq = 5000 ని కేటాయించాను ; తద్వారా మన PWM సిగ్నల్ కోసం 5 KHz ఆపరేటింగ్ ఫ్రీక్వెన్సీని పొందవచ్చు.
ఇప్పుడు క్రింది ఫంక్షన్ను ఉపయోగించి PWM యొక్క విధి చక్రం సెట్ చేద్దాం
PWM_Duty (సంతకం చేయని Int డ్యూటీ) {if (డ్యూటీ <1023) {డ్యూటీ = ((ఫ్లోట్) డ్యూటీ / 1023) * (_ XTAL_FREQ / (PWM_freq * TMR2PRESCALE)); // తగ్గించేటప్పుడు // డ్యూటీ = (((ఫ్లోట్) డ్యూటీ / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE); CCP1X = విధి & 1; // 1 వ బిట్ CCP1Y = డ్యూటీ & 2; // 0 వ బిట్ను నిల్వ చేయండి CCPR1L = డ్యూటీ >> 2; // రిమైనింగ్ 8 బిట్ను నిల్వ చేయండి}}
మా పిడబ్ల్యుఎం సిగ్నల్ 10-బిట్ రిజల్యూషన్ కలిగి ఉంది, అందువల్ల మా పిఐసికి 8-బిట్ డేటా లైన్లు మాత్రమే ఉన్నందున ఈ విలువను ఒకే రిజిస్టర్లో నిల్వ చేయలేము. కాబట్టి చివరి రెండు ఎల్ఎస్బిని నిల్వ చేయడానికి మరియు మిగిలిన 8 బిట్లను CCPR1L రిజిస్టర్లో నిల్వ చేయడానికి CCP1CON <5: 4> (CCP1X మరియు CCP1Y) యొక్క ఇతర రెండు బిట్లను మేము ఉపయోగిస్తాము.
క్రింది సూత్రాలను ఉపయోగించి PWM విధి చక్రం సమయాన్ని లెక్కించవచ్చు:
PWM డ్యూటీ సైకిల్ = (CCPRIL: CCP1CON <5: 4>) * Tosc * (TMR2 Prescale Value)
CCPR1L మరియు CCP1CON విలువను పొందడానికి ఈ సూత్రాలను తిరిగి అమర్చడం ఇస్తుంది:
CCPRIL: CCP1Con <5: 4> = PWM డ్యూటీ సైకిల్ / (Tosc * TMR2 ప్రీస్కేల్ విలువ)
మా ADC యొక్క విలువ 0-1024 అవుతుంది, అది 0% -100% లో ఉండాలి, అందువల్ల PWM డ్యూటీ సైకిల్ = డ్యూటీ / 1023. ఈ విధి చక్రంను కాల వ్యవధిగా మార్చడానికి మనం దానిని కాలంతో (1 / PWM_freq) గుణించాలి.
Tosc = (1 / PWM_freq) అని కూడా మనకు తెలుసు, అందుకే..
డ్యూటీ = (((ఫ్లోట్) డ్యూటీ / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE);
పై సమీకరణాన్ని పరిష్కరించడం మనకు ఇస్తుంది:
డ్యూటీ = ((ఫ్లోట్) డ్యూటీ / 1023) * (_XTAL_FREQ / (PWM_freq * TMR2PRESCALE));
వివరణాత్మక వీడియోతో పాటు దిగువ కోడ్ విభాగంలో మీరు పూర్తి ప్రోగ్రామ్ను తనిఖీ చేయవచ్చు.
స్కీమాటిక్స్ మరియు టెస్టింగ్:
ఎప్పటిలాగే ప్రోటీయస్ సిమ్యులేషన్ ఉపయోగించి అవుట్పుట్ను ధృవీకరించండి. సర్క్యూట్లో క్రింద చూపించాం.
0-5 వోల్టేజ్లో తిండికి పొటెన్షియోమీటర్ను 7 వ పిన్కు కనెక్ట్ చేయండి. CCP1 మాడ్యూల్ పిన్ 17 (RC2) తో ఉంది, ఇక్కడ PWM ఉత్పత్తి అవుతుంది, ఇది డిజిటల్ ఓసిల్లోస్కోప్ ఉపయోగించి ధృవీకరించబడుతుంది. దీన్ని వేరియబుల్ వోల్టేజ్గా మార్చడానికి మేము అవుట్పుట్ను స్కోప్ లేకుండా ధృవీకరించడానికి RC- ఫిల్టర్ మరియు LED ని ఉపయోగించాము.
RC- ఫిల్టర్ అంటే ఏమిటి?
ఒక RC ఫిల్టర్ లేదా ఒక తక్కువ పాస్ ఫిల్టర్ అవి రెండు నిష్క్రియాత్మక అంశాలు నిరోధకం మరియు కెపాసిటర్ తో ఒక సాధారణ సర్క్యూట్ ఉంది. ఈ రెండు భాగాలు మా PWM సిగ్నల్ యొక్క ఫ్రీక్వెన్సీని ఫిల్టర్ చేయడానికి మరియు దానిని వేరియబుల్ DC వోల్టేజ్ చేయడానికి ఉపయోగిస్తారు.
మేము సర్క్యూట్ను పరిశీలిస్తే, R యొక్క ఇన్పుట్కు వేరియబుల్ వోల్టేజ్ వర్తించినప్పుడు, కెపాసిటర్ సి ఛార్జ్ చేయడం ప్రారంభమవుతుంది. ఇప్పుడు కెపాసిటర్ యొక్క విలువ ఆధారంగా, కెపాసిటర్ పూర్తిగా ఛార్జ్ కావడానికి కొంత సమయం పడుతుంది, ఒకసారి ఛార్జ్ చేస్తే అది DC కరెంట్ను బ్లాక్ చేస్తుంది (కెపాసిటర్లు బ్లాక్ DC ని గుర్తుంచుకోండి కాని AC ని అనుమతిస్తుంది) అందువల్ల ఇన్పుట్ DC వోల్టేజ్ అవుట్పుట్ అంతటా కనిపిస్తుంది. అధిక పౌన frequency పున్యం PWM (AC సిగ్నల్) కెపాసిటర్ ద్వారా గ్రౌండ్ చేయబడుతుంది. అందువల్ల కెపాసిటర్ అంతటా స్వచ్ఛమైన DC పొందబడుతుంది. ఈ ప్రాజెక్ట్ కోసం 1000Ohm మరియు 1uf విలువ సరైనదని కనుగొనబడింది. R మరియు C యొక్క విలువలను లెక్కించడం బదిలీ ఫంక్షన్ను ఉపయోగించి సర్క్యూట్ విశ్లేషణను కలిగి ఉంటుంది, ఇది ఈ ట్యుటోరియల్ యొక్క పరిధిలో లేదు.
క్రింద చూపిన విధంగా ప్రోగ్రామ్ యొక్క అవుట్పుట్ డిజిటల్ ఓసిల్లోస్కోప్ ఉపయోగించి ధృవీకరించబడుతుంది, పొటెన్షియోమీటర్ మరియు పిడబ్ల్యుఎం యొక్క డ్యూటీ చక్రం మారాలి. వోల్టమీటర్ ఉపయోగించి RC సర్క్యూట్ యొక్క అవుట్పుట్ వోల్టేజ్ను కూడా మనం గమనించవచ్చు. ప్రతిదీ expected హించిన విధంగా పనిచేస్తుంటే మన హార్డ్వేర్తో కొనసాగవచ్చు. పూర్తి ప్రక్రియ కోసం చివరిలో వీడియోను మరింత తనిఖీ చేయండి.
హార్డ్వేర్పై పనిచేస్తోంది:
ప్రాజెక్ట్ యొక్క హార్డ్వేర్ సెటప్ చాలా సులభం, మేము క్రింద చూపిన మా PIC పెర్ఫ్ బోర్డును తిరిగి ఉపయోగించబోతున్నాము.
అనలాగ్ వోల్టేజ్లో తిండికి మనకు పొటెన్షియోమీటర్ కూడా అవసరం, నేను నా కుండకు కొన్ని ఆడ ముగింపు తీగలను అటాచ్ చేసాను (క్రింద చూపబడింది) తద్వారా వాటిని నేరుగా పిఐసి పెర్ఫ్ బోర్డుకు కనెక్ట్ చేయవచ్చు.
చివరగా అవుట్పుట్ను ధృవీకరించడానికి పిడబ్ల్యుఎం సిగ్నల్ ఎలా పనిచేస్తుందో చూడటానికి మాకు ఆర్సి సర్క్యూట్ మరియు ఎల్ఇడి అవసరం, నేను కేవలం ఒక చిన్న పెర్ఫ్ బోర్డ్ను ఉపయోగించాను మరియు ఆర్సి సర్క్యూట్ మరియు ఎల్ఈడీని (ప్రకాశాన్ని నియంత్రించడానికి) క్రింద చూపించాను
మేము ఆడదాన్ని కనెక్ట్ చేసే వైర్లకు సాధారణ ఆడదాన్ని ఉపయోగించవచ్చు మరియు పైన చూపిన స్కీమాటిక్స్ ప్రకారం వాటిని కనెక్ట్ చేయవచ్చు. కనెక్షన్ పూర్తయిన తర్వాత, మా పికిట్ 3 ను ఉపయోగించి ప్రోగ్రామ్ను పిఐసికి అప్లోడ్ చేయండి మరియు మీరు మీ పొటెన్షియోమీటర్ యొక్క ఇన్పుట్ ఆధారంగా వేరియబుల్ వోల్టేజ్ను పొందగలుగుతారు. ఇక్కడ LED యొక్క ప్రకాశాన్ని నియంత్రించడానికి వేరియబుల్ అవుట్పుట్ ఉపయోగించబడుతుంది.
వేరియబుల్ అవుట్పుట్లను కొలిచేందుకు నేను నా మల్టీమీటర్ను ఉపయోగించాను, వివిధ వోల్టేజ్ స్థాయిల కోసం LED యొక్క ప్రకాశం మారడం కూడా మనం గమనించవచ్చు.
POT నుండి అనలాగ్ వోల్టేజ్ చదివి PWM సిగ్నల్స్ గా మార్చడానికి మేము ప్రోగ్రామ్ చేసాము, ఇవి RC ఫిల్టర్ ఉపయోగించి వేరియబుల్ వోల్టేజ్ గా మార్చబడ్డాయి మరియు ఫలితం మా హార్డ్వేర్ ఉపయోగించి ధృవీకరించబడుతుంది. మీకు కొంత సందేహం ఉంటే లేదా ఎక్కడో ఇరుక్కుపోతే దయచేసి క్రింద వ్యాఖ్య విభాగాన్ని ఉపయోగించుకోండి, మీకు సహాయం చేయడానికి మేము సంతోషిస్తాము. పూర్తి పని వీడియో లో పని ఉంది.
ఇతర మైక్రోకంట్రోలర్లపై మా ఇతర PWM ట్యుటోరియల్లను కూడా తనిఖీ చేయండి:
- రాస్ప్బెర్రీ పై పిడబ్ల్యుఎం ట్యుటోరియల్
- ఆర్డునో డ్యూతో పిడబ్ల్యుఎం
- పిడబ్ల్యుఎం ఉపయోగించి ఆర్డునో బేస్డ్ ఎల్ఈడి డిమ్మర్
- ATmega32 మైక్రోకంట్రోలర్ ఉపయోగించి పవర్ LED డిమ్మర్