هدف از این آموزش راه اندازی واحد PWM میکروکنترلر AVR به زبان C توسط مجموعه آموزشی AVR WIZARD میباشد. ( شما میتوانید موتورهای DC مشابه را به این روش راهاندازی نمایید )
قطعات مورد نیاز
موتور DC
موتور DC یا موتور مستقیم در واقع ، رایج ترین محرک برای تولید حرکت مداوم است و سرعت چرخش آن به راحتی قابل کنترل می باشد به همین دلیل اغلب از آنها در کنترل سرعت ، کنترل انوع سروو ، و / یا کنترل موقعیت استفاده می کنند. موتور DC از دو بخش تشکیل شده است ، Stator كه قسمت ثابت و Rotor كه قسمت چرخشی می باشد. اساساً سه نوع DC موتور وجود دارد:
موتور Brushed:
این نوع موتور با عبور یک جریان الکتریکی از طریق یک محور انتقال دهنده و Brush کربن ، یک میدان مغناطیسی را در یک روتور ایجاد می کند . میدان مغناطیسی استاتورها (قسمت ثابت) با استفاده از سیم پیچ استاتور یا توسط آهنرباهای دائمی تولید می شوند. به طور کلی این موتورها ارزان و کوچک بوده و به راحتی کنترل می شوند.
موتور Brushless :
این نوع موتور با استفاده از آهنرباهای دائمی متصل به آن ، یک میدان مغناطیسی در روتور ایجاد می کند و تبدیل به صورت الکترونیکی حاصل می شود. آنها معمولاً کوچکتر اما گرانتر از موتورهای DC معمولی هستند زیرا از اثر هال در استاتور استفاده می کنند تا دنباله چرخشی مورد نیاز استاتور را تولید کنند .اما از ویژگی های گشتاور سرعت بهتری برخوردار هستند و عمر عملیاتی بیشتری دارند.
سروو موتور:
این نوع موتورها در اصل یک موتور Brushed DC با نوعی کنترل بازخورد موقعیتی است که به شافت روتور متصل است که معمولا توسط یک کنترلر از نوع PWM متصل و کنترل می شوند و عمدتاً در سیستم های کنترل موقعیت مورد استفاده قرار می گیرند.
درایور L298
آی سی L298N ، دارای 15 پایه است. سطح منطقی آی سی L298N با استاندارد TTL سازگاری دارد و از آن میتوان برای راه اندازی موتور DC، استپ موتور، رله و غیره استفاده کرد. از آنجا که آی سی درایور موتور L298N یک آیسی درایور پل کامل دوتائی است، می توان برای کنترل دو موتور به صورت همزمان با ورودی های منحصر به فرد از آن استفاده کرد. ولتاژ منبع تغذیه منطقی آن 5 ولت است اما ولتاژ منبع تغذیه موتور بالای 45 ولت است. پیک جریان خروجی هر کانال هم 2 آمپر است.
نحوه اتصال موتور به برد ROBO SHIELD از مجموعه آموزشی AVR WIZARD
در برد شیلد ربات موسوم به ROBO SHIELD از مجموعه آموزشی AVR WIZARD درایور L298N و مدار راه انداز آن پیاده سازی شده و تنها کافی است موتور را به ترمینال های خروجی متصل کنیم.
چگونگی کنترل موتور DC
برای کنترل سرعت، موتور A استفاده می شود. با HIGH کردن این پین باعث چرخش موتور A و LOW کردن آن باعث توقف موتور می شود. با اتصال این پین به ورودی PWM میتوانیم سرعت موتور A را کنترل کنیم.
پین های IN1 & IN2 برای کنترل جهت چرخش موتور A استفاده می شوند. هنگامی که یکی از آنها HIGH و دیگری LOW است ، موتور A می چرخد. اگر هر دو ورودی یا HIGH یا LOW باشند موتور A متوقف می شود.
پین های IN3 و IN4 برای کنترل جهت چرخش موتور B استفاده می شوند. هنگامی که یکی از آنها HIGH و دیگری LOW باشد ، موتور B چرخش می یابد. اگر هر دو ورودی یا HIGH یا LOW باشند موتور B متوقف می شود.
پین های ENB برای کنترل سرعت موتور B استفاده می شود. با HIGH نگه داشتن این پین باعث چرخش موتور B می شود ، با LOW کردن آن باعث متوقف شدن موتور خواهد شد. با اتصال این پین به ورودی PWM می توانیم سرعت موتور B را کنترل کنیم.
برنامه نویسی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD به زبان C
#include
#define FORWARD 1
#define BACKWARD 0
#define START 1
#define STOP 0
// Alphanumeric LCD functions
#include
#include
// Declare your global variables here
void DC_Motor_Run(int numb,int ena ,int speed ,int way )
{
if (speed<=80) speed=80;
if (speed>=255) speed=255;
if(numb==1)
{
if (way==BACKWARD)
{
PORTD.5=0; // FORWARD
PORTC.0=1;
}
if (way==FORWARD)
{
PORTD.5=1;
PORTC.0=0;
}
if(ena==START)
{
OCR2 = speed;
}
if(ena==STOP)
{
OCR2 =0;
}
}
//case 2 :
if(numb==2)
{
if (way==BACKWARD)
{
PORTD.6=1;
PORTC.1=0;
}
if (way==FORWARD)
{
PORTD.6=0;
PORTC.1=1;
}
if(ena==START)
{
OCR0 = speed;
}
if(ena==STOP)
{
OCR0 =0;
}
}
}
void Turn_Right(void)
{
DC_Motor_Run(2,START ,170 ,FORWARD );
DC_Motor_Run(1,STOP ,170 ,FORWARD );
delay_ms(1200);
DC_Motor_Run(2,STOP ,170 ,FORWARD );
DC_Motor_Run(1,STOP ,170 ,FORWARD );
}
void Turn_Left(void)
{
DC_Motor_Run(2,STOP ,170 ,FORWARD );
DC_Motor_Run(1,START ,170 ,FORWARD );
delay_ms(1200);
DC_Motor_Run(2,STOP ,170 ,FORWARD );
DC_Motor_Run(1,STOP ,170 ,FORWARD );
}
void main(void)
{
char spd = 120;
DDRA=(0<