خانه » پروژه‌ها » پروژه راه اندازی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD

پروژه راه اندازی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD

بازدید: 1134

راه-اندازی-موتور-dc-توسط-برد-avr-wizzard
  1. خانه
  2. »
  3. پروژه‌ها
  4. »
  5. پروژه های AVR
  6. »
  7. پروژه راه اندازی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD

پروژه راه اندازی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD

بازدید: 1134

راه-اندازی-موتور-dc-توسط-برد-avr-wizzard

هدف از این آموزش راه اندازی واحد 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 آمپر است.

1. آی سی L298N

نحوه اتصال موتور به برد ROBO SHIELD از مجموعه آموزشی AVR WIZARD

در برد شیلد ربات موسوم به ROBO SHIELD از مجموعه آموزشی AVR WIZARD درایور L298N و مدار راه انداز آن پیاده سازی شده و تنها کافی است موتور را به ترمینال های خروجی متصل کنیم.

2. اتصال موتور به برد Robo Shield

چگونگی کنترل موتور 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 <mega16a.h>
#define FORWARD 1
#define BACKWARD 0
#define START 1
#define STOP 0
// Alphanumeric LCD functions
#include <alcd.h>
#include <delay.h>
// 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<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<<DDC7) | (0<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz
// Mode: Fast PWM top=0xFF
// OC0 output: Non-Inverted PWM
// Timer Period: 1.024 ms
// Output Pulse(s):
// OC0 Period: 1.024 ms Width: 0.51401 ms
TCCR0=(1<<WGM00) | (1<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0=0x80;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz
// Mode: Fast PWM top=0xFF
// OC2 output: Non-Inverted PWM
// Timer Period: 1.024 ms
// Output Pulse(s):
// OC2 Period: 1.024 ms Width: 0.51401 ms
ASSR=0<<AS2;
TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (1<<CTC2) | (1<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);;
lcd_putsf( " HI Wellcom " ) ;
lcd_gotoxy( 0 , 1 );
lcd_putsf( "TO REDRONIC.COM" ) ;
delay_ms(2000);
//lcd_clear();
#asm("sei")
while (1)
{
DC_Motor_Run(1,START ,spd ,FORWARD ); // intialize DC motor1 with Speed Of spd in Forward Mode
DC_Motor_Run(2,START ,spd ,FORWARD ); // intialize DC motor2 with Speed Of spd in Forward Mode
delay_ms(2000);
DC_Motor_Run(1,STOP ,spd ,BACKWARD ); // stop DC motors
DC_Motor_Run(2,STOP ,spd ,BACKWARD ); // stop DC motors
delay_ms(2000);
DC_Motor_Run(1,START ,spd ,BACKWARD ); // intialize DC motor1 with Speed Of spd in Backward Mode
DC_Motor_Run(2,START ,spd ,BACKWARD ); // intialize DC motor1 with Speed Of spd in Backward Mode
delay_ms(2000);
Turn_Left();
delay_ms(2000);
Turn_Right();
delay_ms(2000);
}

				
			

نظرتان را درباره این مقاله بگویید 6 نظر

پروژه راه اندازی موتورهای DC با استفاده از مجموعه آموزشی AVR WIZARD

با ثبت نظر و نوشتن کامنت، تیم ما را در راستای بهبود و افزایش کیفیت محتوا یاری خواهید کرد :)

فهرست مطالب

مقالات مرتبط

مشاهده محصولات

بروزترین مقالات

این مقاله را با دوستانتان به اشتراک بگذارید!

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

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

فروشگاه