- பி.டபிள்யூ.எம் (பல்ஸ் வித் மாடுலேஷன்) என்றால் என்ன?
- STM32 இல் PWM
- கூறுகள் தேவை
- STM32 இன் முள் விவரங்கள்
- சுற்று வரைபடம் மற்றும் இணைப்புகள்
- புரோகிராமிங் STM32
முந்தைய கட்டுரையில் STM32 ஐப் பயன்படுத்தி ADC மாற்றத்தைப் பற்றி பார்த்தோம். இந்த டுடோரியலில், எஸ்.டி.எம் 32 இல் பி.டபிள்யூ.எம் (பல்ஸ் அகல மாடுலேஷன்) பற்றி அறிந்து கொள்வோம், பி.டபிள்யூ.எம் நுட்பத்தைப் பயன்படுத்தி எல்.ஈ.டி அல்லது டி.சி விசிறியின் வேகத்தை எவ்வாறு கட்டுப்படுத்தலாம்.
சமிக்ஞையில் இரண்டு வகைகள் உள்ளன என்பதை நாங்கள் அறிவோம்: அனலாக் மற்றும் டிஜிட்டல். அனலாக் சிக்னல்களில் (3 வி, 1 வி… போன்றவை) மின்னழுத்தங்களும் டிஜிட்டல் சிக்னல்களில் (1 'மற்றும் 0 கள்) உள்ளன. சென்சார்கள் வெளியீடுகள் அனலாக் சிக்னல்கள் மற்றும் இந்த அனலாக் சிக்னல்கள் ஏடிசியைப் பயன்படுத்தி டிஜிட்டலாக மாற்றப்படுகின்றன, ஏனெனில் மைக்ரோகண்ட்ரோலர்கள் டிஜிட்டலை மட்டுமே புரிந்துகொள்கின்றன. அந்த ஏடிசி மதிப்புகளைச் செயலாக்கிய பிறகு, அனலாக் சாதனங்களை இயக்க வெளியீட்டை மீண்டும் அனலாக் வடிவமாக மாற்ற வேண்டும். அதற்காக PWM, Digital to Analog (DAC) மாற்றிகள் போன்ற சில முறைகளைப் பயன்படுத்துகிறோம்.
பி.டபிள்யூ.எம் (பல்ஸ் வித் மாடுலேஷன்) என்றால் என்ன?
மோட்டரின் வேகத்தைக் கட்டுப்படுத்துதல், ஒரு தலைமையின் பிரகாசம் போன்ற டிஜிட்டல் மதிப்பைப் பயன்படுத்தி அனலாக் சாதனங்களைக் கட்டுப்படுத்தும் ஒரு வழி பி.டபிள்யூ.எம். அனலாக் சிக்னலில் மோட்டார் மற்றும் லெட் செயல்பாடுகள் இருப்பதை நாங்கள் அறிவோம். ஆனால் PWM தூய அனலாக் வெளியீட்டை வழங்காது, PWM குறுகிய பருப்புகளால் செய்யப்பட்ட அனலாக் சிக்னலைப் போல் தெரிகிறது, இது கடமை சுழற்சியால் வழங்கப்படுகிறது.
PWM இன் கடமை சுழற்சி
PWM சமிக்ஞை HIGH (சரியான நேரத்தில்) இருக்கும் நேரத்தின் சதவீதம் கடமை சுழற்சி என அழைக்கப்படுகிறது. சமிக்ஞை எப்போதும் இயக்கத்தில் இருந்தால் அது 100% கடமை சுழற்சியில் இருக்கும், அது எப்போதும் முடக்கப்பட்டிருந்தால் அது 0% கடமை சுழற்சி ஆகும்.
கடமை சுழற்சி = நேரத்தை இயக்கவும் / (நேரத்தை இயக்கவும் + நேரத்தை அணைக்கவும்)
STM32 இல் PWM
STM32F103C8 இல் 15 PWM ஊசிகளும் 10 ADC ஊசிகளும் உள்ளன. 7 டைமர்கள் உள்ளன மற்றும் ஒவ்வொரு PWM வெளியீட்டும் 4 டைமர்களுடன் இணைக்கப்பட்ட சேனலால் வழங்கப்படுகிறது. இது 16-பிட் பிடபிள்யூஎம் தெளிவுத்திறனைக் கொண்டுள்ளது (2 16), அதாவது கவுண்டர்கள் மற்றும் மாறிகள் 65535 வரை பெரியதாக இருக்கும். 72 மெகா ஹெர்ட்ஸ் கடிகார வீதத்துடன், ஒரு பிடபிள்யூஎம் வெளியீடு அதிகபட்சமாக ஒரு மில்லி விநாடி வரை இருக்கலாம்.
- எனவே 65535 இன் மதிப்பு எல்.ஈ.டி மற்றும் டி.சி மின்விசிறியின் முழு வேகத்தையும் வழங்குகிறது (100% கடமை சுழற்சி)
- அதேபோல் 32767 இன் மதிப்பு டி.சி. மின்விசிறியின் எல்.ஈ.டி மற்றும் ஹாஃப் ஸ்பீட் (50% கடமை சுழற்சி)
- 13107 இன் மதிப்பு (20%) பிரகாசம் மற்றும் (20%) வேகம் (20% கடமை சுழற்சி) கொடுக்கிறது

இந்த டுடோரியலில், PWM நுட்பத்தால் எல்.ஈ.டி மற்றும் டி.சி விசிறியின் வேகத்தை வேறுபடுத்துவதற்கு பொட்டென்டோமீட்டர் மற்றும் எஸ்.டி.எம் 32 ஐப் பயன்படுத்துகிறோம். ஏடிசி மதிப்பு (0-4095) மற்றும் மாற்றியமைக்கப்பட்ட மாறி (பிடபிள்யூஎம் மதிப்பு) ஆகியவற்றைக் காண்பிக்க 16x2 எல்சிடி பயன்படுத்தப்படுகிறது (இது 0-65535).
பிற மைக்ரோகண்ட்ரோலருடன் சில PWM எடுத்துக்காட்டுகள் இங்கே:
- MPLAB மற்றும் XC8 உடன் PIC மைக்ரோகண்ட்ரோலரைப் பயன்படுத்தி PWM ஐ உருவாக்குகிறது
- ராஸ்பெர்ரி பை உடன் சர்வோ மோட்டார் கட்டுப்பாடு
- PWM ஐப் பயன்படுத்தி Arduino அடிப்படையிலான LED Dimmer
- MSP430G2 ஐப் பயன்படுத்தி துடிப்பு அகல மாடுலேஷன் (PWM)
PWM தொடர்பான அனைத்து திட்டங்களையும் இங்கே பாருங்கள்.
கூறுகள் தேவை
- STM32F103C8
- டிசி விசிறி
- ULN2003 மோட்டார் டிரைவர் ஐ.சி.
- எல்.ஈ.டி (RED)
- எல்சிடி (16 எக்ஸ் 2)
- பொட்டென்டோமீட்டர்
- ப்ரெட்போர்டு
- பேட்டரி 9 வி
- ஜம்பர் கம்பிகள்
டி.சி மின்விசிறி: இங்கு பயன்படுத்தப்படும் டி.சி விசிறி பழைய கணினியிலிருந்து பி.எல்.டி.சி விசிறி.இது வெளிப்புற சப்ளை தேவைப்படுகிறது, எனவே நாங்கள் 9 வி டிசி பேட்டரியைப் பயன்படுத்துகிறோம்.
ULN2003 மோட்டார் டிரைவர் ஐசி: இது ஒரு திசையில் மோட்டாரை இயக்க பயன்படுகிறது, ஏனெனில் மோட்டார் ஒரு திசை மற்றும் விசிறிக்கு வெளிப்புற சக்தி தேவைப்படுகிறது. ULN2003 அடிப்படையிலான மோட்டார் டிரைவர் சர்க்யூட் பற்றி மேலும் அறிக. ULN2003 இன் பட வரைபடம் கீழே:

பின்ஸ் (IN1 முதல் IN7 வரை) உள்ளீட்டு ஊசிகளும் (OUT 1 முதல் OUT 7 வரை) தொடர்புடைய வெளியீட்டு ஊசிகளும் ஆகும். COM வழங்கப்படுகிறது வெளியீட்டு சாதனங்களுக்கு நேர்மறை மூல மின்னழுத்தம் தேவை.
எல்.ஈ.டி: ரெட் ஒளியை வெளியிடும் ரெட் வண்ண லெட் பயன்படுத்தப்படுகிறது. எந்த வண்ணங்களையும் பயன்படுத்தலாம்.
பொட்டென்டோமீட்டர்கள்: இரண்டு பொட்டென்டோமீட்டர்கள் பயன்படுத்தப்படுகின்றன ஒன்று ஏடிசிக்கு அனலாக் உள்ளீட்டிற்கான மின்னழுத்த வகுப்பிக்கு, மற்றொன்று ஈயத்தின் பிரகாசத்தைக் கட்டுப்படுத்துவதற்காக.
STM32 இன் முள் விவரங்கள்

PWM ஊசிகளை அலை வடிவத்தில் (~) சுட்டிக்காட்டப்படுவதை நாம் காண முடியும், இதுபோன்ற 15 ஊசிகளும் உள்ளன, ADC ஊசிகளும் பச்சை நிறத்தில் குறிப்பிடப்படுகின்றன, 10 ADC ஊசிகளும் அனலாக் உள்ளீடுகளுக்குப் பயன்படுத்தப்படுகின்றன.
சுற்று வரைபடம் மற்றும் இணைப்புகள்

பல்வேறு கூறுகளுடன் STM32 இன் இணைப்புகள் கீழே விவரிக்கப்பட்டுள்ளன:
அனலாக் உள்ளீடு (ADC) உடன் STM32
சுற்றுக்கு இடது பக்கத்தில் இருக்கும் பொட்டென்டோமீட்டர் 3.3 வி முனையிலிருந்து மின்னழுத்தத்தை ஒழுங்குபடுத்தும் மின்னழுத்த சீராக்கி பயன்படுத்தப்படுகிறது. பொட்டென்டோமீட்டரின் வெளியீடு அதாவது பொட்டென்டோமீட்டரின் சென்டர் முள் STM32 இன் ADC முள் (PA4) உடன் இணைக்கப்பட்டுள்ளது.
எல்.ஈ.டி உடன் எஸ்.டி.எம் 32
STM32 PWM வெளியீட்டு முள் (PA9) தொடர் மின்தடை மற்றும் ஒரு மின்தேக்கி மூலம் எல்.ஈ.டி யின் நேர்மறை முள் உடன் இணைக்கப்பட்டுள்ளது.
மின்தடையம் மற்றும் மின்தேக்கியுடன் எல்.ஈ.டி.
PWM முனையிலிருந்து நேரடியாக உருவாக்கப்படும் போது அனலாக் வெளியீடு தூய்மையாக இல்லாததால், PWM வெளியீட்டிலிருந்து சரியான அனலாக் அலைகளை உருவாக்க தொடரில் ஒரு மின்தடையும் இணையாக ஒரு மின்தேக்கியும் எல்.ஈ.டி உடன் இணைக்கப்பட்டுள்ளன.
STM32 உடன் ULN2003 & ULN2003 மின்விசிறியுடன்
STM32 PWM வெளியீட்டு முள் (PA8) ULN2003 IC இன் உள்ளீட்டு முள் (IN1) உடன் இணைக்கப்பட்டுள்ளது மற்றும் ULN2003 இன் தொடர்புடைய வெளியீட்டு முள் (OUT1) DC FAN இன் எதிர்மறை கம்பியுடன் இணைக்கப்பட்டுள்ளது.
DC விசிறியின் நேர்மறையான முள் ULN2003 IC இன் COM முள் உடன் இணைக்கப்பட்டுள்ளது மற்றும் வெளிப்புற பேட்டரி (9V DC) ULN2003 IC இன் அதே COM முள் உடன் இணைக்கப்பட்டுள்ளது. ULN2003 இன் GND முள் STM32 இன் GND முள் மற்றும் பேட்டரி எதிர்மறை அதே GND முள் உடன் இணைக்கப்பட்டுள்ளது.
எல்.சி.டி (16x2) உடன் STM32
|
எல்சிடி முள் எண் |
எல்சிடி முள் பெயர் |
STM32 முள் பெயர் |
|
1 |
மைதானம் (Gnd) |
மைதானம் (ஜி) |
|
2 |
வி.சி.சி. |
5 வி |
|
3 |
VEE |
பொட்டென்டோமீட்டரின் மையத்திலிருந்து பின் |
|
4 |
பதிவு தேர்வு (ஆர்எஸ்) |
பிபி 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 |
எல்.ஈ.டி நேர்மறை |
5 வி |
|
16 |
எல்.ஈ.டி எதிர்மறை |
மைதானம் (ஜி) |
எல்சிடி டிஸ்ப்ளேவின் மாறுபாட்டைக் கட்டுப்படுத்த வலது பக்கத்தில் ஒரு பொட்டென்டோமீட்டர் பயன்படுத்தப்படுகிறது. மேலே உள்ள அட்டவணை எல்சிடி மற்றும் எஸ்.டி.எம் 32 ஆகியவற்றுக்கு இடையேயான தொடர்பைக் காட்டுகிறது.

புரோகிராமிங் STM32
முந்தைய டுடோரியலைப் போலவே, எஃப்.டி.டி.ஐ புரோகிராமரைப் பயன்படுத்தாமல் எஸ்.டி.எம் 32 எஃப் 103 சி 8 ஐ யூ.எஸ்.பி போர்ட் மூலம் அர்டுயினோ ஐடிஇ உடன் நிரல் செய்தோம். Arduino IDE உடன் STM32 நிரலாக்கத்தைப் பற்றி அறிய இணைப்பைப் பின்தொடரவும். அர்டுயினோவைப் போலவே நிரலாக்கத்தையும் தொடரலாம். முழுமையான குறியீடு இறுதியில் கொடுக்கப்பட்டுள்ளது.
இந்த குறியீட்டில், இடது பொட்டென்டோமீட்டரின் மைய முள் உடன் இணைக்கப்பட்டுள்ள ஏடிசி முள் (பிஏ 4) இலிருந்து உள்ளீட்டு அனலாக் மதிப்பை எடுத்து, பின்னர் அனலாக் மதிப்பை (0-3.3 வி) டிஜிட்டல் அல்லது முழு வடிவமாக (0-4095) மாற்றுவோம். எல்.ஈ.டி பிரகாசம் மற்றும் டி.சி விசிறியின் வேகத்தைக் கட்டுப்படுத்த இந்த டிஜிட்டல் மதிப்பு மேலும் PWM வெளியீடாக வழங்கப்படுகிறது. ஏடிசி மற்றும் மேப்பிங் மதிப்பை (பிடபிள்யூஎம் வெளியீட்டு மதிப்பு) காட்ட 16x2 எல்சிடி பயன்படுத்தப்படுகிறது.
முதலில் நாம் எல்சிடி தலைப்பு கோப்பை சேர்க்க வேண்டும், எல்சிடி ஊசிகளை அறிவிக்க வேண்டும் மற்றும் கீழே உள்ள குறியீட்டைப் பயன்படுத்தி அவற்றைத் தொடங்க வேண்டும். எல்.சி.டி.யை எஸ்.டி.எம் 32 உடன் இடைமுகப்படுத்துவது பற்றி மேலும் அறிக.
#சேர்க்கிறது
அடுத்து STM32 இன் முள் பயன்படுத்தி முள் பெயர்களை அறிவித்து வரையறுக்கவும்
const int அனலோகின்புட் = PA4; // பொட்டென்டோமீட்டரில் இருந்து உள்ளீடு const int led = PA9; // எல்.ஈ.டி வெளியீடு const int fan = PA8; // விசிறி வெளியீடு
இப்போது அமைவு () க்குள், நாம் சில செய்திகளைக் காண்பிக்க வேண்டும் மற்றும் சில விநாடிகளுக்குப் பிறகு அவற்றை அழிக்க வேண்டும் மற்றும் INPUT முள் மற்றும் PWM வெளியீட்டு ஊசிகளைக் குறிப்பிட வேண்டும்
lcd.begin (16,2); // எல்சிடி தயார் செய்தல் lcd.clear (); // எல்சிடி lcd.setCursor ஐ அழிக்கிறது (0,0); // வரிசை 0 மற்றும் நெடுவரிசை 0 lcd.print இல் கர்சரை அமைக்கிறது ("CIRCUIT DIGEST"); // சர்க்யூட் டைஜஸ்ட் lcd.setCursor (0,1) ஐக் காட்டுகிறது; // நெடுவரிசை 0 மற்றும் வரிசை 1 எல்சிடி பிரிண்டில் கர்சரை அமைக்கிறது ("PWM USING STM32"); // STM32 தாமதத்தைப் பயன்படுத்தி PWM ஐக் காட்டுகிறது (2000); // தாமத நேரம் lcd.clear (); // எல்சிடி பின்மோடை அழிக்கிறது (அனலாக்இன்புட், INPUT); // INPUT pinMode (led, PWM) ஆக முள் பயன்முறை அனலாக்இன்புட்டை அமைக்கவும் ; // செட் பின் பயன்முறை PWM வெளியீடு பின்மோட் (விசிறி, PWM) ஆக வழிநடத்தப்பட்டது ; // முள் பயன்முறை விசிறியை PWM வெளியீடாக அமைக்கவும்
அனலாக் உள்ளீட்டு முள் (PA4) பின்மோட் (அனலாக்இன்புட், INPUT) மூலம் INPUT ஆகவும், எல்இடி முள் PWM வெளியீடாகவும் pinMode (led, PWM) மூலமாகவும், விசிறி முள் PWM வெளியீடாக pinMode (fan, PWM) மூலமாகவும் அமைக்கப்பட்டுள்ளது. இங்கே PWM வெளியீட்டு ஊசிகளை LED (PA9) மற்றும் Fan (PA8) உடன் இணைக்கப்பட்டுள்ளது.
வெற்றிட லூப் () செயல்பாட்டில் அடுத்து, ஏடிசி முள் (பிஏ 4) இலிருந்து அனலாக் சிக்னலைப் படித்து, அனலாக் மின்னழுத்தத்தை டிஜிட்டல் முழு மதிப்புகளாக (0-4095) மாற்றும் ஒரு முழு எண் மாறியில் சேமிக்கிறோம். கீழே உள்ள குறியீட்டைப் பயன்படுத்தி int valueadc = அனலாக் ரீட் (அனலாக்இன்புட்);
இங்கே கவனிக்க வேண்டிய முக்கியமான விஷயம், எஸ்.டி.எம் 32 இன் சேனல்கள் 16-பிட் தீர்மானம் (0-65535) கொண்ட பி.டபிள்யூ.எம் ஊசிகளாகும், எனவே கீழேயுள்ள வரைபட செயல்பாட்டைப் பயன்படுத்தி அனலாக் மதிப்புகளுடன் அதை வரைபடமாக்க வேண்டும்
int முடிவு = வரைபடம் (valueadc, 0, 4095, 0, 65535).
மேப்பிங் பயன்படுத்தப்படாவிட்டால், பொட்டென்டோமீட்டரை மாற்றுவதன் மூலம் விசிறியின் முழு வேகம் அல்லது எல்.ஈ.டி முழு பிரகாசத்தையும் பெற மாட்டோம்.
PwmWrite (led, result) செயல்பாடுகளைப் பயன்படுத்தி pwmWrite (led, result) மற்றும் PWM வெளியீட்டை விசிறிக்குப் பயன்படுத்தி PWM வெளியீட்டை எல்.ஈ.டிக்கு எழுதுகிறோம் .
இறுதியாக பின்வரும் கட்டளைகளைப் பயன்படுத்தி எல்சிடி டிஸ்ப்ளேயில் அனலாக் உள்ளீட்டு மதிப்பு (ஏடிசி மதிப்பு) மற்றும் வெளியீட்டு மதிப்புகள் (பிடபிள்யூஎம் மதிப்புகள்) ஆகியவற்றைக் காண்பிப்போம்.
lcd.setCursor (0,0); // வரிசை 0 மற்றும் நெடுவரிசை 0 lcd.print இல் கர்சரை அமைக்கிறது ("ADC மதிப்பு ="); // “” lcd.print (valueadc) என்ற சொற்களை அச்சிடுகிறது ; // மதிப்புகள் valueadc lcd.setCursor (0,1); // நெடுவரிசை 0 மற்றும் வரிசை 1 எல்சிடி பிரிண்டில் கர்சரை அமைக்கிறது ("வெளியீடு ="); // "" lcd.print (முடிவு) இல் சொற்களை அச்சிடுகிறது ; // மதிப்பு முடிவைக் காட்டுகிறது
ஆர்ப்பாட்டத்துடன் முழுமையான குறியீடு வீடியோ கீழே கொடுக்கப்பட்டுள்ளது.
