তাপমাত্রা সেন্সর প্রযুক্তি

টেম্পারেচার সেন্সর প্রোব (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) এলডিও নিয়ন্ত্রকের উপর ভিত্তি করে ধ্রুবক বর্তমান উৎস সার্কিট (MD5333)
ইন্টারনেটে PT100 পরীক্ষা করার জন্য অনেক ড্রাইভিং সার্কিট রয়েছে, যেমন ডিসি ব্রিজ সার্কিট, কর্মক্ষম পরিবর্ধক উপর ভিত্তি করে ধ্রুবক বর্তমান উৎস সার্কিট, ইত্যাদি. লেখক ড্রাইভিং সার্কিট নির্বাচন করতে অনেক সময় ব্যয় করেছেন, বোর্ড তৈরির অসুবিধা এবং উপাদানের সংখ্যা বিবেচনা করে, এবং অবশেষে এলডিও নিয়ন্ত্রকের উপর ভিত্তি করে ধ্রুবক কারেন্ট সোর্স সার্কিট বেছে নেয় (MD5333). সার্কিট ডায়াগ্রামটি নিম্নরূপ:

এলডিও নিয়ন্ত্রকের ধ্রুবক বর্তমান উৎস সার্কিট (MD5333)

এলডিও নিয়ন্ত্রকের ধ্রুবক বর্তমান উৎস সার্কিট (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 সময়. সমস্ত লেখার সময় কমপক্ষে 60us প্রয়োজন, এবং কমপক্ষে 1us পুনরুদ্ধারের সময় দুটি স্বাধীন লেখার সময়ের মধ্যে প্রয়োজন. উভয় লেখার সময় হোস্ট বাস থেকে নামিয়ে দিয়ে শুরু হয়. লিখুন 1 সময়: হোস্ট একটি নিম্ন স্তরের আউটপুট, 2us এর জন্য বিলম্ব, এবং তারপর বাস ছেড়ে দেয়, বিলম্ব 60us. লিখুন 0 সময়: হোস্ট একটি নিম্ন স্তরের আউটপুট, 60us এর জন্য বিলম্ব, এবং তারপর 2us বিলম্বে বাস ছেড়ে দেয়.

DS18B20 পড়ার সময়

DS18B20 পড়ার সময়

③ পড়ার সময়
একক-বাস ডিভাইসগুলি হোস্টে ডেটা প্রেরণ করে যখন হোস্ট একটি পড়ার সময় ইস্যু করে. অতএব, হোস্ট একটি রিড ডেটা কমান্ড জারি করার পরে, একটি পড়ার সময় অবিলম্বে তৈরি করা উচিত যাতে স্লেভ ডেটা প্রেরণ করতে পারে. সমস্ত পড়ার সময় কমপক্ষে 60us প্রয়োজন, এবং দুটি স্বাধীন পড়ার সময়ের মধ্যে কমপক্ষে 1us পুনরুদ্ধারের সময় প্রয়োজন. প্রতিটি পড়ার সময় হোস্ট দ্বারা শুরু হয়, যা অন্তত 1us জন্য বাস নিচে pulls. রিড টাইমিংয়ের সময় হোস্টকে বাস ছেড়ে দিতে হবে এবং টাইমিং শুরু হওয়ার পরে 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_সক্ষম(); }যখন(0) /* পিজি পোর্ট ঘড়ি সক্রিয় */

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

/* 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_চেক(অকার্যকর); /* DS18B20 বিদ্যমান কিনা পরীক্ষা করুন */
সংক্ষিপ্ত ds18b20_get_temperature(অকার্যকর);/* তাপমাত্রা পান */

#endif

5. ইনফ্রারেড রিমোট কন্ট্রোল মডিউল
1) ওয়্যারলেস মডিউল কোডিং প্রোটোকল

ইনফ্রারেড রিমোট কন্ট্রোলের জন্য বহুল ব্যবহৃত কোডিং পদ্ধতি: PWM এর NEC প্রোটোকল (পালস প্রস্থ মড্যুলেশন) এবং ফিলিপস পিপিএম এর RC-5 প্রোটোকল (পালস পজিশন মড্যুলেশন). উন্নয়ন বোর্ডের সাথে আসা রিমোট কন্ট্রোল এনইসি প্রোটোকল ব্যবহার করে, যার নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

1. 8-বিট ঠিকানা এবং 8-বিট নির্দেশের দৈর্ঘ্য;

2. ঠিকানা এবং কমান্ড দুইবার প্রেরণ করা হয় (নির্ভরযোগ্যতা নিশ্চিত করতে);

3. PWM পালস পজিশন মড্যুলেশন, ট্রান্সমিটেড ইনফ্রারেড ক্যারিয়ারের ডিউটি ​​চক্রের সাথে প্রতিনিধিত্ব করে “0” এবং “1”;

4. ক্যারিয়ার ফ্রিকোয়েন্সি 38Khz;

5. বিট টাইম হল 1.125ms বা 2.25ms;

এনইসি প্রোটোকলে, প্রোটোকলে ডেটা কীভাবে সেট করবেন ‘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) কোড অংশ
টিম কলব্যাক ফাংশনের মাধ্যমে ক্রমবর্ধমান প্রান্তটি ক্যাপচার করুন

এই সময়ে, ডিকোড সংকেত প্রাপ্ত করা যেতে পারে:

এই সময়ে, ডেটা আরও জটিল এবং সামান্য প্রক্রিয়া করা যেতে পারে:

প্রভাব নিম্নরূপ:
শেষ দুটি সংখ্যা হল ডিকোড করা এবং এর বিপরীত কোড. এই সময়ে, তাপমাত্রা থ্রেশহোল্ড সামঞ্জস্য করার জন্য এটি একটি ম্যাক্রো হিসাবে সংজ্ঞায়িত করা যেতে পারে:

প্রভাব নিম্নরূপ:

ইনফ্রারেড অংশ কোড:

/* ব্যবহারকারী কোড শুরু শিরোনাম */
/**
******************************************************************************
* @ফাইল : main.c
* @ সংক্ষিপ্ত : প্রধান প্রোগ্রাম বডি
******************************************************************************
* @মনোযোগ
*
* <h2><কেন্দ্র>&অনুলিপি; কপিরাইট (গ) 2024 এসটিমাইক্রোইলেক্ট্রনিক্স.
* সর্বস্বত্ব সংরক্ষিত</কেন্দ্র></h2>
*
* এই সফ্টওয়্যার উপাদানটি BSD 3-ক্লজ লাইসেন্সের অধীনে ST দ্বারা লাইসেন্সপ্রাপ্ত,
* দ “লাইসেন্স”; আপনি সম্মতি ছাড়া এই ফাইলটি ব্যবহার করতে পারবেন না
* লাইসেন্স. আপনি এখানে লাইসেন্সের একটি অনুলিপি পেতে পারেন:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* ব্যবহারকারী কোড শেষ শিরোনাম */
/* অন্তর্ভুক্ত ——————————————————————*/
#অন্তর্ভুক্ত “প্রধান”
#অন্তর্ভুক্ত “tim.h”
#অন্তর্ভুক্ত “usart.h”
#অন্তর্ভুক্ত “gpio.h”

/* ব্যক্তিগত অন্তর্ভুক্ত ———————————————————-*/
/* ব্যবহারকারী কোড BEGIN অন্তর্ভুক্ত */
#অন্তর্ভুক্ত “stdio.h”
#অন্তর্ভুক্ত “string.h”
#MAXUP সংজ্ঞায়িত করুন 157
#MAXDOWN সংজ্ঞায়িত করুন 87
#MINUP সংজ্ঞায়িত করুন 221
#MINDOWN সংজ্ঞায়িত করুন 61
/* ব্যবহারকারী কোড শেষ অন্তর্ভুক্ত */

/* ব্যক্তিগত টাইপডেফ ———————————————————–*/
/* ব্যবহারকারী কোড শুরু PTD */

/* ব্যবহারকারী কোড শেষ PTD */

/* ব্যক্তিগত সংজ্ঞায়িত ————————————————————*/
/* ব্যবহারকারী কোড শুরু PD */
/* ব্যবহারকারী কোড শেষ পিডি */

/* ব্যক্তিগত ম্যাক্রো ————————————————————-*/
/* ব্যবহারকারী কোড শুরু PM */

/* ব্যবহারকারী কোড শেষ PM */

/* ব্যক্তিগত ভেরিয়েবল ———————————————————*/

/* ব্যবহারকারী কোড শুরু PV */
uint32_t upCount=0;
uint16_t ValueUp=0;
uint16_t ValueDown=0;
uint8_t isUpCapt=1;
uint16_t প্রস্থ=0;
uint16_t বাফার[128]={0};
uint16_t বাফারআইডি=0;
uint8_t rcvFalg=0;
/* ব্যবহারকারী কোড শেষ PV */

/* ব্যক্তিগত ফাংশন প্রোটোটাইপ ———————————————–*/
void SystemClock_Config(অকার্যকর);
/* ব্যবহারকারী কোড শুরু PFP */

/* ব্যবহারকারী কোড শেষ PFP */

/* ব্যক্তিগত ব্যবহারকারী কোড ———————————————————*/
/* ব্যবহারকারী কোড শুরু 0 */
অকার্যকর HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
upCount++;
}
অকার্যকর HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
যদি(isUpCapt)//যদি এটি ক্রমবর্ধমান প্রান্ত ক্যাপচার হয়
{
ValueUp=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4);
isUpCapt=0;
__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_4,TIM_ICPOLARITY_FALLING);
আপকাউন্ট=0;
}
অন্য{
ValueDown=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4);
isUpCapt=1;
__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);
width=ValueDown+upCount*65536-ValueUp;
যদি(প্রস্থ>4400&&প্রস্থ<4600)
{
বাফারআইডি=0;
বাফার[বাফারআইডি++]= প্রস্থ;
}
অন্যথায় যদি(বাফারআইডি>0)
{
বাফার[বাফারআইডি++]= প্রস্থ;
যদি(বাফারআইডি>32)
{
rcvFalg=1;
বাফারআইডি=0;
}
}
}
}
void bitBuffer2num(চার নম্বর[])
{
সংখ্যা[0]=0;
সংখ্যা[1]=0;
সংখ্যা[2]=0;
সংখ্যা[3]=0;
জন্য(int i=0;i<32;i++)
{
যদি(বাফার[i+1]<1000)
{
সংখ্যা[i/8]=সংখ্যা[i/8]<<1;
}
অন্য
{
সংখ্যা[i/8]=সংখ্যা[i/8]<<1;
সংখ্যা[i/8]|=0x01;
}
}
}
/* ব্যবহারকারী কোড শেষ 0 */

/**
* @ সংক্ষিপ্ত আবেদন এন্ট্রি পয়েন্ট.
* @retval int
*/
int প্রধান(অকার্যকর)
{
/* ব্যবহারকারী কোড শুরু 1 */
char printbuff[128]={0};
চার নম্বর[4]={0};
char কী = 0;
/* ব্যবহারকারী কোড শেষ 1 */

/* MCU কনফিগারেশন——————————————————–*/

/* সমস্ত পেরিফেরাল রিসেট করুন, ফ্ল্যাশ ইন্টারফেস এবং সিস্টিক শুরু করে. */
HAL_Init();

/* ব্যবহারকারীর কোড শুরু করুন */

/* ব্যবহারকারী কোড শেষ শুরু */

/* সিস্টেম ঘড়ি কনফিগার করুন */
SystemClock_Config();

/* ব্যবহারকারী কোড SysInit শুরু */

/* ব্যবহারকারী কোড শেষ SysInit */

/* সমস্ত কনফিগার করা পেরিফেরালগুলি শুরু করুন */
MX_GPIO_Init();
MX_TIM4_Init();
MX_USART1_UART_Init();
/* ব্যবহারকারী কোড শুরু 2 */

/* ব্যবহারকারী কোড শেষ 2 */

/* অসীম লুপ */
/* ব্যবহারকারী কোড যখন শুরু হয় */
HAL_GPIO_টগলপিন(LED0_GPIO_পোর্ট,LED0_Pin);
HAL_TIM_Base_Start_IT(&htim4);//টাইমার আপডেট একটি বাধা তৈরি করে
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_4);//
যখন (1)
{
যদি(rcvFalg)
{
জন্য(int i=0;i<4;i++)
{
bitBuffer2num(সংখ্যা);
sprintf(প্রিন্টবাফ,”0xx “,সংখ্যা[i]);
HAL_UART_Transmit(&huart1, প্রিন্টবাফ,স্ট্রেন(প্রিন্টবাফ),HAL_MAX_DELAY);
}
// sprintf(প্রিন্টবাফ,”%u “,বাফার[i]);
// HAL_UART_Transmit(&huart1, প্রিন্টবাফ,স্ট্রেন(প্রিন্টবাফ),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 কোনটিই নয়
*/
void SystemClock_Config(অকার্যকর)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};