امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 2
  • 1
  • 2
  • 3
  • 4
  • 5
TIMER0_CTC MODE
نویسنده پیام
majid_avr آفلاین
كاربر تک ستاره
*

ارسال‌ها: 50
موضوع‌ها: 11
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 39
( 22 تشکر در 14 ارسال )
ارسال: #1
TIMER0_CTC MODE
سلام
این برنامم چه مشکلی داره ؟

کد php:
#include <mega32.h>
#include <delay.h>

interrupt [TIM0_COMPvoid timer0_comp_isr(void)
{

TCNT0=0;
TCCR0=0;
  
PORTA.0=~PORTA.0;
}   

void main(void)
{


DDRB.2=0;
DDRB.1=0;

TCNT0=0;
OCR0=50;
TCCR0=(0<<CS00)|(0<<CS01)|(1<<CS02)|(0<<WGM00)|(1<<WGM01)|(0<<COM00)|(0<<COM01);
TIMSK=0X02;
#asm("sei")

while (1)
 {                  
//*******SPEED CONTROL HI************//
      
if (PINB.2==0)
      {
        
OCR0=OCR0-25;
      
        while (
PINB.2==0);
      }             
                   
//*******SPEED CONTROL LOW**********//
                
      
if (PINB.1==0)
      {    
         
OCR0=0CR0+25;
         while (
PINB.1==0);
      }                  


میخوام سرعت یک پله از استپ موتور رو با تایمر کنترل کنم ! که بعدا بتونم کنترل سرعت موتور رو به دست بگیرم !

عرض پالس خروجی کم میشه اما زیاد نمیشه ، در نتیجه فقط میتونم سرعت رو زیاد کنم !
برنامم مشکلی داره ؟
چرا نمیتونم سرعتشو کم منم (عرض پالس رو زیاد کنم )؟

عصر ما ...
عصر ما عصر فریبه ،عصر اسم های غریبه ...
عصر پژمردن گلدون،چترای سیاه تو بارون...
(آخرین ویرایش در این ارسال: ۱۸-مرداد-۱۳۹۳, ۱۸:۴۱:۳۳، توسط sharin.)
۱۸-مرداد-۱۳۹۳, ۱۶:۰۵:۴۴
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #2
RE: TIMER0_CTC MODE
روش کنترل سرعت استپر موتور با کنترل پهنای پالس نیست!
باید بین هر پله یه تاخیر ایجاد کنید ، با تغییر میزان تاخیر در هر پله سرعت چرخش استپر موتور هم تغییر می کنه.
هر چی تاخیر بیشتر باشه سرعت چرخش کمتر وبلعکس می شه.

۱۸-مرداد-۱۳۹۳, ۱۸:۴۸:۴۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, majid_avr, رسول
majid_avr آفلاین
كاربر تک ستاره
*

ارسال‌ها: 50
موضوع‌ها: 11
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 39
( 22 تشکر در 14 ارسال )
ارسال: #3
RE: TIMER0_CTC MODE
خب منم همین کار رو کردم دیگه !!
فکر کنم برنامه رو نگاه نکردین یا اونچه که توضیح دادم
مزسی Biggrin

عصر ما ...
عصر ما عصر فریبه ،عصر اسم های غریبه ...
عصر پژمردن گلدون،چترای سیاه تو بارون...
۱۸-مرداد-۱۳۹۳, ۲۰:۵۷:۵۱
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #4
RE: TIMER0_CTC MODE
نقل قول: خب منم همین کار رو کردم دیگه !!
مهندس شما مشخصا دارید از لفظ عرض پالس استفاده می کنید. عرض پالس در فرکانس معین معنی پیدا می کنه ...
در موضوع کنترل سرعت استپر عناوین بالا اصلا موضوعیت ندارهه ...

به این مثال توجه کنید:

روش تمام پله : 4 تا مرحله می شه:
1. 1000
2. 0100
3. 0010
4. 0001

این مراحل باید پشت سر هم به خطوط موتور اعمال بشه با تاخیری میان هر مرحله. یعنی در عمل:
کد php:
while(1)
{
port 0b00001000
delay
(x)
port 0b00000100
delay
(x)
port 0b00000010
delay
(x)
port 0b00000001
delay
(x)

x = 20 ms به سرعت A می رسه
x = 50 ms به سرعت B می رسه
که مقدار A > B می شه.

حالا برای تابع delay می شه 2 کار کرد:
1. الکی CPU رو مشغول کرد.
یعنی
کد php:
delay(int x)
{
for(
int i i<i++);


2. با استفاده از تایمر
که تو تابع delay تایمر و فعال می کنی و ...
کد php:
delay(int x)
{
timer_start(x)
while( 
time != true)


اینها شبه کد بود ، برای درک بهتر از روال کار.

موفق باشید.

(آخرین ویرایش در این ارسال: ۱۸-مرداد-۱۳۹۳, ۲۲:۱۶:۴۹، توسط sharin.)
۱۸-مرداد-۱۳۹۳, ۲۲:۱۲:۱۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, behzady, رسول


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS