வெப்பநிலை சென்சார் தொழில்நுட்பம்

வெப்பநிலை சென்சார் ஆய்வு (DS18B20 மற்றும் PT100 இன் செயல்பாட்டு சுற்று வடிவமைப்பு)

DS18B20 திட்டவட்டமான மற்றும் CUBEMAX உள்ளமைவு

இடையே ஒப்பீடு PT100 வெப்பநிலை சென்சார் ஆய்வு மற்றும் DS18B20 தொகுதி
1) சமிக்ஞை கையகப்படுத்துதலின் அடிப்படைக் கொள்கை
① PT100 இன் எதிர்ப்பு வெப்பநிலைக்கு விகிதாசாரமாக மாறுகிறது (அதிக வெப்பநிலை, அதிக எதிர்ப்பு), ஆனால் எதிர்ப்பு மாற்றம் மிகவும் சிறியது, பற்றி 0.385 ஓ / பட்டம்;
② PT100 இன் வெப்பநிலை அளவீட்டு வரம்பு -200℃ -200℃, மற்றும் 0℃ இல், எதிர்ப்பு சரியாக சமமாக உள்ளது 100 ஓ;
③ PT100 இன் வேலை மின்னோட்டம் குறைவாக இருக்க வேண்டும் 5 எம்.ஏ;
④ PT100 இன் எதிர்ப்பு வெப்பநிலைக்கு விகிதாசாரமாக மாறினாலும், அதன் மாற்ற விகிதம் (அதாவது, K மதிப்பு K மதிப்பு K மதிப்பு) வெவ்வேறு வெப்பநிலை வரம்புகளில் வேறுபட்டது.

2) PT100 வெப்பநிலை எதிர்ப்பு மாற்ற அட்டவணை

PT100 வெப்பநிலை எதிர்ப்பு மாற்ற அட்டவணை

3. PT100 இயக்கி சுற்று

PT100 இயக்கி சுற்று

PT100 இயக்கி சுற்று

1) மின்னழுத்த பிரிவு முறை மூலம், AD வெப்பநிலையைக் கணக்கிடுவதற்கு எதிர்ப்பு மதிப்பைப் பெற PT100 மின்னழுத்தத்தை சேகரிக்கிறது
அறை வெப்பநிலையில் தண்ணீரில் PT100 இன் எதிர்ப்பு மதிப்பு (25℃25℃25℃) பற்றி உள்ளது 109.89 ஓ.
மைக்ரோகண்ட்ரோலர் 3.3V மின்னழுத்தத்தை வெளியிடுகிறது, மற்றும் PT100 ஆல் வகுக்கப்பட்ட மின்னழுத்தம் தோராயமாக இருக்கும்:
109.89 ∗ 0.005 = 0.54945 வி

AD மாற்று சூத்திரத்தின்படி மாற்றப்படும் AD மதிப்பு தோராயமாக இருக்கும்:
0.54945 / 3.3 ∗ 4096 = 681.98 ≈ 682

வெப்பநிலை ஒரு டிகிரி உயரும் போது, PT100 இன் எதிர்ப்பானது உயர்கிறது என்று வைத்துக்கொள்வோம் 0.385 ஓ, பிரிக்கப்பட்ட மின்னழுத்தத்தின் மாற்ற மதிப்பு தோராயமாக சமமாக இருக்கும்:
0.385 ∗ 0.005 = 0.001925 வி

AD மாற்று சூத்திரத்தின்படி மாற்றப்படும் AD மதிப்பு தோராயமாக இருக்கும்:
0.001925 / 3.3 ∗ 4096 = 2.39 ≈ 2

பரிசோதனையில், stm32 மின்சார விநியோகத்தின் நிலையற்ற 3.3V மின்னழுத்தம் காரணமாக இது கண்டறியப்பட்டது, ADC ஆனது PT100 மின்னழுத்த ஏற்ற இறக்கங்களைச் சேகரித்தது மற்றும் மின்னழுத்தப் பிரிவு பிழை பெரியதாக இருந்தது. தேர்வுமுறை தீர்வு ஒரு நிலையான தற்போதைய மூல சுற்று வடிவமைப்பதாகும். PT100 இன் மின்னழுத்தத்தையும் நிலையான மின்னோட்ட மூலத்தின் மின்னோட்டத்தையும் சேகரிப்பதன் மூலம், PT100 இன் எதிர்ப்பைப் பெறலாம், பின்னர் வெப்பநிலை மதிப்பைப் பெறலாம்.

2) LDO ரெகுலேட்டரை அடிப்படையாகக் கொண்ட நிலையான மின்னோட்ட மூல சுற்று (MD5333)
இணையத்தில் PT100 ஐ சோதிக்க பல ஓட்டுநர் சுற்றுகள் உள்ளன, டிசி பிரிட்ஜ் சர்க்யூட் போன்றவை, செயல்பாட்டு பெருக்கியின் அடிப்படையில் நிலையான மின்னோட்ட மூல சுற்று, முதலியன. டிரைவிங் சர்க்யூட்டைத் தேர்ந்தெடுப்பதிலும் ஆசிரியர் நிறைய நேரம் செலவிட்டார், பலகையை உருவாக்குவதில் உள்ள சிரமம் மற்றும் கூறுகளின் எண்ணிக்கை ஆகியவற்றைக் கருத்தில் கொண்டு, இறுதியாக LDO ரெகுலேட்டரை அடிப்படையாகக் கொண்ட நிலையான மின்னோட்ட மூலச் சுற்று தேர்வு செய்யப்பட்டது (MD5333). சுற்று வரைபடம் பின்வருமாறு:

LDO ரெகுலேட்டரின் நிலையான மின்னோட்ட மூல சுற்று (MD5333)

LDO ரெகுலேட்டரின் நிலையான மின்னோட்ட மூல சுற்று (MD5333)

இந்த கட்டத்தில், வன்பொருள் தேர்வு அடிப்படையில் முடிந்தது. டெவலப்மெண்ட் போர்டு பயன்படுத்தப்பட்டது Zhengdian Atom F10ZET6 எலைட் போர்டு

DS18B20 தொகுதி
நிகழ்நேர வெப்பநிலை மற்றும் PT100 வெப்பநிலை ஒப்பீட்டைச் சோதிப்பதற்காக, அளவுத்திருத்த ஒப்பீட்டு சோதனைக்காக DS18B20 தொகுதி சேர்க்கப்பட்டது

1) DS18B20 அறிமுகம்
DS18B20 என்பது -55~+125℃ சோதனை வெப்பநிலை வரம்பு மற்றும் ±0.5℃ துல்லியம் கொண்ட ஒற்றை-பஸ் வெப்பநிலை சென்சார் ஆகும்.. புல வெப்பநிலை நேரடியாக ஒற்றை பேருந்து டிஜிட்டல் முறையில் அனுப்பப்படுகிறது, இது அமைப்பின் குறுக்கீடு எதிர்ப்பு திறனை பெரிதும் மேம்படுத்துகிறது. இது அளவிடப்பட்ட வெப்பநிலையை நேரடியாக படிக்க முடியும், மற்றும் உண்மையான தேவைகளுக்கு ஏற்ப எளிய நிரலாக்கத்தின் மூலம் 9~12-பிட் டிஜிட்டல் மதிப்பு வாசிப்பு முறையை உணர முடியும். அதன் இயக்க மின்னழுத்த வரம்பு 3~5.5V ஆகும், மேலும் இது பல்வேறு பேக்கேஜிங் படிவங்களைப் பயன்படுத்துகிறது, கணினி அமைப்பை நெகிழ்வானதாகவும் வசதியாகவும் மாற்றுகிறது. பயனர் அமைத்த செட் ரெசல்யூஷன் மற்றும் அலாரம் வெப்பநிலை EEPROM இல் சேமிக்கப்பட்டு, மின்சாரம் செயலிழந்த பிறகும் சேமிக்கப்படும்.

DS18B20 சுற்று வடிவமைப்பு

DS18B20 சுற்று வடிவமைப்பு

2) DS18B20 வேலை நேர அறிமுகம்
அனைத்து ஒற்றை-பஸ் சாதனங்களுக்கும் தரவு ஒருமைப்பாட்டை உறுதிப்படுத்த கடுமையான சமிக்ஞை நேரம் தேவைப்படுகிறது. DS18B20 உள்ளது 6 சமிக்ஞை வகைகள்: துடிப்பை மீட்டமை, பதில் துடிப்பு, எழுது 0, எழுது 1, படித்தேன் 0 மற்றும் படிக்கவும் 1. இந்த சமிக்ஞைகள் அனைத்தும், பதில் துடிப்பு தவிர, ஹோஸ்ட்டால் அனுப்பப்படும் ஒத்திசைவான சிக்னல்கள். மேலும் அனைத்து கட்டளைகளும் தரவுகளும் முதலில் பைட்டின் குறைந்த பிட் மூலம் அனுப்பப்படும்.

DS18B20 துடிப்பு மற்றும் பதில் துடிப்பை மீட்டமைக்கிறது

DS18B20 துடிப்பு மற்றும் பதில் துடிப்பை மீட்டமைக்கிறது

① துடிப்பு மற்றும் பதில் துடிப்பை மீட்டமைக்கவும்
ஒற்றை பேருந்தில் உள்ள அனைத்து தகவல்தொடர்புகளும் ஒரு துவக்க வரிசையுடன் தொடங்குகின்றன. புரவலன் குறைந்த அளவை வெளியிடுகிறது மற்றும் மீட்டமைக்கும் துடிப்பை உருவாக்க குறைந்தபட்சம் 480us குறைந்த அளவை வைத்திருக்கும். பின்னர் புரவலன் பஸ்ஸை விடுவிப்பார், மற்றும் 4.7K புல்-அப் மின்தடை ஒற்றை பஸ்ஸை உயரமாக இழுக்கிறது, 15~60us தாமத நேரத்துடன், மற்றும் பெறும் முறையில் நுழைகிறது (Rx). பின்னர் DS18B20 குறைந்த அளவிலான பதில் துடிப்பை உருவாக்க, பேருந்தை 60~240usக்கு இழுக்கிறது..

DS18B20 எழுதும் நேரம்

DS18B20 எழுதும் நேரம்

② நேரத்தை எழுதவும்
எழுதும் நேரம் எழுதுவதை உள்ளடக்கியது 0 நேரம் மற்றும் எழுதுதல் 1 நேரம். அனைத்து எழுதும் நேரங்களுக்கும் குறைந்தபட்சம் 60 அமெரிக்கன்கள் தேவை, மற்றும் இரண்டு சுயாதீன எழுதும் நேரங்களுக்கு இடையில் குறைந்தது 1us மீட்டெடுப்பு நேரம் தேவைப்படுகிறது. இரண்டு எழுதும் நேரங்களும் புரவலன் பேருந்தை கீழே இழுப்பதில் இருந்து தொடங்குகின்றன. எழுது 1 நேரம்: புரவலன் குறைந்த அளவில் வெளியிடுகிறது, 2 எங்களுக்கு தாமதம், பின்னர் பேருந்தை விடுவிக்கிறார், 60ஐ தாமதப்படுத்துகிறது. எழுது 0 நேரம்: புரவலன் குறைந்த அளவில் வெளியிடுகிறது, 60us தாமதம், பின்னர் 2யூஸ் தாமதத்துடன் பேருந்தை விடுவிக்கிறது.

DS18B20 படிக்கும் நேரம்

DS18B20 படிக்கும் நேரம்

③ படிக்கும் நேரம்
ஹோஸ்ட் படிக்கும் நேரத்தை வழங்கும் போது மட்டுமே ஒற்றை-பஸ் சாதனங்கள் ஹோஸ்டுக்கு தரவை அனுப்பும். எனவே, ஹோஸ்ட் ஒரு வாசிப்பு தரவு கட்டளையை வழங்கிய பிறகு, ஒரு வாசிப்பு நேரம் உடனடியாக உருவாக்கப்பட வேண்டும், இதனால் அடிமை தரவை அனுப்ப முடியும். அனைத்து வாசிப்பு நேரங்களுக்கும் குறைந்தபட்சம் 60 அமெரிக்கன்கள் தேவை, இரண்டு சுயாதீன வாசிப்பு நேரங்களுக்கிடையில் குறைந்தது 1us மீட்டெடுப்பு நேரம் தேவைப்படுகிறது. ஒவ்வொரு வாசிப்பு நேரமும் புரவலரால் தொடங்கப்படுகிறது, குறைந்த பட்சம் 1us பேருந்தை கீழே இழுக்கும். புரவலன் படிக்கும் நேரத்தின் போது பேருந்தை விடுவித்து, நேரம் தொடங்கிய பிறகு 15usக்குள் பேருந்தின் நிலையை மாதிரி எடுக்க வேண்டும்.. வழக்கமான வாசிப்பு நேர செயல்முறை: புரவலன் 2us இன் குறைந்த அளவிலான தாமதத்தை வெளியிடுகிறது, பின்னர் ஹோஸ்ட் 12us இன் உள்ளீட்டு பயன்முறை தாமதத்திற்கு மாறுகிறது, பின்னர் ஒற்றைப் பேருந்தின் தற்போதைய நிலையைப் படிக்கிறது, பின்னர் 50us தாமதமாகிறது.

வெப்பநிலை தகவலை அச்சிட DS18B20 தொடர் போர்ட்டை திறக்கிறது

வெப்பநிலை தகவலை அச்சிட DS18B20 தொடர் போர்ட்டை திறக்கிறது

ஒற்றைப் பேருந்து நேரத்தைப் புரிந்து கொண்ட பிறகு, DS18B20 இன் வழக்கமான வெப்பநிலை வாசிப்பு செயல்முறையைப் பார்ப்போம். DS18B20 இன் வழக்கமான வெப்பநிலை வாசிப்பு செயல்முறை: மீட்டமை → SKIPROM ஐ அனுப்பவும் (0xCC) → தொடக்க மாற்ற கட்டளையை அனுப்பவும் (0x44) → தாமதம் → மீட்டமை → SKIPROM கட்டளையை அனுப்பவும் (0xCC) → நினைவக கட்டளையை அனுப்பவும் (0xBE) → இரண்டு பைட் தரவுகளைப் படிக்கவும் (அதாவது. வெப்பநிலை) தொடர்ந்து → முடிவு.

3) திட்ட வரைபடம் மற்றும் CUBEMAX உள்ளமைவு
திட்ட வரைபடத்திலிருந்து, வெப்பநிலை தகவலை அச்சிட சீரியல் போர்ட்டைத் திறக்க DS18B20 PG11 போர்ட்டால் இயக்கப்பட்டிருப்பதைக் காணலாம்.

DS18B20 திட்டவட்டமான மற்றும் CUBEMAX உள்ளமைவு

DS18B20 திட்டவட்டமான மற்றும் CUBEMAX உள்ளமைவு

DS18B20 வெப்பநிலை மற்றும் ஈரப்பதம் சென்சார் இடைமுகம்

DS18B20 வெப்பநிலை மற்றும் ஈரப்பதம் சென்சார் இடைமுகம்

4) குறியீடு பகுதி
குறியீடு பகுதி Zhengdian Atom இன் ds18b20 நூலகத்தை இடமாற்றம் செய்து சிறிய மாற்றங்களைச் செய்கிறது

#ifndef __DS18B20_H
#__DS18B20_H ஐ வரையறுக்கவும்

#அடங்கும் “tim.h”
/***********************************************************************************/
/* DS18B20 முள் வரையறை */

#DS18B20_DQ_GPIO_PORT GPIOG ஐ வரையறுக்கவும்
#DS18B20_DQ_GPIO_PIN GPIO_PIN_11 ஐ வரையறுக்கவும்
#DS18B20_DQ_GPIO_CLK_ENABLE ஐ வரையறுக்கவும்() செய்ய{ __HAL_RCC_GPIOG_CLK_ENABLE(); }போது(0) /* PG போர்ட் கடிகாரத்தை இயக்கவும் */

/**********************************************************************************************/

/* IO செயல்பாட்டு செயல்பாடு */
#DS18B20_DQ_OUT ஐ வரையறுக்கவும்(x) செய்ய{ x ? \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_RESET); \
}போது(0) /* டேட்டா போர்ட் வெளியீடு */
#DS18B20_DQ_IN HAL_GPIO_ReadPin ஐ வரையறுக்கவும்(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN) /* டேட்டா போர்ட் உள்ளீடு */

uint8_t ds18b20_init(வெற்றிடமானது); /* DS18B20 ஐ துவக்கவும் */
uint8_t ds18b20_check(வெற்றிடமானது); /* DS18B20 உள்ளதா எனச் சரிபார்க்கவும் */
குறுகிய ds18b20_get_temperature(வெற்றிடமானது);/* வெப்பநிலையைப் பெறுங்கள் */

#endif

5. அகச்சிவப்பு ரிமோட் கண்ட்ரோல் தொகுதி
1) வயர்லெஸ் தொகுதி குறியீட்டு நெறிமுறை

அகச்சிவப்பு ரிமோட் கண்ட்ரோலுக்கு பரவலாகப் பயன்படுத்தப்படும் குறியீட்டு முறைகள்: PWM இன் NEC நெறிமுறை (துடிப்பு அகல பண்பேற்றம்) மற்றும் Philips PPM இன் RC-5 நெறிமுறை (துடிப்பு நிலை பண்பேற்றம்). டெவலப்மெண்ட் போர்டுடன் வரும் ரிமோட் கண்ட்ரோல் NEC நெறிமுறையைப் பயன்படுத்துகிறது, இது பின்வரும் அம்சங்களைக் கொண்டுள்ளது:

1. 8-பிட் முகவரி மற்றும் 8-பிட் அறிவுறுத்தல் நீளம்;

2. முகவரி மற்றும் கட்டளை இரண்டு முறை அனுப்பப்படும் (நம்பகத்தன்மையை உறுதி செய்ய);

3. PWM துடிப்பு நிலை பண்பேற்றம், கடத்தப்பட்ட அகச்சிவப்பு கேரியரின் கடமை சுழற்சியைக் குறிக்கும் “0” மற்றும் “1”;

4. கேரியர் அதிர்வெண் 38Khz;

5. பிட் நேரம் 1.125ms அல்லது 2.25ms ஆகும்;

NEC நெறிமுறையில், நெறிமுறையில் தரவை எவ்வாறு அமைப்பது ‘0’ அல்லது '1'? இங்கே, அகச்சிவப்பு ரிசீவர் மற்றும் அகச்சிவப்பு டிரான்ஸ்மிட்டர் பிரிக்கப்படுகின்றன.

அகச்சிவப்பு டிரான்ஸ்மிட்டர்: கேரியர் சிக்னல் பரிமாற்றத்தின் நெறிமுறை தரவை ‘0’ = 560us அனுப்பவும் + 560எங்களுக்கு கேரியர் சிக்னல் பரிமாற்றம் இல்லை

கேரியர் சிக்னல் பரிமாற்றத்தின் நெறிமுறை தரவை ‘1’ = 560us அனுப்பவும் + 1680எங்களுக்கு கேரியர் சிக்னல் பரிமாற்றம் இல்லை

அகச்சிவப்பு டிரான்ஸ்மிட்டரின் பிட் வரையறை கீழே உள்ள படத்தில் காட்டப்பட்டுள்ளது

அகச்சிவப்பு ரிசீவர்: நெறிமுறைத் தரவைப் பெறுங்கள் ‘0’ = 560us குறைந்த அளவில் + 560எங்களுக்கு உயர் நிலை

நெறிமுறை தரவை ‘1’ = 560us குறைந்த அளவில் பெறவும் + 1680எங்களுக்கு உயர் நிலை

NEC ரிமோட் கண்ட்ரோல் கட்டளையின் தரவு வடிவம்: ஒத்திசைவு முனையம், முகவரி குறியீடு, முகவரி தலைகீழ் குறியீடு, கட்டுப்பாட்டு குறியீடு, கட்டுப்பாட்டு தலைகீழ் குறியீடு. ஒத்திசைவு குறியீடு 9ms குறைந்த நிலை மற்றும் 4.5ms உயர் நிலை ஆகியவற்றைக் கொண்டுள்ளது. முகவரி குறியீடு, முகவரி தலைகீழ் குறியீடு, கட்டுப்பாட்டு குறியீடு, மற்றும் கட்டுப்பாட்டு தலைகீழ் குறியீடு அனைத்தும் 8-பிட் தரவு வடிவங்கள். அவை குறைந்த பிட் முதல் மற்றும் அதிக பிட் கடைசி வரிசையில் அனுப்பப்படுகின்றன. பரிமாற்றத்தின் நம்பகத்தன்மையை அதிகரிக்க தலைகீழ் குறியீடு பயன்படுத்தப்படுகிறது.

எனவே, ரிமோட் கண்ட்ரோல் டிகோடிங்கை அடைய உயர் மட்டத்தின் துடிப்பு அகலத்தை அளவிட உள்ளீடு பிடிப்பு பயன்படுத்தப்படலாம்.
2) திட்ட வரைபடம் மற்றும் CUBEMAX உள்ளமைவு

திட்ட வரைபடத்திலிருந்து, வயர்லெஸ் மாட்யூல் PB9 பின் மூலம் இயக்கப்பட்டு அதன் மூலம் சேகரிக்கப்படுவதைக் காணலாம் 4 TIM4 சேனல்கள்:

TIM4_CH4 இன் இயல்புநிலை முள் PB9 அல்ல, எனவே அதை கைமுறையாக அமைக்க வேண்டும், மற்றும் குறுக்கீடு அமைப்பு அதே நேரத்தில் இயக்கப்பட்டது

3) குறியீடு பகுதி
டிம் கால்பேக் செயல்பாட்டின் மூலம் உயரும் விளிம்பைப் பிடிக்கவும்

இந்த நேரத்தில், டிகோட் செய்யப்பட்ட சிக்னலைப் பெறலாம்:

இந்த நேரத்தில், தரவு மிகவும் சிக்கலானது மற்றும் சிறிது செயலாக்க முடியும்:

விளைவு பின்வருமாறு:
கடைசி இரண்டு இலக்கங்கள் டிகோட் செய்யப்பட்ட மற்றும் அதன் தலைகீழ் குறியீடு. இந்த நேரத்தில், வெப்பநிலை வரம்பை சரிசெய்ய இது ஒரு மேக்ரோ என வரையறுக்கப்படுகிறது:

விளைவு பின்வருமாறு:

அகச்சிவப்பு பகுதி குறியீடு:

/* பயனர் குறியீடு தொடக்க தலைப்பு */
/**
******************************************************************************
* @கோப்பு : முக்கிய.சி
* @சுருக்கமாக : முக்கிய நிரல் அமைப்பு
******************************************************************************
* @கவனம்
*
* <h2><மையம்>&நகல்; காப்புரிமை (c) 2024 STMமைக்ரோ எலக்ட்ரானிக்ஸ்.
* அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டவை.</மையம்></h2>
*
* இந்த மென்பொருள் கூறு BSD 3-பிரிவு உரிமத்தின் கீழ் ST ஆல் உரிமம் பெற்றது,
* தி “உரிமம்”; உடன் இணங்குவதைத் தவிர இந்தக் கோப்பை நீங்கள் பயன்படுத்தக்கூடாது
* உரிமம். நீங்கள் உரிமத்தின் நகலைப் பெறலாம்:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* பயனர் குறியீடு முடிவு தலைப்பு */
/* அடங்கும் ——————————————————————*/
#அடங்கும் “main.h”
#அடங்கும் “tim.h”
#அடங்கும் “usart.h”
#அடங்கும் “gpio.h”

/* தனியார் அடங்கும் ———————————————————-*/
/* பயனர் குறியீடு தொடக்கம் அடங்கும் */
#அடங்கும் “stdio.h”
#அடங்கும் “சரம்.h”
#MAXUP ஐ வரையறுக்கவும் 157
#MAXDOWN ஐ வரையறுக்கவும் 87
#MINUP ஐ வரையறுக்கவும் 221
#MINDOWN ஐ வரையறுக்கவும் 61
/* பயனர் குறியீடு முடிவு அடங்கும் */

/* தனிப்பட்ட தட்டச்சு ———————————————————–*/
/* பயனர் குறியீடு ஆரம்பம் PTD */

/* பயனர் குறியீடு முடிவு PTD */

/* தனிப்பட்ட வரையறை ————————————————————*/
/* பயனர் குறியீடு தொடக்கம் PD */
/* பயனர் குறியீடு முடிவு PD */

/* தனிப்பட்ட மேக்ரோ ————————————————————-*/
/* பயனர் குறியீடு பி.எம் */

/* பயனர் குறியீடு முடிவு PM */

/* தனிப்பட்ட மாறிகள் ———————————————————*/

/* பயனர் குறியீடு தொடக்கம் PV */
uint32_t upCount=0;
uint16_t மதிப்பு=0;
uint16_t ValueDown=0;
uint8_t isUpCapt=1;
uint16_t அகலம்=0;
uint16_t தாங்கல்[128]={0};
uint16_t bufferId=0;
uint8_t rcvFalg=0;
/* பயனர் குறியீடு முடிவு PV */

/* தனிப்பட்ட செயல்பாட்டின் முன்மாதிரிகள் ———————————————–*/
வெற்றிடமான SystemClock_Config(வெற்றிடமானது);
/* பயனர் குறியீடு தொடக்கம் PFP */

/* பயனர் குறியீடு முடிவு PFP */

/* தனிப்பட்ட பயனர் குறியீடு ———————————————————*/
/* பயனர் குறியீடு ஆரம்பம் 0 */
வெற்றிடமான HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
upCount++;
}
வெற்றிடமான HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
என்றால்(isUpCapt)//அது உயரும் விளிம்பில் பிடிப்பு என்றால்
{
மதிப்புஅப்=HAL_TIM_ReadCapturedValue(Htim htim,TIM_CHANNEL_4);
isUpCapt=0;
__HAL_TIM_SET_CAPTUREPOLARITY(Htim htim,TIM_CHANNEL_4,TIM_ICPOLARITY_FALLING);
upcount=0;
}
வேறு{
ValueDown=HAL_TIM_ReadCapturedValue(Htim htim,TIM_CHANNEL_4);
isUpCapt=1;
__HAL_TIM_SET_CAPTUREPOLARITY(Htim htim,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);
அகலம்=ValueDown+upCount*65536-ValueUp;
என்றால்(அகலம்>4400&&அகலம்<4600)
{
bufferId=0;
தாங்கல்[bufferId++]= அகலம்;
}
வேறு என்றால்(bufferId>0)
{
தாங்கல்[bufferId++]= அகலம்;
என்றால்(bufferId>32)
{
rcvFalg=1;
bufferId=0;
}
}
}
}
வெற்றிடமான bitBuffer2num(சார் எண்[])
{
எண்[0]=0;
எண்[1]=0;
எண்[2]=0;
எண்[3]=0;
க்கான(int i=0;i<32;நான்++)
{
என்றால்(தாங்கல்[i+1]<1000)
{
எண்[i/8]=எண்[i/8]<<1;
}
வேறு
{
எண்[i/8]=எண்[i/8]<<1;
எண்[i/8]|=0x01;
}
}
}
/* பயனர் குறியீடு முடிவு 0 */

/**
* @ சுருக்கமாக விண்ணப்ப நுழைவு புள்ளி.
* @retval int
*/
முழு எண்ணாக(வெற்றிடமானது)
{
/* பயனர் குறியீடு ஆரம்பம் 1 */
கரி அச்சுப்பொறி[128]={0};
சார் எண்[4]={0};
எரி சாவி=0;
/* பயனர் குறியீடு முடிவு 1 */

/* MCU கட்டமைப்பு——————————————————–*/

/* அனைத்து சாதனங்களையும் மீட்டமைக்கவும், ஃப்ளாஷ் இடைமுகம் மற்றும் சிஸ்டிக்கை துவக்குகிறது. */
HAL_Init();

/* பயனர் குறியீடு தொடக்கம் */

/* பயனர் குறியீடு முடிவு துவக்கம் */

/* கணினி கடிகாரத்தை உள்ளமைக்கவும் */
SystemClock_Config();

/* பயனர் குறியீடு தொடங்கு SysInit */

/* பயனர் குறியீடு முடிவு SysInit */

/* உள்ளமைக்கப்பட்ட அனைத்து சாதனங்களையும் துவக்கவும் */
MX_GPIO_Init();
MX_TIM4_Init();
MX_USART1_UART_Init();
/* பயனர் குறியீடு ஆரம்பம் 2 */

/* பயனர் குறியீடு முடிவு 2 */

/* எல்லையற்ற வளையம் */
/* பயனர் குறியீடு எப்போது தொடங்கும் */
HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
HAL_TIM_Base_Start_IT(&htim4);//டைமர் புதுப்பிப்பு குறுக்கீட்டை உருவாக்குகிறது
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_4);//
போது (1)
{
என்றால்(rcvFalg)
{
க்கான(int i=0;i<4;நான்++)
{
bitBuffer2num(எண்);
ஸ்பிரிண்ட்எஃப்(அச்சுப்பொறி,”0xx “,எண்[i]);
HAL_UART_Transmit(&huart1, printbuff,stren(அச்சுப்பொறி),HAL_MAX_DELAY);
}
// ஸ்பிரிண்ட்எஃப்(அச்சுப்பொறி,”%u “,தாங்கல்[i]);
// HAL_UART_Transmit(&huart1, printbuff,stren(அச்சுப்பொறி),HAL_MAX_DELAY);
// }
HAL_UART_Transmit(&huart1,”\r\n”,2,HAL_MAX_DELAY);
rcvFalg=0;
}
printf(“%d\r\n”,எண்[3]);
என்றால்(எண்[3]==157)
{
printf(“111111\r\n”);
}
HAL_தாமதம்(1000);
/* பயனர் குறியீடு முடிவடையும் போது */

/* பயனர் குறியீடு ஆரம்பம் 3 */
}
/* பயனர் குறியீடு முடிவு 3 */
}

/**
* @சுருக்கமான கணினி கடிகார கட்டமைப்பு
* @retval இல்லை
*/
வெற்றிடமான SystemClock_Config(வெற்றிடமானது)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};