ايران ويج

نسخه‌ی کامل: 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);
      }                  


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

عرض پالس خروجی کم میشه اما زیاد نمیشه ، در نتیجه فقط میتونم سرعت رو زیاد کنم !
برنامم مشکلی داره ؟
چرا نمیتونم سرعتشو کم منم (عرض پالس رو زیاد کنم )؟
روش کنترل سرعت استپر موتور با کنترل پهنای پالس نیست!
باید بین هر پله یه تاخیر ایجاد کنید ، با تغییر میزان تاخیر در هر پله سرعت چرخش استپر موتور هم تغییر می کنه.
هر چی تاخیر بیشتر باشه سرعت چرخش کمتر وبلعکس می شه.
خب منم همین کار رو کردم دیگه !!
فکر کنم برنامه رو نگاه نکردین یا اونچه که توضیح دادم
مزسی Biggrin
نقل قول: خب منم همین کار رو کردم دیگه !!
مهندس شما مشخصا دارید از لفظ عرض پالس استفاده می کنید. عرض پالس در فرکانس معین معنی پیدا می کنه ...
در موضوع کنترل سرعت استپر عناوین بالا اصلا موضوعیت ندارهه ...

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

روش تمام پله : 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)


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

موفق باشید.