مجتبی آهنگری
مجتبی آهنگری
خواندن ۷ دقیقه·۴ سال پیش

شبیه سازی پمپ آب با میکروکنترلر Atmega32

مقدمه:

با صنعتي شدن كشور ها مديريت منابع ابي از حالت هاي دستي به سمت حالت هاي اتوماتيك و الكتريكي پيش رفته است. امروزه در اكثر مناطق براي كنترل اب از پمپ هاي جابه جا كننده(مكنده) اب استفاده مي شود و براي كنترل مخازن وجو فردي ناظر براي روشن و خاموش كردن پمپ ها ضروري است اما با پيشرفت تكنولوژي توليد و توسعه كيت هاي كنترل كننده اب نسبت به قبل افزايش يافت كه جايگزين مناسبي براي فرد ناظر مي باشد. در اين پروژه ما با نرم افزار هاي Proteus  و   Code Vision يك كنترلر پمپ اب طراحي كرده ايم كه علاوه بر قطع و وصل كردن پمپ اب ميزان اب مخزن را در مانيتوري كوچك نمايش مي دهد.

ابزار ها :

در اين پروژه از دو ابزار Proteus  و   Code Vision استفاده شده است. در اين پروژه از برد ATMEGA32 براي توسعه استفاده شده است.

Proteus :

شرح : proteus برنامه اي کاربردي و کارآمد براي دوستان الکترونيکي! با استفاده از اين نرم افزار ميتوانيد براحتي انواع مدارها , ميکروکنترلرها , ميکروپروسسر هارا طراحي و حتي اجرا کرد تا مشاهده نمود در حالات مختلف اين مدار چه واکنشي نشان ميدهد و جه خروجي خواهد داشت و در صورت وجود هر گونه خطا برنامه را ديباگ کرد در ادامه ويژگي هاي اين برنامه کاملا شرح داده ميشود.

نرم افزار پروتئوس دو بخش اصلي دارد.

بخش Schematic Capture براي طراحي و شبيه سازي مدارات الکترونيکي و بخش PCB Layout براي طراحي برد مدار چاپي است.

در بخش Schematic Capture نرم افزار پروتئوس مي توان مدارات الکترونيکي آنالوگ و ديجيتال را شبيه سازي کرد.

يکي از قابليت هاي نرم افزار پروتئوس اين است که از برخي ميکروکنترلرهاي AVR، برخي ميکروکنترلرهاي شرکت Microchip Technology، برخي ميکروکنترلرهاي شرکت NXP Semiconductor، برخي ميکروکنترلرهاي شرکت STMicroelectronics و ... پشتيباني مي کند و مي توان با استفاده از نرم افزار پروتئوس به شبيه سازي مدارات مبتني بر اين ميکروکنترلرها و ديباگ و شبيه سازي نرم افزاري برنام? نوشته شده براي اين ميکروکنترلرها پرداخت.

اين نرم‌افزار از نظر قدرت، آساني و انعطاف‌پذيري به‌ويژه براي مبتدي‌ها و نسبت به نرم‌افزارهاي ديگر، بسيار مورد توجه قرار گرفته‌است.

قابليت‌هاي نرم افزار Proteus:

طراحي مدارات الکترونيکي

شامل ابزار‌هاي لازم براي طراحي حرفه‌اي

مدلسازي دستگاه‌هاي قابل برنامه ريزي

طراحي مسيريابي‌هاي پيشرفته

صرفه جويي در وقت و هزينه طراحي مدار

شبيه سازي مدارات ميکرو کنترلري در سطح بسيار حرفه‌اي

دارا بودن کليه المان‌هاي اندازه گيري واقعي نظير اسيلوسکوپ، سيگنال ژنراتور، ولت متر، آمپر متر و...

امکان افزودن کتاب خانه‌هاي قدتمند و دارار بودن کليه قطعات الکترونيک

امکان طراحي pcb براي مدار شبيه سازي شده بدون نياز به تغيير دادن مدار

امکان ديباگ کردن برنامه‌ها و اجراي خط به خط آن‌ها در ميکرو کنترلر

و ...

Code Vision :

شرح :  يک نرم افزار تخصصي براي رشته هاي برق و الکترونيک (گرايش سخت افزار) مي باشد. در واقع اين نرم افزار يک کامپايلر براي زبان برنامه نويسي C مي باشد که براي برنامه نويسي ميکروکنترلر هاي AVR از آن استفاده مي شود. اين برنامه محيط برنامه نويسي و کامپايل کردن برنامه نوشته شده براي برنامه ريزي ميکروکنترلر را براي شما فراهم مي کند.

بسياري از افراد حتي کساني که رشته کامپيوتر مي باشند با اين نرم افزار بخوبي آشنا مي باشند. آخرين نسخه اين برنامه قدرت بسيار بيشتري پيدا کرده است و از طرفي مشکلات قبلي آن برطرف شده است. اين برنامه در تمامي نسخه هاي ويندوز قابل نصب است.

Page Break

ATMEGA32:

میکروکنترلر  ATMega32یک میکروکنترلر  ۸بیتی کم مصرف از تکنولوژی  CMOSو از خانواده MEGA AVR است که بر اساس معماری  RISCبهبود یافته می باشد. با اجرای دستورات قدرتمند در یک سیکل راMHz  ) در هرMillions Instruction Per Second  ( مخفف1MIPS کلاک این میکرو سرعتی معادل فراهم می کند. یعنی زمانی که فرکانس کاری میکرو  1مگاهرتز است ، میکرو می تواند یک میلیون دستور العمل در هر ثانیه انجام دهد. این قابلیت به طراح سیستم این اجازه را می دهد تا توان مصرفی میکرو را برحسب سرعت پردازش مورد نیاز پروژه مدیریت کند

کارایی بالا ، توان مصرفی کم ، یک میکروکنترلر  ۸بیتی از خانواده AVR

دارای معماری  RISCبهبود یافته

دارای  1۳1دستورالعمل قدرتمند که اکثر آنها تنها در یک سیکل کلاک اجرا می شوند

دارای  ۳2رجیستر عمومی  ۸بیتی همه منظوره

عملکرد کاملا پایدار

سرعتی حداکثر تا  MIPS 1۶در فرکانس MHz1۶

دارای ضرب کننده جداگانه داخلی که در دو کلاک سیکل عمل ضرب را انجام می دهد

  • دارای حافظه غیر فرار برای برنامه و دیتا
  • 32کیلوبایت حافظه فلش داخلی قابل برنامه ریزی
  • پایداری : تا  10،000بار نوشتن و پاک کردن
  • EEPROMبایت حافظه102۴ -
  • پایداری : تا  100،000بار نوشتن و پاک کردن
  • 2کیلوبایت حافظه  SRAMداخلی
  • دارای قفل برنامه برای حفاظت نرم افزاری از حافظه
  • قابلیت ارتباط به صورت  JTAGتحت استاندارد)(IEEE std. 1149.1
  • قابلیت مشاهده تمامی رجیسترها و متوقف کردن برنامه روی دستور خاص جهت عیب یابی
  • برنامه ریزی حافظه فلش،  ،EEPROMفیوزبیت ها و بیت های قفل )  ( Lock Bitsاز طریق
  • ارتباطJTAG62
  • خصوصیات جانبی میکروکنترلر
  • دو تایمر/کانتر  ۸بیتی و یک تایمر/کانتر  1۶بیتی
  • یک کانتر زمان حقیقی ) (RTCبا اسیلاتور جداگانه
  • ۴کانال برایPWM
  • ۸کانال برای مبدل آنالوگ به دیجیتال  10بیتی
  • ۸کانال معمولی یک طرفه
  • ۷کانال تفاضلی ( که این قابلیت فقط در بسته بندی  TQFPوجود دارد)
  • دارای  2کانال تفاضلی با گین قابل برنامه ریزی  10 ، 1و  200برابر کننده
  • قابلیت ارتباط با پروتکل سریال دوسیمهI2C
  • دارای پورت  USARTسریال قابل برنامه ریزی
  • قابلیت ارتباط سریال  SPIبه صورت  MasterیاSlave
  • دارای تایمر قابل برنامه ریزی  Watchdogبا اسیلاتور داخلی جداگانه
  • دارای مقایسه کننده آنالوگ داخلی
  • خصوصیات ویژه میکروکنترلر
  • ریست خودکار میکرو در هنگام روشن شدن
  • شناسایی ولتاژ تغذیه ورودی قابل برنامه ریزی و ریست خودکار میکرو
  • دارای اسیلاتور  RCداخلی کالیبره شده
  • منابع وقفه داخلی و خارجی
  • دارای  ۶حالت خواب )  ( Sleep Modeبرای کم مصرف شدن میکرو
  • ورودی/خروجی و بسته بندی
  • دارای 32 خط ورودی/خروجی قابل برنامه ریزی
  • در بسته بندی های مختلف 40پایه ، PDIP
  • MLFپایه۴۴  وTQFP  پایه۴۴
  • ولتاژهای کاری
  • ATMega32Lولت در۵٫۵ تا۷ -
  • ATMega32ولت در۵٫۵ تا۵ -
  • فرکانس های کاری63
  • ATMega32LبرایMHz ۸ تا0 -
  • ATMega32برایMHz 1۶  تا0 –


طراحي هاي انجام شده در Proteus :


اين طرح كلي طراحي شده در پروتئوس است كه داراي بخش هاي مختلفي مي باشد هر بخش به صورت جداگانه در زير توضيح داده مي شود:



بخش بالا كليد هايي اند كه نشان دهنده مقادير سنسور هاي داخل مخزن اب مي باشند. در مخزن اب ما 4 سنسور وجود دارند كه يكي از ان ها در 25 درصد ظرفيت مخزن و يكي ديگر در 50 درصد ضرفيت مخزن و ديگري در 75 درصد ظرفيت مخزن و اخري در 100 درصد ضرفيت مخزن قرار دارند كه وقتي اب به ان سطح برسد ان سنسور ها فعال مي شوند. اين فرايند را توسط 4 كليد مدل سازي كرده ايم.


اين چهار مقاوت كه به يك سر ان به زمين وصل است و  سر ديگري هر كدام از ان ها به كليد وصل است كه مقدار اوليه كليد را pull down سخت افزاري يا صفر مي كند.


در اين قسمت از 3 گيت AND استفاده شده است كه به اين منظور اسا اگر سنسور 75 درصد روشن شود بايد سنسور هاي قبلي ان نيز روشن شده باشند تا اكتيو شود يعني سنسور هاي 25 درصد و 50 درصد هم بايد اكيو باشند. . اين مسئله براي سنسور هاي 50 درصد و 75 درصد و 100 درصد به اجرا در امده است براي همين 3 عدد گيت AND داريم.

در اين قسمت يك مانيتور كوچك داريم كه داراي 2 رديف است و 16 خانه در هر رديف كه در ان اطلاعات روشن يا خاموش بودن متور و ميزان لول اب با توجه به خروجي هاي سنسور ها نمايش داده مي شود.


اين برد همان برد ATMEGA32 است كه براي توسعه ي مدل از اين برد استفاده شده است . در پروتئوس نيازي به مشخص كردن برق تيست بخش برق مدل هاي پروتئوس به صورت خودكار وصل مي باشند.


در اين بخش متور DC  تعريف شده است. كه براي مدل اوليه اين متور با برق خود دستگاه كار مي كند و ولتاژ ان 5volt  مي باشد. در اينده مي توان با هر گونه پمپ ابي اين پروژه را پياده سازي كرد فقط كافيست اين پورت را به بخش كنترلي دستگاه وصل كرد(ممكن است براي اين كار نياز به يك مبدل ديگر باشد, طرح اين مبدل بستگي به پمپ اب انتخابي دارد.)


كد هاي نوشته شده در Code Vision :

ابتدا در نرم افزار code vision يك پروژه جديد مي سازيم و با استفاده از wizard نرم افزار نوع برد و نوع مانيتور را مشخص مي كنيم و همچنين مشخص مي كنيم كه اين مانيتور به كدام پورت ها وصل است. سپس كد ها را به گونه زير مي نويسيم:

#include <mega32.h>

#include <delay.h>

#include <stdio.h>

// Alphanumeric LCD functions

#include <alcd.h>

// Declare your global variables here

void main(void)

{

lcd_init(16);

DDRB=0X00;

PORTB=0X00;

DDRC=0XFF;

PORTC=0b00000000;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = OFF");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=0%  ");

while (1)

{

if(PINB.0==1)

{

//level 100%   motor off

PORTC=0b00000000;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = OFF");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=100%");

}

else if(PINB.1==1)

{

//level 75%   motor on

PORTC=0b00000001;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = ON ");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=75% ");

}

else if(PINB.2==1)

{

//level 50%   motor on

PINC.0=1;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = ON ");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=50% ");

}

else if(PINB.3==1)

{

//level 25%   motor on

PORTC=0b00000001;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = ON ");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=25% ");

}

else

{

//level 0%   motor on

PORTC=0b00000001;

lcd_gotoxy(0,0);

lcd_putsf("MOTOR = ON ");

lcd_gotoxy(0,1);

lcd_putsf("WATER_Level=+0% ");

}

}


نتيجه گيري:

اين پروژه يك مدل كارامد براي ساخت كيت كنترل كننده اب است. و با تهيه سنسور ها و برد مي توان اين پروژه را به صورت عملي بست و كيت كنترل كننده داراي مانيتور را ساخت. چالش اصلي اين پروژه براي ساخت اين است كه برق برد و متور با هم تفاوت دارند و نياز به دو منبع مجزا برا ان ها است يا يك اداپتور براي برد مي باشد.

دانشگاه صدراآزمایشگاه ریزپردازندهمیکروکنترلرپروتئوسدانشگاه صدرالمتالهین
شاید از این پست‌ها خوشتان بیاید