پالس شمار آردوینو ATmega

پالس شمار آردوینو ATmega

24.06.2023

سیگنال را پیاده سازی کرد PWM 25 کیلوهرتز. من اسیلوسکوپ ندارم، اما می خواهم نتیجه را بررسی کنم. نبض شمار درست می کنیم و کار را چک می کنیم.

وظیفه

روی پایه ATmega 328Pیک شمارنده پالس برای بررسی اجرا کنید PWM 25 کیلوهرتز، دقت اندازه گیری تا پالس مورد نیاز نیست، اما باید ترتیب آن مشخص شود.

راه حل

منطق راه حل ساده است، ما پالس هایی را دنبال می کنیم که به وسیله آنها متغیر سراسری را در طول یک ثانیه افزایش می دهیم. مقدار انباشته شده فرکانس سیگنال ورودی خواهد بود.

برای خواندن پالس ها از وقفه های خارجی استفاده می کنیم که در صفحات توضیح داده شده است 87-96 اسناد از سازنده که در Atmega 328Pدو ورودی وجود دارد که با آنها می توانیم وقفه های خارجی را نظارت کنیم INT0 (PD2)و INT1 (PD3)، برای حل مشکل استفاده خواهیم کرد INT0.

پیکربندی وقفه های خارجی

اولین کاری که باید انجام دهید این است که پورت را پیکربندی کنید Dبه عنوان ورودی، و برای جلوگیری از تداخل، یک مقاومت کششی وصل خواهم کرد.

برای تعیین اینکه کدام رویدادها کنترل کننده وقفه را فعال می کنند، باید رجیستر را پیکربندی کنید اریکا. بیت ها ISC00و ISC01مسئول هستند INT0، آ ISC10و ISC11پشت INT1.پیکربندی رویدادهای نظارت شده یکسان است، به جز تفاوت در بیت ها:

00 - سطح سیگنال پایین؛
01 - هرگونه تغییر منطقی در سیگنال؛
10 - لبه نزولی سیگنال؛
11 - لبه بالارونده سیگنال.

برای فعال کردن مستقیم ورودی های وقفه، از ثبات استفاده کنید EIMSK، بیت ها INT0و INT1مسئول خروجی های همنام هستند. با استفاده از موارد بالا کد را می نویسیم

Void int0_initial(void) (DDRD = 0x00; // پورت D به عنوان ورودی PORTD = (1<< 2); // Включение подтягивающего регистра EICRA = (1 << ISC00) | (1 << ISC01); // Восходящий фронт сигнала EIMSK = (1 << INT0); // Включение входа прерывания sei(); // Разрешаем прерывания }

مدیریت وقفه های خارجی

من وقفه ها را پیکربندی کرده ام، اکنون باید آنها را پردازش کنم. یک تابع وقفه برای این منظور وجود دارد. ISR()، که باید نوع وقفه را در مورد من مشخص کند INT0_vect. در تابع متغیر را افزایش خواهیم داد Tic_Count:

ISR(INT0_vect) (Tic_Count ++; )

خروجی نتیجه

برای تسهیل در خروجی نتیجه، به طوری که صفحه نمایش را پیچ نکنید، از یک غیر تمیز استفاده کردم ATmega 328P، آ آردوینو UNOو آردوینو نانو، روی کشتی که همان MK است.

همانطور که در بالا نوشتم، دقت اندازه گیری ها چندان مهم نیست، بنابراین من تایمر را تنظیم نمی کنم، بلکه مقدار انباشته متغیر را در حلقه اصلی یک بار در ثانیه نمایش می دهم. Tic_Countو آن را ریست کنید. در طول این اقدامات، پردازش وقفه ها را متوقف می کنم.

در زیر کد کامل برای حل مشکل با نظرات آمده است:

#تعریف F_CPU 1600000UL #شامل #عبارتند از volatile unsigned int Tic_Count = 0; // کنترل کننده وقفه خارجی INT0 ISR(INT0_vect) ( Tic_Count ++; ) void setup() ( int0_initial(); Serial.begin(9600); ) void loop() (cli(); // وقفه ها را غیرفعال کنید Serial.println( Tic_Count؛ Tic_Count = 0؛ sei(); // فعال کردن تاخیر وقفه ها(1000)؛ ) void int0_initial(void) (DDRD = 0x00؛ // پورت D به عنوان ورودی PORTD = (1<< 2); // Включение подтягивающего регистра EICRA = (1 << ISC00) | (1 << ISC01); // Восходящий фронт сигнала EIMSK = (1 << INT0); // Включение входа прерывания sei(); // Разрешаем прерывания }

اکنون تنها چیزی که باقی می ماند این است که سیگنال PWM را به پین ​​PD2 متصل کرده و مانیتور پورت سریال را باز کنید. شما همچنین می توانید یک سیگنال را در یک MK تولید و آزمایش کنید.

قرائت های خروجی تقریباً برابر با فرکانس محاسبه شده قبلی است، تفاوت های جزئی به دلیل پیاده سازی انتظار می رود. برای اندازه گیری دقیق، احتمالاً صحیح تر است که زمان بین پالس ها را بشماریم و فرکانس را از این طریق محاسبه کنیم.

این مقاله شامل تمام داده‌های مربوط به کنتور برق مبتنی بر آردوینو، از جمله نمودارها، سیستم عامل، نظرات در مورد بهبود نسخه و طراحی سفت‌افزار فعلی است.

این چیزی است که در پایان به نظر می رسد.

در ابتدا، من تمام اطلاعات را به انبوهی از مقالات کوچک تقسیم کردم - که یافتن آن و تکرار این دستگاه را بسیار ناخوشایند کرد. این مقاله این وضعیت را اصلاح می کند.

بخش 1. ایده، طراحی و تفکر با صدای بلند.

چند وقت پیش یک کنتور برق دو منطقه ای نصب کردم تا از تعرفه شبانه مطلوب تر (50% از 2300 تا 0800) استفاده کنم. معلوم شد که ما 45 درصد برق را در شب مصرف می کنیم. اما پاسخ این است که مصرف از نظر مکان های مصرف چگونه اتفاق می افتد. البته این دستگاه اینطور نیست.

بنابراین، نیاز به ارائه دقیق‌تر داده‌های مصرف وجود داشت. در ابتدا تصمیم گرفته شد دستگاهی ساخته شود که داده های زیر را نشان دهد:

  1. قدرت بار فعلی
  2. مصرف از اول روز
  3. مصرف از اول ماه
  4. درصد مصرف شبانه بر حسب درصد

دستگاه همچنین باید داده‌های مصرف 24 ساعت گذشته را در قالب 24 شمارش به یک آدرس اینترنتی سفارشی ارسال کند. فاصله انتقال - تنظیم در دقیقه 1...120.

پارامترهای تنظیم شده در منو:

  1. ساعت در RTC
  2. دقیقه در RTC
  3. یک روز در RTC
  4. ماه در RTC
  5. سال در RTC
  6. فاصله شمارش 1…120
  7. آدرس شبکه نشان دهنده نمادهای موقعیتی: "a-z0-9_-/: ". نماد ویرایش شده باید برجسته شود تا مشخص شود دقیقاً چه چیزی در حال ویرایش است.

نسخه اولیه دستگاه بر اساس مجموعه ماژول های زیر ساخته خواهد شد:

  1. (توضیح در مورد اتصال نشانگر به مگا 2560)

این دستگاه برای روشن شدن میزان مصرف کارگاه، دستگاه های رسانه ای و ظروف آشپزخانه جالب است. در نتیجه، شما باید داده ها را در قالب نمودار، در اینترنت یا در یک سرور شبکه محلی () به دست آورید.

نمودار اتصال اولیه برای واحد اندازه گیری.

مدار اندازه گیری برق و ولتاژ را قرض گرفتم. توان متوسط ​​محاسبه می شود، و نه تنها، بسیاری از پارامترهای دیگر، مانند فرکانس، ضریب توان. ابتدا باید چنین پایه کوچکی را برای اندازه گیری جمع آوری کنید.

یک تخته نان برمیدارم، دنبال یک ترانسفورماتور مناسب برای اندازه گیری ولتاژ میگردم (از میز ATX میگیرم) و خاموش میشوم.

UPD. واحد اندازه گیری

قسمت 2.1 نکاتی در مورد ویژگی های شگفت انگیز ENC28J60

چیز شگفت انگیز. امروز شروع به حفاری یک ماژول برای کار با اترنت برای پروژه "counter" کردم. چه کسی به آن شک کند، سرگرم کننده بود، و همه چیز در نهایت کار کرد.

با اتصال. بیایید ببینیم که در کجا می توان رابط SPI را با آردوینو مگا یا شما پیدا کرد. بیایید وصل شویم. خروجی CS (انتخاب تراشه) را هر کجا که بخواهیم آویزان می کنیم، سپس به طور جداگانه در مقداردهی اولیه کتابخانه مشخص می شود. من آن را روی پین 42 "آویزان" کردم، ممکن است چیز دیگری داشته باشید. بقیه MOSI/MISO/SS/OV/3.3V به پین ​​های آردوینو مربوطه متصل می شوند.

مشخص شد که به منظور کاهش مصرف حافظه، توسعه‌دهنده کتابخانه «شگفت‌انگیز» EtherCard تصمیم گرفت رشته‌هایی را برای درخواست GET به حافظه برنامه ارسال کند. یعنی تصور کنید که فلان برنامه نویس آزاد ناگهان تصمیم گرفت خودش را یک شمارنده بسازد. برای اینکه همه چیز هوشمند شود، او تصمیم گرفت خط URL را که در آن داده ها ارسال می شود، ویرایش کند. و حتی امروز این کار را انجام دادم:

و بنابراین، او کتابخانه را وصل می کند و فکر می کند که اکنون می تواند به راحتی درخواستی را به یک سرور خارجی ارائه دهد. اما نه. پس از همه، او سرور را به عنوان یک رشته مشخص کرد. و یک خط، متأسفانه، حافظه برنامه نیست. معماری هاروارد همه چیز تقسیم شده است.

هیچی، من سریع به کتابخانه رفتم، جایی را که درخواست پر می شد پیدا کردم، آن را به هم ریختم، البته به نظر من همه چیز "غیر ضروری" را برداشتم. در پایان همه چیز عالی کار می کند.

من یک کتابخانه و نمونه کار با سروری که برای رشته ها کار می کند را پیوست می کنم. و نه تنها برای مقادیری که در برنامه قابل تغییر نیستند. به همراه یک مثال -

با پیشرفت پروژه، فقط مشکل قسمت اندازه گیری باقی مانده است که حل شود، بقیه موارد قبلاً حل شده است. سخت ترین قسمت برنامه ویرایش رشته URL بود.

ویژگی اتصال فقط DHCP است، من نمی‌خواهم یک IP ثابت تنظیم کنم و انتخاب کنم، همه چیز کاملاً درست کار می‌کند و نیازی به اضافه کردن عملکردی نیست که به آن نیازی ندارم.

قسمت 3. اشکال زدایی اولیه نرم افزار متر

امروز کمی با اشکال زدایی نرم افزار شمارنده سر و کله زدم. واقعیت این است که من به اشتباه یک مقاومت کاهنده را روی سنسور CT نصب نکردم و در نتیجه ولتاژ بیش از حد به ورودی نفوذ کرد و همچنین نویز زیادی. آن را تصحیح کرد، 150 اهم به موازات سنسور CT لحیم کرد، در مجموع معلوم شد که حدود 100 اهم است.

باید ضرایب رو تو برنامه کمی تنظیم میکردم تنظیمش کردم... طبق شمارنده چینی. سپس روی ولت متر. تا حد امکان نزدیکش کردم.

در نتیجه، اندازه گیری مصرف EH برای جوشاندن کتری همان چیزی است که در وات متر چینی نشان می دهد. در حال حاضر خوب است، اما باید به نحوی آن را با استفاده از شمارنده اصلی بررسی کنید.

حرف h بعد از kW روی صفحه نمایش قرار نمی گیرد، اما باید درک کنید که وجود دارد. عدد مصرف را از ابتدای ساعت جاری نشان می دهد. در پایان ساعت به سرور منتقل می شود و به صفر می رسد. سپس، احتمالاً روزی یک بار آن را بازنشانی خواهم کرد.

نرم افزار متر به شکل فعلی -

قسمت 4. ساختن قسمت اول بدن

من کیس را امروز ساختم، مواد مشابه دفعه قبل است - کاپرولون 11 میلی متر. بست در واقع روی پیچ های سر M4 است، آخرین باری که M3 همه جا وجود داشت. این نسبتاً برای بدن ضعیف است.

برای مقیاس، ماوس هوا را داخل آن قرار دادم.

تنها چیزی که باقی می ماند این است که پانل جلویی را بسازید، ماژول ها را ایمن کنید، برای USB و برق 12 ولت آسیاب کنید. در مورد این دستگاه احتمالاً 0.7 آمپر کافی خواهد بود، یعنی می توانید از چیزی در اندازه کوچک استفاده کنید.

قسمت 5 ساخت پنل جلویی

قسمت 9. نرم افزار به روز شده بر اساس نتایج عملکرد دستگاه

در حین کار برای حدود یک ماه، به این نتیجه رسیدم که لازم است انتقال برق مصرفی فعلی، در ابتدای ماه اضافه شود. علاوه بر این، وب سرور مجموعه را به داخل زیرشبکه خود منتقل کردم و انتقال داده به خارج را متوقف کردم. چون بعضی ها موفق نشدند. بنابراین، قابلیت اطمینان جمع‌آوری داده‌ها افزایش یافته است. خب، در اینجا جدیدترین سیستم عامل - .

به روز رسانی 23/09/2015. امروز یک رابط برای مشاهده داده های مانیتورینگ نوشتم. در همان زمان فریمور را بهینه کردم و خطاهایی در آن یافتم. من سرور DNS داخلی را بالا بردم، چند دقیقه طول می کشد.

من فقط 48 ساعت گذشته (آمار را از دست دادم، بنابراین در نمودار کمتر وجود دارد) را به شکل یک نمودار هموار نشان دادم. چلپ چلوپ شروع کار ماشین لباسشویی است، با توجه به U - قیمت در hryvnia برای ساعت جاری، البته با در نظر گرفتن تعرفه شب. توسط X - تاریخ/زمان.

حالا می توانید کمی ببینید چه خبر است. یک نکته ظریف - برای ثبات بیشتر همه چیز را در شبکه خانگی قرار دادم.

قبلاً نوشتم که یک نرم افزار استاندارد را برای نشان دادن مصرف برق (emoncms) امتحان کردم. پارادایم و رویکردی که برای من قابل درک نیست. اونجا هر سه ثانیه یکبار داده به سرور میفرسته و یه چیزی نشون میده. من این کار را متفاوت انجام دادم - دستگاه داده ها را به مدت 1 ساعت جمع می کند، سپس آن را برای 24 ساعت گذشته ارسال می کند. وب سرور راه اندازی نشده است، یک NAS با مصرف انرژی کم است.

UPD. معلوم شد که این اینترنت من نیست، این دستگاه گاهی اوقات داده ها را منتقل نمی کند. مشخص نیست که چه چیزی باعث آن شده است، و گرفتن آن دشوار است، بنابراین من راه دیگری را انتخاب کردم - با محاسبه قرائت های میانی بر اساس نرخ جریان فعلی. حدود 1-2 بار در روز خراب می شود. این طرح به شما امکان می دهد از ذخیره داده های ساعتی در eeprom خودداری کنید، که به دلایلی نیز کاملاً درست کار نمی کند.

UPD. من کمی نرم افزار وب سایت را تکمیل کرده ام که داده ها را نمایش می دهد. در حال حاضر ولتاژ به ساعت، ساعت و هزینه های روزانه وجود دارد.

من به ارسال نرم افزار در Github فکر می کنم. شاید. بنابراین خواهد بود.

نه، این مقاله درباره راه دیگری برای فریب این دستگاه ناگوار نیست. در اینجا در مورد نحوه استفاده از آردوینو و محیط LabView برای تبدیل کنتور برق به مانیتور مصرف برق یا حتی آمپرمتر صحبت خواهیم کرد!


اولین کنتور برق القایی بود. اصل عملکرد آن به طرز مضحکی ساده است - اساساً یک موتور الکتریکی است که روتور آن یک دیسک آلومینیومی است که صفحه را می چرخاند. هر چه جریان بیشتر مصرف شود، دیسک سریعتر می چرخد. دستگاه کاملا آنالوگ است.

با این حال، امروزه کنتورهای القایی در حال از دست دادن زمین هستند و جای خود را به همتایان الکترونیکی ارزان‌تر خود می‌دهند. و فقط یک نفر از این قبیل به سوژه آزمون تبدیل می شود:

اصل کار تغییر چندانی نکرده است - در این مورد، دیسک با الکترونیک جایگزین می شود، که پالس هایی را مطابق با مقدار برق مصرف شده تولید می کند. به عنوان یک قاعده، در اکثر دستگاه ها این پالس ها با یک نشانگر LED نشان داده می شوند. بر این اساس، هر چه این چراغ سریعتر چشمک بزند، کیلووات گرانبهای بیشتری می سوزد.
علاوه بر این، در پانل جلوی هر دستگاه نسبت دنده متر وجود دارد آ- تعداد پالس در هر 1 کیلووات ساعت. همانطور که از عکس مشخص است، آزمودنی دارای 12800 = A است. از این اطلاعات می توان نتایج زیر را به دست آورد:

با هر پالس، متر مصرفی معادل 1/12800 از 1 کیلووات ساعت را ثبت می کند. اگر باری را به متر وصل کنید و فقط شروع به شمارش پالس ها کنید، می توانید به راحتی مقدار برق مصرفی آن (کیلووات ساعت) را با تقسیم تعداد پالس ها بر نسبت دنده بدست آورید.

از آنجایی که نشانگر سرعت چشمک زدن خود را تغییر می دهد، می توان رابطه ای بین توان (کیلووات) و زمان پالس یک متری بدست آورد که داده های مربوط به توان / جریان را ارائه می دهد.
ما مقاله را با محاسبات بارگذاری نمی کنیم، اما در صورت لزوم،

آن ها اینجا هستند

در واقع، نسبت دنده متر یک چیز عالی است، زیرا با دانستن آن می توانید هم قدرت و هم جریان را بیان کنید:
بیایید نسبتی را از نسبت دنده خود (A = 12800 imp/kWh) و نسبت دنده ناشناخته، که در بار X و در طول یک پالس (چشمک زدن یک لامپ) خواهد بود، ایجاد کنیم:

در اینجا X توان مجهول است و t زمان یک پالس است. قدرت مجهول را از اینجا بیان می کنیم و اینجاست:

جریان با استفاده از نسبت زیر نسبت های انتقال و جریان های شناخته شده و ناشناخته در بار X محاسبه می شود:


که به طور کلی منجر به یک فرمول یکسان می شود، اما برای جریان (جریان با آمپر اندازه گیری می شود و شاخص ها نشان دهنده باری است که این جریان در آن رخ می دهد):

در اینجا می توانید متوجه یک دام شوید - باید جریان را در بار ایده آل 1 کیلو وات بدانید. اگر دقت خوبی لازم است، بهتر است خودتان آن را اندازه گیری کنید، و اگر نه، می توانید تقریباً با استفاده از فرمول (ولتاژ و توان مشخص است) آن را محاسبه کنید، اما خشن تر خواهد بود، زیرا ضریب توان در نظر گرفته نشده است. حساب.


بنابراین، همه چیز به اندازه گیری زمان یک ضربه (چشمک زدن نشانگر) ختم می شود. در تحقیقاتم بر این پروژه عالی تکیه کردم. یک ایتالیایی یک رابط برای مانیتورینگ توان در محیط Labview ساخت و مداری برای اندازه گیری پالس ها ساخت. اما پروژه او یک نقص بزرگ داشت - فقط برای مترهایی با نسبت دنده 1000 imp/kWh مناسب بود.

نمودار بالا میانگین توان برای 5 دقیقه است، پایین در زمان واقعی است. رابط کاربری کاملاً منعطف است و به راحتی می توان آن را مطابق با نیازهای شما تغییر داد. اگر هنوز با محیط لب ویو سروکار نداشته اید، توصیه می کنم با آن آشنا شوید.

برای اینکه همه چیز کار کند، کافی بود طبق فرمول بالا یک بلوک به الگوریتم برنامه اضافه کنید.

به نظر می رسد این است


به نظر ساده می رسد، اما هنوز باید در مورد آن فکر کنید!

بنابراین، اگر هنوز تصمیم به اجرای نظارت بر قدرت دارید، دو گزینه وجود دارد:

1. کنتور شما بسته و مهر و موم شده است، پس با آن بازی نکنید. این بدان معنی است که پالس ها را فقط می توان با استفاده از مقاومت نوری که به چشمک زدن یک لامپ پاسخ می دهد، خواند. باید با نوار برق آبی در مقابل نشانگر LED روی پانل جلوی کنتور وصل شود.
نمودار به شکل زیر خواهد بود:

مدار برای پیکاپ پالس بدون تماس


این برنامه به سادگی مقدار مقاومت روی مقاومت نوری و پتانسیومتر را مقایسه می کند. علاوه بر این، دومی به شما امکان می دهد حساسیت چنین سنسوری را تنظیم کنید تا از مثبت کاذب جلوگیری کنید و روشنایی نشانگر را تنظیم کنید.

2. شما به خروجی پالس شمارنده دسترسی دارید. بسیاری از مدل ها دارای یک خروجی پالس هستند که چشمک زدن نور را تکرار می کند. این کار به گونه ای انجام می شود که امکان اتصال دستگاه به سیستم حسابداری خودکار وجود دارد. ترانزیستوری است که با روشن بودن نشانگر باز می شود و با خاموش شدن بسته می شود. اتصال مستقیم به آن آسان است - تنها چیزی که نیاز دارید یک مقاومت کششی است. با این حال، قبل از انجام این کار، مطمئن شوید که یک خروجی پالس است و نه چیز دیگری! (همیشه یک نمودار در گذرنامه وجود دارد)

نمودار برای اتصال به خروجی تله متری


در مورد من، دسترسی کامل است، بنابراین من زیاد مزاحم نشدم. LabView را نصب کنید و شروع به اندازه گیری کنید! همه نمودارها قدرت (W) را در زمان واقعی نشان می دهند.
اولین چیزی که توزیع شد قوری با رنج بود. درب می گوید که قدرت آن 2.2 کیلو وات است، اما با قضاوت بر اساس نمودار، به طور منظم فقط 1700 وات مصرف می کند. توجه داشته باشید که مصرف در طول زمان کم و بیش ثابت است. این بدان معنی است که عنصر گرما (به احتمال زیاد نیکروم) مقاومت خود را در طول کل فرآیند جوش بسیار کمی تغییر می دهد.

تفنگ چسب موضوع کاملاً متفاوتی است - قدرت اعلام شده 20 وات است. مطابق با قوانین فیزیک رفتار می کند - هنگام گرم شدن، مقاومت بخاری افزایش می یابد و جریان بر این اساس کاهش می یابد. با مولتی متر چک کردم همه چی خوبه.

گیرنده رادیویی قدیمی "بهار". در اینجا نمودار در ابتدا بالا رفت به دلیل این واقعیت که من اندازه گیری را در طول پالس شروع کردم که بر این اساس بر داده ها تأثیر گذاشت. اسلایدهای روی نمودار نشان می دهد که چگونه دکمه صدا را چرخانده ام. هر چه بلندتر باشد، رادیو بیشتر می خورد.

یک مته چکشی با قدرت اعلام شده 700 وات. دکمه را تا آخر فشار دادم، کمی صبر کردم و رها کردم، اما نه به آرامی. نمودار به وضوح افزایش جریان را هنگام راه اندازی موتور نشان می دهد. به همین دلیل است که وقتی همسایه مهربان شروع به چکش زدن روی دیوار مورد علاقه خود می کند، چراغ چشمک می زند.

الان قسمت خوبش شروع میشود. من یک آزمایش کوچک با لپ تاپ قدیمی خود انجام دادم که نتیجه آن در تصویر نشان داده شده است:

نقطه نارنجی زمانی را مشخص می کند که چندین برنامه «سنگین» را همزمان راه اندازی کردم. همانطور که می بینید، نمودارهای بار پردازنده و افزایش مصرف وجه اشتراک دارند. اخیرا من بودم

برای یک کار اضافی

نمودار شماتیک

طرح روی تخته نان

توجه داشته باشید

    در این آزمایش، ما برای اولین بار از یک تراشه استفاده می کنیم، در این مورد یک رجیستر شیفت خروجی 74HC595. ریز مدارها به این دلیل مفید هستند که به شما اجازه می دهند یک مشکل خاص را بدون مونتاژ یک مدار استاندارد هر بار حل کنید.

    یک ثبات خروجی به ما اجازه می دهد که خروجی های دیجیتال را با استفاده از تنها 3 به جای 8 "ذخیره" کنیم. یک آبشار ثبات به ما امکان می دهد 16 و غیره تولید کنیم. از طریق همان سه پین ​​سیگنال می دهد.

    قبل از استفاده از میکرو مدار، باید نمودار اتصال آن را در دیتاشیت به دقت مطالعه کنید. برای اینکه بفهمید پایه های ریزمدار کجا باید بشمارید، یک بریدگی نیم دایره ای در یک طرف آنها وجود دارد. اگر 74HC595 خود را با بریدگی سمت چپ قرار دهیم، ردیف پایین دارای پایه های 1-8 و ردیف بالا دارای 16-9 خواهد بود.

    در نمودار مدار آزمایش ما، پاها به ترتیب متفاوتی قرار گرفته اند تا از سردرگمی در اتصالات جلوگیری شود. تخصیص پین ها مطابق با دیتاشیت در داخل تصویر ریزمدار برچسب گذاری شده اند، شماره پین ​​ها در خارج هستند.

    به یاد بیاوریم که تصویر نشانگر هفت بخش با شماره پاهای آن و مطابقت آنها با بخش ها برچسب گذاری شده است.

طرح

برای انتقال یک قطعه داده که از طریق شیفت رجیستر ارسال می‌شود، باید LOW را به پین ​​لچ (ورودی ST cp تراشه) اعمال کنیم، سپس داده‌ها را ارسال کنیم و سپس HIGH را به پایه لچ ارسال کنیم. پس از آن ترکیبی از سطوح سیگنال بالا و پایین ارسال می شود.

برای انتقال داده از تابع shiftOut (dataPin، clockPin، bitOrder، مقدار) استفاده کردیم. تابع چیزی را بر نمی گرداند، اما باید به عنوان پارامتر گفته شود

  • پین آردوینو که به ورودی DS تراشه (پایه داده) متصل است.

3

نه تنها می توانید این کار را بدون کنترل کننده وقفه انجام دهید، بلکه می توانید این کار را با نرم افزار کم یا بدون نرم افزار انجام دهید و با پالس های سریع تر که با نظرسنجی نرم افزاری یا شمارش وقفه امکان پذیر است، مقابله کنید.

Atmel AVR که اکثر آردوینوها مبتنی بر سخت‌افزار شمارنده/تایمر هستند که مستقیماً پالس را در پین ورودی می‌شمارند. تنها کاری که باید انجام دهید این است که سخت افزار را برای اجرای شمارنده و خواندن رجیستر شمارنده پیکربندی کنید. برای شمارنده های 16 بیتی در دستگاه های 8 بیتی یک عارضه جزئی وجود دارد، اما غلبه بر آن آسان است. آردوینو به طور پیش‌فرض تایمرها را برای عملیات PWM پیکربندی می‌کند، اما همانطور که توضیح داده شد می‌توان آن را نادیده گرفت (برای جزئیات به راهنمای کاربر AVR مراجعه کنید) - باید از یک تایمر/ شمارنده در حالت CTC استفاده کنید.

ARM مبتنی بر Arduninos و تقریباً هر میکروکنترلر دیگری سخت افزار مشابهی خواهند داشت. برخی از آنها انعطاف پذیری بیشتری دارند، بنابراین می توان از پین ها برای شمارش تجهیزات استفاده کرد.

در AVR شمارنده های 8 و 16 بیتی دارید، اگر به تعداد زیادی نیاز دارید، ممکن است مجبور شوید وقفه سرریز را مدیریت کنید. اگر به طور منظم شمارنده را بررسی کنید، می‌توانید حتی این را بدون وقفه پردازش کنید، و قادر خواهید بود با سرعت بسیار آهسته‌تر و احتمالاً نامتناوب نسبت به نرخ پالس ورودی، صرفاً با نظرسنجی پرچم سرریز قبل از سرریز بعدی، نظرسنجی انجام دهید.

در مورد شما، احتمالاً باید تعداد پالس‌ها را در یک دوره منظم بخوانید که کمتر از زمانی است که شمارنده با حداکثر نرخ پالس مورد انتظار سرریز می‌شود. بنابراین، برای مثال، اگر از یک شمارنده 8 بیتی استفاده می کردید و حداکثر ضربان قلب 1 کیلوهرتز بود، باید هر 256/1000 ثانیه یا کمتر نظرسنجی کنید، اما بیشترین دقت را می توان با طولانی کردن این بازه زمانی به دست آورد. ممکن است. بنابراین برای مثال می‌توانید چیزی شبیه به زیر داشته باشید (این کد واقعی نیست و فقط یک قطعه است):

For(;;) ( delayMS(250) ; فرکانس = 4 * readCounter() ;)

جایگزینی که پاسخ خطی‌تری دریافت می‌کند، اما یک شمارش غیر قطعی، سرریزها را بررسی می‌کند و زمان لازم برای شمارش تعداد ثابتی از پالس‌ها را اندازه‌گیری می‌کند، و بنابراین اندازه‌گیری شما را از یک نقطه در زمان برای یک شمارش ثابت تعریف می‌کند. برای یک زمان ثابت حساب کنید

برای(;;) ( int start = getMillisec() ; while(!counterOVF()) ( // هیچ کاری (یا کاری مفید اما سریع انجام ندهید) ) int t = getMillisec() - start ; فرکانس = 256 * t/1000 ; )

0

خیلی ممنون از سوال شما. اگر درست متوجه شده باشم، ایده اول شما این است که پالس ها را با استفاده از سخت افزار غیرفعال کنید و دوم این است که وقتی CPU مشغول است، پالس ها را همیشه غیرفعال کنید. مشکل این است که میکروکنترلر من کاملاً بارگذاری شده است (بنابراین یک ISR ساده که یک متغیر شمارش را افزایش می دهد کار نمی کند) و نمی توان آن را نظرسنجی کرد زیرا وظایف دیگری برای انجام دارد. همچنین من دیگر هیچ شمارنده سخت افزاری ندارم. آیا جایگزین های دیگری وجود دارد؟ من شنیده ام که این کار با استفاده از پورت های آنالوگ (با تکیه بر شباهت به PWM) امکان پذیر است. بسیار از شما متشکرم - ماناتا 28 اوت 14 2014-08-28 08:16:36

0

در هر دو مورد، شمارنده سخت‌افزار شمارش را انجام می‌دهد، در مثال دوم نظرسنجی من پرچم سرریز را بررسی می‌کند، اما این فقط برای نشان دادن اصل است، این یک راه‌حل اساسی نیست. می تواند به همان اندازه یک کنترل کننده وقفه باشد - مزیت این است که شما به ازای هر 256 پالس (با فرض شمارشگر 8 بیت) یک وقفه دریافت می کنید تا هر پالس، بنابراین سربار وقفه بسیار کمتر است. - کلیفورد 28 اوت 14 2014-08-28 11:10:07

0

فقط در صورتی می توانید از ورودی آنالوگ استفاده کنید که خروجی سنسور یک PWM با فرکانس ثابت باشد (و فیلتر آنالوگ مناسب را با قطعی کمتر از آن فرکانس اضافه کرده باشید)، اما سوال شما نشان می دهد که فرکانس متغیر است و نه PWM (در غیر این صورت) چگونه شمردن نبض ها کمک می کند؟). -



© 2023 globusks.ru - تعمیر و نگهداری خودرو برای مبتدیان