ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 22
  1. #1
    2007/12/24
    16
    0

    کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    سلام
    یه سوال درباره تایمر:
    کوچکترین زمان تولید شده با استفاده از تایمر STM32F103 چه مقدار می تواند باشد؟
    آیا می توان با فرکانس 72MHZ توسط تایمر شماره دو این میکرو به زمان 100nS (ایجاد اینتراپت و یا Toggle شدن یک پین) دست یافت.
    من دنبال این هستم تا روی یه پین فرکانس 10MHZ رو داشته باشم. کریستال متصل به میکرو 8MHZ است.
    با استفاده از PLL داخلی فرکانس 72MHZ تولید شده و بروی پین MCO قابل رویت است. تنظیمات AHB و APB نیز به درستی انجام شده است.
    ولی فرکانس تولید شده در حالتهای مختلف کاری از 289KHZ بیشتر نمی شه. آیا محدودیتی برای کار تایمر وجود داره؟
    :angry:
    فکر آن باشد که بگشاید رهی
  2. #2
    2012/12/30
    بوشهر
    3,206
    1,107

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    تایمر 2 روی APB1 هستش که ماکسیمم فرکانس این باس 36 مگاهرتز هستش. اون باس APB2 هستش که فول اسپید هستش(72 مگاهرتز).
    منظور شما رو از ایجاد اینتراپت نمی فهمم؟
    اگه این 10 مگاهرتز رو فقط می خوایید فکر نمیکنم مشکلی باشه.
    می خوایید کدتون رو بذارید تا ببینیم.
    یه مقدار هم بیشتر توضیح بدید که چیکار می خوایید بکنید.


    اگه خوب توضیح ندید جواب نمیگیرید.
  3. #3
    2007/12/24
    16
    0

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    این برنامه ای که نوشتم الان داره کار می کنه ولی با مشکلاتی همراهه!
    کد:
    int main(void)
    {
    	ClkInitCPU ();
    	Timer_IO_Config();
        Timer_NVIC_Configuration();	
    	Timer_Configuration();
    
     while (1)
    	{
    		
    	}
    }
    
    /*===========================================================================*/
    void ClkInitCPU (void)
    {
      static __IO ErrorStatus HSEStartUpStatus = SUCCESS;
      /* RCC system reset(for debug purpose) */
     RCC_DeInit();
    
     /* Enable HSE */
     RCC_HSEConfig(RCC_HSE_ON);
    
     /* Wait till HSE is ready */
     HSEStartUpStatus = RCC_WaitForHSEStartUp();
    
     if(HSEStartUpStatus == SUCCESS)
     {
      /* Enable Prefetch Buffer */
      //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    
      /* Flash 2 wait state */
      //FLASH_SetLatency(FLASH_Latency_2);
     	
      /* HCLK = SYSCLK */
      RCC_HCLKConfig(RCC_SYSCLK_Div1); 
     
      /* PCLK2 = HCLK */
      RCC_PCLK2Config(RCC_HCLK_Div1); 
    
      /* PCLK1 = HCLK/2 */
      RCC_PCLK1Config(RCC_HCLK_Div2);
    
      /* PLLCLK = 8MHz * 9 = 72 MHz */
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    
      /* Enable PLL */ 
      RCC_PLLCmd(ENABLE);
    
      /* Wait till PLL is ready */
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
      {
      }
    
      /* Select PLL as system clock source */
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    
      /* Wait till PLL is used as system clock source */
      while(RCC_GetSYSCLKSource() != 0x08)
      {
      }
     }
    }
    
    /*===========================================================================*/
    void Timer_IO_Config(void)
    {
     GPIO_InitTypeDef GPIO_InitStructure;
     
     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE); 						 
    	
     //GPIOC Configuration:Pin6 as alternate function push-pull
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    	
     /* Output system clock on MCO pin ---------------------------------------------*/
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
     RCC_MCOConfig(RCC_MCO_SYSCLK);
    }
    
    /*===========================================================================*/
    void Timer_NVIC_Configuration(void)
    {
     NVIC_InitTypeDef NVIC_InitStructure; 
     /* Enable the TIM2 global Interrupt */
     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;	 
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;	
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
    }
    
    /*===========================================================================*/
    void Timer_Configuration(void)
    {
     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    	
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    	
     /* Time base configuration */
    //*****************************************************************************
     TIM_TimeBaseStructure.TIM_Period=3600;		//3600/36000000 = 100 uS
    //TIM_TimeBaseStructure.TIM_Period=360;			// 360/36000000 = 10 uS
    //TIM_TimeBaseStructure.TIM_Period=36;		 	// 36/36000000 =  1 uS
    //*****************************************************************************	
     TIM_TimeBaseStructure.TIM_Prescaler= 0;			//36MHZ/(0+1) = 36MHZ
     TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1;
    	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
     TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    	
     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
     /* TIM2 enable counter */
     TIM_Cmd(TIM2, ENABLE);	
    
     /* TIM IT enable */
     TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    }
    /*===========================================================================*/



    همونطور که گفتم کلاک 72MHZ روی پین MCO رویت می شه.
    با انتخاب TIM_Period=3600 روی پین PC6 سیگنال با فرکانس 100uS دریافت می شه.
    با انتخاب TIM_Period = 360 روی پین PC6 سیگنال با فرکانس 10uS دریافت می شه.
    با انتخاب TIM_Period = 36 روی پین PC6 سیگنال ناپایدار بوده و دارای Jitter است.
    حالا اگه بخواهیم به فرکانس در حد مثلا 200 نانو ثانیه دسترسی پیدا کنیم وضع از این هم بدتر می شه.
    من قبلا روی AVR این کارو انجام دادم مثلا با کریستال 8MHZ تونستم فرکانس 4MHZ رو روی پین OC0 بگیرم ولی با ARM تا حالا که موفق نشدم.
    امیدوارم تونسته باشم مشکل رو درست توضیح بدم. بازم یادآوری می کنم سیگنال ها رو عملا با اسکوپ دارم میگیرم. :cry:


    فکر آن باشد که بگشاید رهی
  4. #4
    2012/07/21
    834
    23

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    بعیده اینطوری باشه. شما با نصف فرکانس CPU می تونید بشمارید. مثلاً با 60MHz برای CPU می تونید 30MHz بدید به APB1 و اگه ARR رو مساویِ 2 قرار بدید، راحت یه شکل موج 10MHz توی خروجی PWM یا OC خواهید داشت.
    توصبه می کنم به جای OC، از PWM استفاده کنید شاید اتفاق خاصی بیافته.
    بیایید با Google آشتی کنیم!
  5. #5
    2012/12/30
    بوشهر
    3,206
    1,107

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    شما تنظیمات پین ها رو درست انجام دادید؟ مال شما 64 پین هستش؟
    اگه تنظیمات پین های شما پین شماره 6 مربوط به C و شماره 8 مربوط به A باشه و یه نگاهی توی دیتاشیت بندازیم اینو می بینم:




    کو پین واسه تایمر 2؟ oo:
    در بعد، اگه به این توجه هم بکنید بد نیست:



  6. #6
    2007/12/24
    16
    0

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    کو پین واسه تایمر 2؟ oo:
    آی سی مورد استفاده 100 پایه است.
    تو تابع Timer_IO_Config پایه PA8 به عنوان MCO و پایه PC6 به عنوان یک پایه خروجی معمولی استفاده شده.
    PA8 کلاک مورد استفاده رو بیرون می فرسته که با اسکوپ 72MHZ رو نشون می ده.
    PC6 هم پایه ای که توسط اینتراپت روتین تایمر مرتبا Toggle می شه.
    یادآوری : سیگنال ها رو عملا با اسکوپ دارم میگیرم. !!!
    با انتخاب TIM_Period=3600 روی پین PC6 سیگنال با فرکانس 100uS دریافت می شه.
    با انتخاب TIM_Period = 360 روی پین PC6 سیگنال با فرکانس 10uS دریافت می شه.
    با انتخاب TIM_Period = 36 روی پین PC6 سیگنال ناپایدار بوده و دارای Jitter است.
    اینم روتین اینتراپت تایمر شماره دو (هر بار که رخ می ده وضعیت پین PC6 تغییر می کنه):

    کد:
    void TIM2_IRQHandler(void)
    {
      static uint8_t Toggle;
      if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
      {
    
    	if( Toggle ) 
    	  { 
    		 GPIO_SetBits(GPIOC , GPIO_Pin_6);
    	  } 
    	  else 
    	  { 
    		 GPIO_ResetBits(GPIOC , GPIO_Pin_6);
    	  }
    	  Toggle = ~Toggle;  
      
      TIM_ClearITPendingBit(TIM2, TIM_IT_Update);		 
      }
    }

    فکر آن باشد که بگشاید رهی
  7. #7
    2012/12/30
    بوشهر
    3,206
    1,107

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    آخه من هر چی نگاه میکنم انگار شما اشتباه تنظیم کردید. کانال های تایمر 2 روی پورت A هستن. اینم نشونش:



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



    اون PC6 هم اون پینی هستش که شما لازم دارید. درسته؟
  8. #8
    2007/12/24
    16
    0

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    دوست عزیز
    همونطور که مطلعید تایمرها رو می شه به روش های مختلف پیکره بندی کرد.
    تو برنامه ای که من نوشتم و اون بالا هم دیده می شه از کانال های مورد اشاره شما استفاده نشده و در عوض من از اینتراپت تایمر 2 استفاده کردم و پین PC6 رو که قبلا به عنوان IO خروجی تعریف کردم توی زیر برنامه اینتراپت Toggle می کنم.
    این برنامه تا 10us با دقت خوبی کار می کنه ولی با کمتر شدن زمان مشکلاتی که توضیح دادم بوجود میاد و من نمیدونم چرا اینطور می شه.
    شاید دلیلش این باشه که سرعت بروز وقفه تو این حالت سریع تر از اجرای بدنه برنامه اینتراپت می شه یعنی بدنه برنامه اینتراپت هنوز به آخر نرسیده که اینتراپت جدید از راه می رسه
    البته مطمئن نیستم چون سرعت اجرای برنامه با کلاک 72MHZ باید هماهنگ باشه و این خیلی سریعتر از 1uS هست. :rolleyes:
    فکر آن باشد که بگشاید رهی
  9. #9
    2012/07/21
    834
    23

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    نقل قول نوشته اصلی توسط arya1348
    شاید دلیلش این باشه که سرعت بروز وقفه تو این حالت سریع تر از اجرای بدنه برنامه اینتراپت می شه یعنی بدنه برنامه اینتراپت هنوز به آخر نرسیده که اینتراپت جدید از راه می رسه
    البته مطمئن نیستم چون سرعت اجرای برنامه با کلاک 72MHZ باید هماهنگ باشه و این خیلی سریعتر از 1uS هست. :rolleyes:
    خو همینه دیگه. وقفه که سرعت اجراش اونقدرا نیست که. خیلی هنر بکنه بشه یکی دو مگاهرتز.
    بیایید با Google آشتی کنیم!
  10. #10
    2012/12/30
    بوشهر
    3,206
    1,107

    پاسخ : کوچکترین زمان تولید شده با استفاده از تایمر STM32F103

    نقل قول نوشته اصلی توسط arya1348
    دوست عزیز
    همونطور که مطلعید تایمرها رو می شه به روش های مختلف پیکره بندی کرد.
    تو برنامه ای که من نوشتم و اون بالا هم دیده می شه از کانال های مورد اشاره شما استفاده نشده و در عوض من از اینتراپت تایمر 2 استفاده کردم و پین PC6 رو که قبلا به عنوان IO خروجی تعریف کردم توی زیر برنامه اینتراپت Toggle می کنم.
    این برنامه تا 10us با دقت خوبی کار می کنه ولی با کمتر شدن زمان مشکلاتی که توضیح دادم بوجود میاد و من نمیدونم چرا اینطور می شه.
    شاید دلیلش این باشه که سرعت بروز وقفه تو این حالت سریع تر از اجرای بدنه برنامه اینتراپت می شه یعنی بدنه برنامه اینتراپت هنوز به آخر نرسیده که اینتراپت جدید از راه می رسه
    البته مطمئن نیستم چون سرعت اجرای برنامه با کلاک 72MHZ باید هماهنگ باشه و این خیلی سریعتر از 1uS هست. :rolleyes:
    می خوای خب پس روتین وقفه رو بهینه کنیم؟
    مثلا Toggle رو بیرون تعریف کن(گلوبال).
    برای ست کردن و رست کردن پین ها شاید اگه روی ریجسترشون مستقیم بنویسی بهتر باشه.
    من با CMSIS کار نمی کنم. ببین اون 2 تا API چیکار میکنن، همونجا توی روتین وقفه بذارشون(تا جای ممکن بهینه شون بکن).
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 22

موضوعات مشابه

  1. پاسخ: 1
    آخرين نوشته: 2014/11/25, 19:09
  2. اندازه زمان در تایمر
    توسط S_B_T در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2013/12/15, 08:19
  3. تایمر زمان
    توسط bah69man در انجمن NXP
    پاسخ: 1
    آخرين نوشته: 2013/08/25, 10:20
  4. کمک در تولید زمان نیم ثانیه
    توسط sutedelan در انجمن میکروکنترلرهای AVR
    پاسخ: 10
    آخرين نوشته: 2011/09/10, 21:52
  5. زمان تلف شده برای تایمر
    توسط zahedi13 در انجمن میکروکنترلرهای AVR
    پاسخ: 11
    آخرين نوشته: 2008/11/01, 22:46

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •