راه اندازی سروو موتور با میکروکنترلر AVR

saalek110

Well-Known Member
......سروو موتور ها در یک محدوده خاص میچرخند اما استپ موتور ها محدودیتی برای چرخش ندارند
برای راه اندازی سروو موتور ها نیاز به راه انداز و تقویت جریان نمی باشد در حالی که استپ موتور ها نیاز به راه انداز
دارند....


سالک: من مطمئن نیستم. ولی نقل کردم
 

saalek110

Well-Known Member
یک نکته: شاید بهتر باشه اول در پروتئوس تست کنیم ، بعد بیاییم واقعی.
 

saalek110

Well-Known Member
در این تاپیک من در یک پست نوشتم (( بعد چند سایت ایرانی می رویم سراغ سایتهای خارجی))....
بعدش از دو تا سایت خارجی کد گذاشم.....


کد سایت اول یعنی این را:
PHP:
#define F_CPU 8000000UL        /* Define CPU Frequency e.g. here its 8MHz */
#include <avr/io.h>            /* Include AVR std. library file */
#include <stdio.h>            /* Include std. library file */
#include <util/delay.h>        /* Include Delay header file */

int main(void)
{
    DDRD |= (1<<PD5);    /* Make OC1A pin as output */
    TCNT1 = 0;            /* Set timer1 count zero */
    ICR1 = 2499;        /* Set TOP count for timer1 in ICR1 register */

    /* Set Fast PWM, TOP in ICR1, Clear OC1A on compare match, clk/64 */
    TCCR1A = (1<<WGM11)|(1<<COM1A1);
    TCCR1B = (1<<WGM12)|(1<<WGM13)|(1<<CS10)|(1<<CS11);
    while(1)
    {
        OCR1A = 65;        /* Set servo shaft at -90° position */
        _delay_ms(1500);
        OCR1A = 175;    /* Set servo shaft at 0° position */
        _delay_ms(1500);
        OCR1A = 300;    /* Set servo at +90° position */
        _delay_ms(1500);
    }
}

در اتمل استودیو کامپایل کردم. و بی اشکال فایل هگز ساخته شد.
ولی در کدویژن در خط:

PHP:
   ICR1 = 2499;        /* Set TOP count for timer1 in ICR1 register */

تا جایی که یادمه خطا می داد.

من فکر می کنم وقتی delay را قبلش آندرلاین می گذارند یعنی این طوری:

JavaScript:
 _delay_ms

این کد برای استفاده در اتمل استودیو است نه کدویژن.

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

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

saalek110

Well-Known Member
PHP:
 #ifndef F_CPU
 #define F_CPU 1000000UL
 #endif

 #include <avr/io.h>
 #include <util/delay.h>
 #include <avr/interrupt.h>


 int main(void)
 {
     DDRD= 0xFF ;
     DDRA=0x00;
     PORTA =0x00;
     // FAST PWM
     TCCR1A |= 1<<COM1A0 | 1<<COM1A1 | 1<<WGM11 |1<<COM1B0|1<<COM1B1 ;
     TCCR1B= 1<<WGM12|1<<WGM13 ;
     ICR1 = 19999 ;

     TCCR1B |=1<<CS10 ;
     while (1)
     {
         if(PORTA==0x08) //if pina3 is 1
         {
             OCR1A = ICR1 -2000 ;   //turn servo 1
             _delay_ms(1000);
 
             OCR1B=ICR1-2000;    //turn servo 2
             _delay_ms(1000);
         }
         if(PORTA==0x00)// if pina3 is 0
         {
             OCR1A = ICR1 -900 ; //turn servo 1 in the other direction
             _delay_ms(1000);
 
             OCR1B=ICR1-900;     //turn servo 2 in the other direction
             _delay_ms(1000);

         }
     }

 
     return 0 ;

 }






توجه کنید کد بالا مشروط به پین 3 پورت A است. یعنی احتمالا روی این پین کلید گذاشته تا سروو با کلید کنترل شود. و احتمالا دو عدد سروو موتور است که به دو پین وصل شده اند.

و فرد سوال داشته در سایت بالا و کد را برای رفع اشکال گذاشته....


سالک:الان سروو متور من با این کد بی اشکال کار می کند.

خلوت شده کد بالا توسط من اینه:
PHP:
#ifndef F_CPU
 #define F_CPU 1000000UL
 #endif

 #include <avr/io.h>
 #include <util/delay.h>
 #include <avr/interrupt.h>


 int main(void)
 {
     DDRD= 0xFF ;
    // DDRA=0x00;
    // PORTA =0x00;
     // FAST PWM
     TCCR1A |= 1<<COM1A0 | 1<<COM1A1 | 1<<WGM11 |1<<COM1B0|1<<COM1B1 ;
     TCCR1B= 1<<WGM12|1<<WGM13 ;
     ICR1 = 19999 ;

     TCCR1B |=1<<CS10 ;
     while (1)
     {
             OCR1A = ICR1 -2000 ;   //turn servo 1
             _delay_ms(1000);

             OCR1A = ICR1 -900 ; //turn servo 1 in the other direction
             _delay_ms(1000);
        
     }

 
     return 0 ;

 }

چون اون فرد برای دو سررو موتور برنامه ریخته بود و کلید می خواست بزاره...اونها را من حذف کردم تا کد ساده بشود.
حالا سرووی من(سالک) داره با pd5 کار می کنه با کد بالا و مدام به چپ و راست می چرخد. میزان چرخش 90 درجه است.

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

saalek110

Well-Known Member
سالک: من توانستم در اتمل استودیو سروو موتور خود را راه بیاندازم
ولی اگر بخوام در کدویژن کار کنم چی؟

من فکر می کنم مشکل از icr1 است و می خوام در فرومی که فکر می کنم فروم کدویژن باشه این را سرچ کنم، پس در گوگل این را سرچ می کنم:
icr1 site:forum.microchip.com
ولی مطالب این سایت برای من نمی آید، نمی دونم چرا.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا