معماری

پروژه تنظیم سرعت موتور dc با موج PWM

پروژه ی راه اندازی موتور DC توسط PWM

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

برای اینکار از دو کلید به منظور افزایش و کاهش مقدار(duty cycle (OCR0 استفاده میکنیم تا با هر بار فشرده شدن کلید،مقدار رجیستر OCR0 افزایش (یا کاهش) پیدا کنه و به دنبال آن مقدار duty cycle زیاد (یا کم) بشه.

خب تا اینجا هممونطوری که گفته شد باید Timer0 رو فعال کنیم و خروجی و ورودی بودن پایه ها و هم چنین پول آپ بودنشون رو تنظیم کنیم که بصورت زیر در محیط کدویزارد عمل میکنیم.

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

۱)غیرفعال بودن خروجی

۲)Invert(معکوس):دراین حالت از مقدار صفر تا مقدار رجیستر OCR0 صفر بوده و در حالت Fast PWM و CTC و Normal از مقدار OCR0 تا سرریز یک هستش و در حالت Phase correct PWM از مقدار OCR0 تا OCR0 بعدی یک هست.

۳)Non-Invert(غیرمغکوس):این حالت هم برعکس حالت Invert هستش،یعنی از صفر تا مقدار رجیستر OCR0 یک و در حالتFast PWM و CTC و Normalاز مقدار OCR0 تا سرریز صفر هستش و در حالت Phase correct PWM از مقدار OCR0 تا OCR0 بعدی صفر هست.

۴)Toggle:در این حالت هم از مقداررجیستر TCNT0،از صفر تا لحظه ی برابری اش با رجیستر OCR0 هرچی باشه درآنصورت از مقدار OCR0 تا سرریز(در حالت Fast PWM و در حالت Normal و درحالت CTC)برعکس مقدار قبلی هستش.

تو این پروژه نیازی به دادن مقدار اولیه به Compare و Timer Value نیس(با کدنویسی این قسمت رو انجام میدیم).همچنین چون نمیخوام در هنگام سرریز شدن و همچنین هنگام تطابق مقایسه(=برابری رجیستر های TCNT با رجیستر OCR)وقفه ایی انجام بشه برای  همین به گزینه های Overflow Interrupt و همچنین Compare Match Interrupt تیک نمیزنم.

 

 

تو عکس بالا از پورت A برای LCD و از پایه یB.3 به عنوان خروجی تایمر صفر برای کنترل ترانزیستور و از پایه های B.2 و B.3 برای کلیدزنی استفاده میکنیم.

خب حالا میریم سراغ کدنویسی…

تو این پروژه از میکروکنترلر Atmega32 استفاده کردم که باید کتابخانه این میکروکنترلر رو فراخوانی کنیم:

#include <mega32.h>

هم چنین چون از Alphanumerica LCD استفاده کرده از دستور زیر برای فراخوانی استفاده میکنیم:

#include <alcd.h>

همونطور که میدونین LCD فقط میتونه رشته ایی از کاراکترها رو نمایش بده ولی مقداری که میخواییم نمایش بدیم (مقدار رجیستر OCR0 که در ادامه میبینین) یک عدد صحیح بوده که باید به کاراکتر تبدیل بشه برای همین از تابع sprintf استفاده میکنیم که تو کتابخانه ی stdio.h قرار داره.

#include <stdio.h>

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قالب وردپرس