- AVR మైక్రోకంట్రోలర్ Atmega16 లో PWM పిన్స్
- పిడబ్ల్యుఎం సిగ్నల్ అంటే ఏమిటి?
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం
- PWM కోసం ప్రోగ్రామింగ్ Atmega16
పల్స్ వెడల్పు మాడ్యులేషన్ (పిడబ్ల్యుఎం) అనేది శక్తివంతమైన టెక్నిక్, ఇక్కడ పౌన frequency పున్యాన్ని స్థిరంగా ఉంచడం ద్వారా పల్స్ యొక్క వెడల్పు మార్చబడుతుంది. ఈ సాంకేతికత నేడు అనేక నియంత్రణ వ్యవస్థలలో ఉపయోగించబడింది. పిడబ్ల్యుఎం యొక్క అనువర్తనం పరిమితం కాదు మరియు ఇది మోటారు వేగం నియంత్రణ, కొలత, శక్తి నియంత్రణ మరియు కమ్యూనికేషన్ వంటి విస్తృత శ్రేణి అనువర్తనాలలో ఉపయోగించబడుతుంది. పిడబ్ల్యుఎం సాంకేతికతలో, డిజిటల్ సిగ్నల్స్ ఉపయోగించి అనలాగ్ అవుట్పుట్ సిగ్నల్ను సులభంగా ఉత్పత్తి చేయవచ్చు. ఈ ట్యుటోరియల్ PWM, దాని పరిభాషలను అర్థం చేసుకోవడంలో మీకు సహాయపడుతుంది మరియు మైక్రోకంట్రోలర్ ఉపయోగించి దాన్ని ఎలా అమలు చేయవచ్చు. ఈ ట్యుటోరియల్లో మనం ఎల్ఈడీ యొక్క తీవ్రతను మార్చడం ద్వారా AVR Atmega16 మైక్రోకంట్రోలర్తో PWM ని ప్రదర్శిస్తాము.
PWM యొక్క ప్రాథమికాలను వివరంగా అర్థం చేసుకోవడానికి, దయచేసి వివిధ మైక్రోకంట్రోలర్లతో PWM లోని మా మునుపటి ట్యుటోరియల్లకు వెళ్లండి:
- ARM7-LPC2148 PWM ట్యుటోరియల్: LED యొక్క ప్రకాశాన్ని నియంత్రించడం
- MSP430G2 ఉపయోగించి పల్స్ వెడల్పు మాడ్యులేషన్ (PWM): LED యొక్క ప్రకాశాన్ని నియంత్రించడం
- MPLAB మరియు XC8 తో PIC మైక్రోకంట్రోలర్ ఉపయోగించి PWM ను ఉత్పత్తి చేస్తుంది
- STM32F103C8 లో పల్స్ వెడల్పు మాడ్యులేషన్ (PWM): DC ఫ్యాన్ యొక్క నియంత్రణ వేగం
- PIC మైక్రోకంట్రోలర్ యొక్క GPIO పిన్స్ పై PWM సిగ్నల్స్ ఉత్పత్తి
- రాస్ప్బెర్రీ పై పిడబ్ల్యుఎం ట్యుటోరియల్
AVR మైక్రోకంట్రోలర్ Atmega16 లో PWM పిన్స్
Atmega16 లో నాలుగు అంకితమైన PWM పిన్స్ ఉన్నాయి. ఈ పిన్స్ PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2).
అలాగే Atmega16 రెండు 8-బిట్ టైమర్లు మరియు ఒక 16 బిట్ టైమర్ ఉంది. టైమర్ 0 మరియు టైమర్ 2 8-బిట్ టైమర్లు అయితే టైమర్ 1 16-బిట్ టైమర్. PWM ను ఉత్పత్తి చేయడానికి PWM ను ఉత్పత్తి చేయడానికి టైమర్లను ఉపయోగిస్తున్నందున మనకు టైమర్ల యొక్క అవలోకనం ఉండాలి. ఫ్రీక్వెన్సీ టైమర్ వద్ద నడుస్తున్న సెకనుకు చక్రాల సంఖ్య అని మనకు తెలుసు. కాబట్టి అధిక పౌన frequency పున్యం మాకు వేగంగా టైమర్ ఇస్తుంది. PWM ను ఉత్పత్తి చేయడంలో, వేగవంతమైన PWM ఫ్రీక్వెన్సీ అవుట్పుట్పై చక్కటి నియంత్రణను ఇస్తుంది ఎందుకంటే ఇది కొత్త PWM డ్యూటీ సైకిల్లకు వేగంగా స్పందించగలదు.
ఈ Atmega16 PWM ట్యుటోరియల్లో మనం టైమర్ 2 ని ఉపయోగిస్తాము. మీరు ఏదైనా విధి చక్రం ఎంచుకోవచ్చు. పిడబ్ల్యుఎమ్లో డ్యూటీ సైకిల్ అంటే ఏమిటో మీకు తెలియకపోతే క్లుప్తంగా చర్చిద్దాం.
పిడబ్ల్యుఎం సిగ్నల్ అంటే ఏమిటి?
పల్స్ వెడల్పు మాడ్యులేషన్ (పిడబ్ల్యుఎం) అనేది డిజిటల్ సిగ్నల్, ఇది సాధారణంగా కంట్రోల్ సర్క్యూట్లో ఉపయోగించబడుతుంది. సిగ్నల్ ఎక్కువగా ఉండే సమయాన్ని “ఆన్ టైమ్” అని పిలుస్తారు మరియు సిగ్నల్ తక్కువగా ఉండే సమయాన్ని “ఆఫ్ టైమ్” అంటారు. క్రింద చర్చించినట్లు PWM కోసం రెండు ముఖ్యమైన పారామితులు ఉన్నాయి:
PWM యొక్క విధి చక్రం
PWM సిగ్నల్ HIGH (సమయానికి) గా మిగిలి ఉన్న సమయాన్ని డ్యూటీ సైకిల్ అంటారు.
100ms పల్స్ సిగ్నల్ మాదిరిగా, సిగ్నల్ 50ms కి HIGH మరియు 50ms కి LOW అయితే, పల్స్ సగం సమయం HIGH మరియు సగం సమయం LOW అని అర్థం. కాబట్టి విధి చక్రం 50% అని చెప్పగలను. అదేవిధంగా పల్స్ 25ms HIGH స్థితిలో మరియు 100ms లో 75ms LOW స్థితిలో ఉంటే, అప్పుడు విధి చక్రం 25% ఉంటుంది. మేము అధిక స్థితి యొక్క వ్యవధిని మాత్రమే లెక్కిస్తాము. దృశ్యమాన అవగాహన కోసం మీరు ఈ క్రింది చిత్రాన్ని సూచించవచ్చు. విధి చక్రం యొక్క సూత్రం అప్పుడు,
డ్యూటీ సైకిల్ (%) = సమయం / (సమయం + ఆఫ్ సమయం)
కాబట్టి, విధి చక్రం మార్చడం ద్వారా మనం PWM యొక్క వెడల్పును మార్చవచ్చు, తద్వారా LED ప్రకాశం మారుతుంది. LED యొక్క ప్రకాశాన్ని నియంత్రించడంలో మాకు వేర్వేరు విధి చక్రం యొక్క డెమో ఉంటుంది. ఈ ట్యుటోరియల్ చివరిలో డెమో వీడియోను తనిఖీ చేయండి.
విధి చక్రం ఎంచుకున్న తరువాత, తదుపరి దశ PWM మోడ్ను ఎంచుకుంటుంది. PWM మోడ్ ఎలా పనిచేయాలని మీరు కోరుకుంటున్నారో PWM మోడ్ నిర్దేశిస్తుంది. ప్రధానంగా 3 రకాల పిడబ్ల్యుఎం మోడ్లు ఉన్నాయి. ఇవి క్రింది విధంగా ఉన్నాయి:
- ఫాస్ట్ పిడబ్ల్యుఎం
- దశ సరైన PWM
- దశ మరియు ఫ్రీక్వెన్సీ సరైన PWM
దశ మార్పు పట్టింపు లేని చోట ఫాస్ట్ పిడబ్ల్యుఎం ఉపయోగించబడుతుంది. ఫాస్ట్ పిడబ్ల్యుఎమ్ ఉపయోగించడం ద్వారా, మేము పిడబ్ల్యుఎం విలువలను వేగంగా అవుట్పుట్ చేయవచ్చు. దశ మార్పు మోటారు నియంత్రణ వంటి ఆపరేషన్ను ప్రభావితం చేసే చోట ఫాస్ట్ పిడబ్ల్యుఎం ఉపయోగించబడదు, కాబట్టి అటువంటి అనువర్తనంలో పిడబ్ల్యుఎం యొక్క ఇతర మోడ్లు ఉపయోగించబడతాయి. దశల మార్పు చాలా ప్రభావితం చేయని LED యొక్క ప్రకాశాన్ని మేము నియంత్రిస్తాము కాబట్టి, మేము ఫాస్ట్ PWM మోడ్ను ఉపయోగిస్తాము.
ఇప్పుడు పిడబ్ల్యుఎమ్ను ఉత్పత్తి చేయడానికి మేము అంతర్గత టైమర్ను లెక్కించడానికి నియంత్రిస్తాము మరియు తరువాత ఒక నిర్దిష్ట గణనలో తిరిగి సున్నాకి సెట్ చేస్తాము, కాబట్టి టైమర్ లెక్కించబడుతుంది మరియు తరువాత మళ్లీ మళ్లీ సున్నాకి సెట్ అవుతుంది. ఇది కాలాన్ని నిర్దేశిస్తుంది. పల్స్ను నియంత్రించే అవకాశం ఇప్పుడు మనకు ఉంది, టైమర్లో ఒక నిర్దిష్ట గణన వద్ద పల్స్ ఆన్ అవుతున్నప్పుడు అది పైకి వెళ్తుంది. కౌంటర్ 0 కి తిరిగి వెళ్ళినప్పుడు, అప్పుడు పల్స్ ఆపివేయండి. దీనితో చాలా సౌలభ్యం ఉంది, ఎందుకంటే మీరు ఎల్లప్పుడూ టైమర్ యొక్క గణనను యాక్సెస్ చేయవచ్చు మరియు ఒకే టైమర్తో విభిన్న పప్పులను అందించవచ్చు. మీరు ఒకేసారి బహుళ LED లను నియంత్రించాలనుకున్నప్పుడు ఇది చాలా బాగుంది. ఇప్పుడు PWM కోసం Atmega16 తో ఒక LED ని ఇంటర్ఫేసింగ్ ప్రారంభిద్దాం.
పిడబ్ల్యుఎం సంబంధిత ప్రాజెక్టులన్నింటినీ ఇక్కడ తనిఖీ చేయండి.
భాగాలు అవసరం
- Atmega16 AVR మైక్రోకంట్రోలర్ IC
- 16Mhz క్రిస్టల్ ఓసిలేటర్
- రెండు 100 ఎన్ఎఫ్ కెపాసిటర్లు
- రెండు 22 పిఎఫ్ కెపాసిటర్లు
- నొక్కుడు మీట
- జంపర్ వైర్లు
- బ్రెడ్బోర్డ్
- USBASP v2.0
- 2 లెడ్ (ఏదైనా రంగు)
సర్క్యూట్ రేఖాచిత్రం
మేము PWM కొరకు OC2 ని ఉపయోగిస్తున్నాము అంటే Pin21 (PD7). కాబట్టి Atmega16 యొక్క PD7 పిన్ వద్ద ఒక LED ని కనెక్ట్ చేయండి.
PWM కోసం ప్రోగ్రామింగ్ Atmega16
పూర్తి ప్రోగ్రామ్ క్రింద ఇవ్వబడింది. JTAG మరియు Atmel స్టూడియో ఉపయోగించి Atmega16 లో ప్రోగ్రామ్ను బర్న్ చేయండి మరియు LED లో PWM ప్రభావాన్ని చూడండి. పిడబ్ల్యుఎం యొక్క విధి చక్రం కారణంగా దాని ప్రకాశం నెమ్మదిగా పెరుగుతుంది మరియు తగ్గుతుంది. చివరిలో ఇచ్చిన వీడియోను తనిఖీ చేయండి.
టైమర్ 2 రిజిస్టర్ ఏర్పాటుతో Atmega16 ప్రోగ్రామింగ్ ప్రారంభించండి. టైమర్ 2 రిజిస్టర్ బిట్స్ ఈ క్రింది విధంగా ఉన్నాయి మరియు మేము తదనుగుణంగా బిట్లను సెట్ చేయవచ్చు లేదా రీసెట్ చేయవచ్చు.
ఇప్పుడు మేము టైమర్ 2 యొక్క అన్ని బిట్ల గురించి చర్చిస్తాము కాబట్టి వ్రాతపూర్వక ప్రోగ్రామ్ ఉపయోగించి కావలసిన పిడబ్ల్యుఎమ్ పొందవచ్చు.
టైమర్ 2 రిజిస్టర్లో ప్రధానంగా నాలుగు భాగాలు ఉన్నాయి:
FOC2 (టైమర్ 2 కోసం ఫోర్స్ అవుట్పుట్ పోల్చండి): WGM బిట్స్ PWM కాని మోడ్ను పేర్కొన్నప్పుడు FOC2 బిట్ సెట్ చేయబడింది.
WGM2 (టైమర్ 2 కోసం వేవ్ జనరేషన్ మోడ్): ఈ బిట్స్ కౌంటర్ యొక్క లెక్కింపు క్రమాన్ని, గరిష్ట (TOP) కౌంటర్ విలువకు మూలం మరియు ఏ రకమైన తరంగ రూప తరం ఉపయోగించాలో నియంత్రిస్తాయి.
COM2 (టైమర్ 2 కోసం అవుట్పుట్ మోడ్ను సరిపోల్చండి): ఈ బిట్స్ అవుట్పుట్ ప్రవర్తనను నియంత్రిస్తాయి. పూర్తి బిట్ వివరణ క్రింద వివరించబడింది.
TCCR2 - = (1 <
PWM ఫాస్ట్ మోడ్ను సక్రియం చేయడానికి WGM20 మరియు WGM21 బిట్లను HIGH గా సెట్ చేయండి. WGM వేవ్ఫార్మ్ జనరేషన్ మోడ్ కోసం నిలుస్తుంది. ఎంపిక బిట్స్ క్రింద ఉన్నాయి.
WGM00 |
WGM01 |
టైమర్ 2 మోడ్ ఆపరేషన్ |
0 |
0 |
సాధారణ మోడ్ |
0 |
1 |
CTC (పోలికతో టైమర్ క్లియర్ చేయండి) |
1 |
0 |
పిడబ్ల్యుఎం, ఫేజ్ కరెక్ట్ |
1 |
1 |
ఫాస్ట్ పిడబ్ల్యుఎం మోడ్ |
వేవ్ఫార్మ్ జనరేషన్ మోడ్ గురించి మరిన్ని వివరాల కోసం, మీరు Atmega16 యొక్క అధికారిక డేటాషీట్ను చూడవచ్చు.
TCCR2 - = (1 <
అలాగే మేము ప్రీ-స్కేలింగ్ ఉపయోగించలేదు కాబట్టి క్లాక్ సోర్స్ రిజిస్టర్ను '001' గా సెట్ చేసాము.
గడియారం ఎంపిక బిట్స్ క్రింది విధంగా ఉన్నాయి:
CS22 |
CS21 |
CS20 |
వివరణ |
0 |
0 |
0 |
గడియార మూలం లేదు (టైమర్ / కౌంటర్ ఆగిపోయింది) |
0 |
0 |
1 |
clk T2S / (ప్రెస్కేలింగ్ లేదు) |
0 |
1 |
0 |
Clk T2S / 8 (ప్రెస్కాలర్ నుండి) |
0 |
1 |
1 |
Clk T2S / 32 (ప్రెస్కాలర్ నుండి) |
1 |
0 |
0 |
Clk T2S / 64 (ప్రెస్కాలర్ నుండి) |
1 |
0 |
1 |
Clk T2S / 128 (ప్రెస్కాలర్ నుండి) |
1 |
1 |
0 |
Clk T2S / 256 (ప్రెస్కాలర్ నుండి) |
1 |
1 |
1 |
Clk T2S / 1024 (ప్రెస్కాలర్ నుండి) |
COM21 బిట్ను '1' గా మరియు COM20 ను '0' గా సెట్ చేయడం ద్వారా పోలిక మ్యాచ్లో OC2 క్లియర్ అవుతుంది.
ఫాస్ట్ పిడబ్ల్యుఎం మోడ్ కోసం పోల్చండి అవుట్పుట్ మోడ్ (COM) ఎంపిక ఎంపికలు క్రింద ఇవ్వబడ్డాయి:
COM21 |
COM21 |
వివరణ |
0 |
0 |
సాధారణ పోర్ట్ ఆపరేషన్, OC2 డిస్కనెక్ట్ చేయబడింది. |
0 |
1 |
రిజర్వు చేయబడింది |
1 |
0 |
సరిపోలిక మ్యాచ్లో OC2 ని క్లియర్ చేయండి, TO2 వద్ద OC2 ని సెట్ చేయండి |
1 |
1 |
పోలిక మ్యాచ్లో OC2 ని సెట్ చేయండి, TOP వద్ద OC2 ని క్లియర్ చేయండి |
విధి చక్రంను 0% నుండి 100% కి పెంచండి, తద్వారా కాలక్రమేణా ప్రకాశం పెరుగుతుంది. 0-255 నుండి విలువను తీసుకొని OCR2 పిన్కు పంపండి.
(విధి = 0; విధి <255; విధి ++) // 0 నుండి గరిష్ట విధి చక్రం { OCR2 = విధి; // నెమ్మదిగా LED ప్రకాశాన్ని పెంచండి _delay_ms (10); }
అదేవిధంగా LED యొక్క ప్రకాశాన్ని క్రమంగా తగ్గించడానికి విధి చక్రం 100% నుండి 0% కి తగ్గించండి.
for (duty = 0; duty> 255; duty--) // max to 0 duty cycle { OCR2 = duty; // నెమ్మదిగా LED ప్రకాశాన్ని తగ్గించండి _delay_ms (10); }
ఇది Atmega16 / 32 లో PWM ను ఉపయోగించడంపై మా ట్యుటోరియల్ను పూర్తి చేస్తుంది.