ఈ ప్రాజెక్ట్లో 1 వాట్ ఎల్ఈడీ యొక్క ప్రకాశాన్ని సర్దుబాటు చేయడానికి ATmega32A యొక్క లక్షణాలలో ఒకదాన్ని ఉపయోగించబోతున్నాము. LED వేగాన్ని సర్దుబాటు చేయడానికి ఉపయోగించే పద్ధతి PWM (పల్స్ వెడల్పు మాడ్యులేషన్). ఈ AVR మైక్రోకంట్రోలర్ PWM ట్యుటోరియల్ PWM భావన మరియు PWM యొక్క తరం గురించి వివరంగా వివరిస్తుంది (మీరు ఈ సాధారణ PWM జనరేటర్ సర్క్యూట్ను కూడా తనిఖీ చేయవచ్చు). చిత్రంలో చూపిన విధంగా సాధారణ సర్క్యూట్ను పరిగణించండి.
ఇప్పుడు పై చిత్రంలో ఉన్న స్విచ్ కొంత కాలానికి నిరంతరం మూసివేయబడితే, ఆ సమయంలో బల్బ్ నిరంతరం ఆన్ అవుతుంది. స్విచ్ 8ms కోసం మూసివేయబడి, 10ms చక్రంలో 2ms కోసం తెరిస్తే, అప్పుడు బల్బ్ 8ms సమయంలో మాత్రమే ఆన్ అవుతుంది. ఇప్పుడు సగటు టెర్మినల్ 10ms వ్యవధిలో ఉంది = సమయం ఆన్ చేయండి / (సమయం ఆన్ చేయండి + సమయం ఆపివేయండి), దీనిని డ్యూటీ సైకిల్ అని పిలుస్తారు మరియు ఇది 80% (8 / (8 + 2)), కాబట్టి సగటు అవుట్పుట్ వోల్టేజ్ బ్యాటరీ వోల్టేజ్లో 80% ఉంటుంది.
రెండవ సందర్భంలో, స్విచ్ 5ms కోసం మూసివేయబడుతుంది మరియు 10ms వ్యవధిలో 5ms కోసం తెరవబడుతుంది, కాబట్టి అవుట్పుట్ వద్ద సగటు టెర్మినల్ వోల్టేజ్ బ్యాటరీ వోల్టేజ్లో 50% ఉంటుంది. బ్యాటరీ వోల్టేజ్ 5 వి మరియు డ్యూటీ సైకిల్ 50% ఉంటే చెప్పండి మరియు సగటు టెర్మినల్ వోల్టేజ్ 2.5 వి అవుతుంది.
మూడవ సందర్భంలో విధి చక్రం 20% మరియు సగటు టెర్మినల్ వోల్టేజ్ బ్యాటరీ వోల్టేజ్లో 20%.
ATMEGA32A లో మనకు నాలుగు PWM ఛానెల్లు ఉన్నాయి, అవి OC0, OC1A, OC1B మరియు OC2. ఇక్కడ మేము LED యొక్క ప్రకాశాన్ని మార్చడానికి OC0 PWM ఛానెల్ని ఉపయోగించబోతున్నాము.
భాగాలు అవసరం
హార్డ్వేర్:
ATmega32 మైక్రోకంట్రోలర్
విద్యుత్ సరఫరా (5 వి)
AVR-ISP ప్రోగ్రామర్
100uF కెపాసిటర్, 1 వాట్ LED
TIP127 ట్రాన్సిస్టర్
బటన్లు (2 ముక్కలు)
100nF (104) కెపాసిటర్ (2 ముక్కలు), 100Ω మరియు 1kΩ రెసిస్టర్లు (2 ముక్కలు).
సాఫ్ట్వేర్:
అట్మెల్ స్టూడియో 6.1
ప్రోగిస్ప్ లేదా ఫ్లాష్ మ్యాజిక్
సర్క్యూట్ రేఖాచిత్రం మరియు వర్కింగ్ వివరణ
పై బొమ్మ AVR మైక్రోకంట్రోలర్తో LED డిమ్మర్ యొక్క సర్క్యూట్ రేఖాచిత్రాన్ని చూపిస్తుంది (మీరు ఈ సాధారణ LED డిమ్మర్ సర్క్యూట్ను కూడా తనిఖీ చేయవచ్చు).
ATmega లో, నాలుగు PWM ఛానెల్ల కోసం, మేము నాలుగు పిన్లను నియమించాము. మేము ఈ పిన్స్పై మాత్రమే పిడబ్ల్యుఎం అవుట్పుట్ తీసుకోవచ్చు. మేము PWM0 ను ఉపయోగిస్తున్నందున మేము OC0 పిన్ (PORTB 3 rd PIN) వద్ద PWM సిగ్నల్ తీసుకోవాలి. చిత్రంలో చూపినట్లుగా, శక్తిని LED నడపడానికి మేము ట్రాన్సిస్టర్ యొక్క ఆధారాన్ని OC0 పిన్తో కలుపుతున్నాము. ఇక్కడ మరొక విషయం నాలుగు PWM ఛానెల్లకు పైగా ఉంది, రెండు 8-బిట్ PWM ఛానెల్లు. మేము ఇక్కడ 8-బిట్ పిడబ్ల్యుఎం ఛానెల్ని ఉపయోగించబోతున్నాం.
బౌన్స్ అవ్వకుండా ఉండటానికి ప్రతి బటన్లకు ఒక కెపాసిటర్ అనుసంధానించబడి ఉంది. ఒక బటన్ నొక్కినప్పుడల్లా పిన్ వద్ద కొంత శబ్దం ఉంటుంది. ఈ శబ్దం మిల్లీసెకన్లలో స్థిరీకరించినప్పటికీ. నియంత్రిక కోసం స్థిరీకరణ ట్రిగ్గర్లుగా పనిచేసే ముందు పదునైన శిఖరాలు. ప్రోగ్రామ్ సరళంగా ఉండటానికి సాఫ్ట్వేర్ లేదా హార్డ్వేర్ ద్వారా ఈ ప్రభావాన్ని తొలగించవచ్చు. డీబౌన్సింగ్ కెపాసిటర్ను జోడించడం ద్వారా మేము హార్డ్వేర్ పద్ధతిని ఉపయోగిస్తున్నాము.
కెపాసిటర్లు బటన్ల బౌన్స్ ప్రభావాన్ని రద్దు చేస్తాయి.
ATMEGA లో PWM ను ఉత్పత్తి చేయడానికి కొన్ని మార్గాలు ఉన్నాయి, అవి:
1. దశ సరైన పిడబ్ల్యుఎం
2. ఫాస్ట్ పిడబ్ల్యుఎం
ఇక్కడ మనం ప్రతిదీ సరళంగా ఉంచబోతున్నాం, కాబట్టి పిడబ్ల్యుఎం సిగ్నల్ ఉత్పత్తి చేయడానికి ఫాస్ట్ పిడబ్ల్యుఎం పద్ధతిని ఉపయోగించబోతున్నాం.
మొదట పిడబ్ల్యుఎమ్ యొక్క ఫ్రీక్వెన్సీని ఎన్నుకోండి, ఇది సాధారణంగా అప్లికేషన్పై ఆధారపడి ఉంటుంది, ఎల్ఇడి కోసం 50 హెర్ట్జ్ కంటే ఎక్కువ ఫ్రీక్వెన్సీ చేస్తుంది. ఈ కారణంగా మేము కౌంటర్ క్లాక్ 1MHZ ని ఎంచుకుంటున్నాము. కాబట్టి మేము ప్రీస్కాలర్ ఎంచుకోలేదు. ప్రీస్కాలర్ అనేది తక్కువ కౌంటర్ గడియారాన్ని పొందడానికి ఎంపిక చేయబడిన సంఖ్య. ఉదాహరణకు, ఓసిలేటర్ గడియారం 8Mhz అయితే, కౌంటర్ కోసం 1MHz గడియారాన్ని పొందడానికి మేము '8' యొక్క ప్రీస్కాలర్ను ఎంచుకోవచ్చు. ప్రీస్కాలర్ ఫ్రీక్వెన్సీ ఆధారంగా ఎంపిక చేయబడింది. మనకు ఎక్కువ కాల వ్యవధి పప్పులు కావాలంటే మనం ఎక్కువ ప్రీస్కాలర్ ఎంచుకోవాలి.
ఇప్పుడు ATMEGA నుండి 50Hz గడియారం యొక్క వేగవంతమైన PWM ను పొందడానికి, మేము “ TCCR0 ” రిజిస్టర్లో తగిన బిట్లను ప్రారంభించాలి. 8 బిట్ ఫాస్ట్ పిడబ్ల్యుఎం పొందడానికి మేము ఇబ్బంది పెట్టవలసిన ఏకైక రిజిస్టర్ ఇది.
ఇక్కడ, 1. CS00, CS01, CS02 (YELLOW) - కౌంటర్ గడియారాన్ని ఎంచుకోవడానికి ప్రెస్కాలర్ను ఎంచుకోండి. తగిన ప్రీస్కాలర్ కోసం పట్టిక క్రింద పట్టికలో చూపబడింది. కాబట్టి ఒకదాన్ని ప్రీస్కేలింగ్ చేయడానికి (ఓసిలేటర్ క్లాక్ = కౌంటర్ క్లాక్).
కాబట్టి CS00 = 1, ఇతర రెండు బిట్స్ సున్నా.
2. WGM01 మరియు WGM00 వేగవంతమైన PWM కోసం దిగువ పట్టిక ఆధారంగా తరంగ రూప తరం మోడ్లను ఎంచుకోవడానికి మార్చబడతాయి. మాకు WGM00 = 1 మరియు WGM01 = 1;
3. పిడబ్ల్యుఎం అనేది వేర్వేరు విధి నిష్పత్తి లేదా వేర్వేరు టర్న్ ఆన్ టర్న్ ఆఫ్ సమయాలతో కూడిన సిగ్నల్ అని ఇప్పుడు మనకు తెలుసు. ఇప్పటి వరకు మేము PWM యొక్క ఫ్రీక్వెన్సీ మరియు రకాన్ని ఎంచుకున్నాము. ఈ ప్రాజెక్ట్ యొక్క ప్రధాన థీమ్ ఈ విభాగంలో ఉంది. విభిన్న విధి నిష్పత్తిని పొందడానికి, మేము 0 మరియు 255 మధ్య విలువను ఎంచుకోబోతున్నాము (8 బిట్ కారణంగా 2 ^ 8). కౌంటర్ 0 నుండి లెక్కింపు ప్రారంభించి విలువ 180 కి చేరుకున్నప్పుడు, మేము 180 విలువను ఎంచుకుంటామని చెప్పండి, అవుట్పుట్ ప్రతిస్పందన ప్రారంభించబడవచ్చు. ఈ ట్రిగ్గర్ విలోమం లేదా విలోమం కానిది కావచ్చు. అంటే the ట్పుట్ను కౌంట్కు చేరుకున్నప్పుడు పైకి లాగమని చెప్పవచ్చు లేదా గణనను చేరుకున్నప్పుడు క్రిందికి లాగమని చెప్పవచ్చు.
పైకి లేదా క్రిందికి లాగడం యొక్క ఈ ఎంపికను CM00 మరియు CM01 బిట్స్ ఎంచుకుంటాయి.
పట్టికలో చూపినట్లుగా, అవుట్పుట్ పోల్చినప్పుడు అధికంగా ఉండటానికి మరియు అవుట్పుట్ గరిష్ట విలువ వరకు ఎక్కువగా ఉంటుంది (దిగువ చిత్రంలో చూపిన విధంగా). అలా చేయడానికి మేము ఇన్వర్టింగ్ మోడ్ను ఎంచుకోవాలి, కాబట్టి COM00 = 1; COM01 = 1.
దిగువ చిత్రంలో చూపినట్లుగా, OCR0 (అవుట్పుట్ కంపేర్ రిజిస్టర్ 0) అనేది వినియోగదారు ఎంచుకున్న విలువను నిల్వ చేసే బైట్. కాబట్టి మేము OCR0 = 180 ని మార్చుకుంటే, కౌంటర్ 0 నుండి 180 కి చేరుకున్నప్పుడు నియంత్రిక మార్పు (అధిక) ను ప్రేరేపిస్తుంది.
ఇప్పుడు LED యొక్క ప్రకాశాన్ని మార్చడానికి మేము PWM సిగ్నల్ యొక్క DUTY నిష్పత్తిని మార్చాలి. విధి నిష్పత్తిని మార్చడానికి, మేము OCR0 విలువను మార్చాలి. మేము OCR0 యొక్క ఈ విలువను మార్చినప్పుడు, కౌంటర్ OCR0 ను చేరుకోవడానికి వేరే సమయం పడుతుంది. కాబట్టి నియంత్రిక వేర్వేరు సమయాల్లో అవుట్పుట్ను అధికంగా లాగుతుంది.
కాబట్టి వివిధ విధి చక్రాల PWM కోసం, మేము OCR0 విలువను మార్చాలి.
సర్క్యూట్లో మనకు రెండు బటన్లు ఉన్నాయి. ఒక బటన్ OCR0 విలువను పెంచడం కోసం మరియు PWM సిగ్నల్ యొక్క DUTY నిష్పత్తి, మరొకటి OCR0 విలువను తగ్గించడం కోసం మరియు PWM సిగ్నల్ యొక్క DUTY నిష్పత్తి.