اطلاعیه

Collapse
No announcement yet.

کار نکردن PWM در میکروی stm32f051

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کار نکردن PWM در میکروی stm32f051

    سلام
    برای تست با کیوب یه پروژه بسیار ساده ساختم که فقط تایمر 1 خروجی هاش رو pwm کردم
    ولی مشکل اینجاست که پین های متناظر اصلا کار نمی کنند و همیشه 0 هستند
    در کیل قسمت شبیه ساز تایمر کار می کنه و شمارنده هم داره کار می کنه ولی اصلا خروجی نمیده پین ها
    مشکل چی می تونه باشه ؟؟؟
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : کار نکردن PWM در میکروی stm32f051

    تایمر 16 و 17 هم خروجی نمیدن ؟؟؟
    دلیلش چی می تونه باشه ؟؟؟
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    دیدگاه


      #3
      پاسخ : کار نکردن PWM در میکروی stm32f051

      فقط تایمر 15 خروجی pwm اش تا این جا کار کرد و الباقی انگار به پین متصل نیستند!!!!!
      اللهم صل علی محمد و ال محمد و عجل فرجهم
      پیامبر اکرم(ص):زکات علم نشر آن است.
      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

      دیدگاه


        #4
        پاسخ : کار نکردن PWM در میکروی stm32f051

        نوشته اصلی توسط seyed saeed نمایش پست ها
        تایمر 16 و 17 هم خروجی نمیدن ؟؟؟
        دلیلش چی می تونه باشه ؟؟؟
        باید alternate function مربوطه رو برای GPIO ها انجام بدید. جدولشون تو دیتاشیت هست (تو دیتاشیت، نه تو ریفرنس منوئل)
        Si vis pacem, para bellum

        دیدگاه


          #5
          پاسخ : کار نکردن PWM در میکروی stm32f051

          نوشته اصلی توسط tiranoid نمایش پست ها
          باید alternate function مربوطه رو برای GPIO ها انجام بدید. جدولشون تو دیتاشیت هست (تو دیتاشیت، نه تو ریفرنس منوئل)
          سلام
          احتمالا پست ابتدایی بنده رو ندیدید
          من پروژه رو با کیوب ساختم stmcuemx وقتی با این نرم افزار این کار رو می کنیم خود به خود alternative انجام می شه
          در صورتی که تایمر 15 رو هم همین طوری فعال کردم و داره کار می کنه
          اللهم صل علی محمد و ال محمد و عجل فرجهم
          پیامبر اکرم(ص):زکات علم نشر آن است.
          در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

          دیدگاه


            #6
            پاسخ : کار نکردن PWM در میکروی stm32f051

            دوستان واقعا کسی نمی دونه مشکل از کجاست ؟؟
            اللهم صل علی محمد و ال محمد و عجل فرجهم
            پیامبر اکرم(ص):زکات علم نشر آن است.
            در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

            دیدگاه


              #7
              پاسخ : کار نکردن PWM در میکروی stm32f051

              نوشته اصلی توسط seyed saeed نمایش پست ها
              دوستان واقعا کسی نمی دونه مشکل از کجاست ؟؟
              اتفاقا من پیگیر پست هستم و گهگاه چک هم میکردم ببینم حل شده یا نه. بنده از کیوب استفاده نمیکنم با LL دستی مینویسم. اگر شما کد پیکربندی تایمر 1 رو پست کنید خیلی خوب میشه
              Si vis pacem, para bellum

              دیدگاه


                #8
                پاسخ : کار نکردن PWM در میکروی stm32f051

                نوشته اصلی توسط tiranoid نمایش پست ها
                اتفاقا من پیگیر پست هستم و گهگاه چک هم میکردم ببینم حل شده یا نه. بنده از کیوب استفاده نمیکنم با LL دستی مینویسم. اگر شما کد پیکربندی تایمر 1 رو پست کنید خیلی خوب میشه
                بنده چون می خواستم فعلا تست بگیرم و بعدا در پروژه اصلی استفاده کنم از کیوب استفاده کردم و الا در نهایت رجیستری تنظیم می کنم
                یه بار هم رجیستری تنظیم کردم چون کار نکرد گفتم یه بار با کیوب تست اولیه رو بگیرم بعد برم سراغ رجیستر
                /* USER CODE BEGIN TIM1_Init 0 */

                /* USER CODE END TIM1_Init 0 */

                TIM_ClockConfigTypeDef sClockSourceConfig = {0};
                TIM_MasterConfigTypeDef sMasterConfig = {0};
                TIM_OC_InitTypeDef sConfigOC = {0};
                TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};

                /* USER CODE BEGIN TIM1_Init 1 */

                /* USER CODE END TIM1_Init 1 */
                htim1.Instance = TIM1;
                htim1.Init.Prescaler = 0;
                htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
                htim1.Init.Period = 8191;
                htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
                htim1.Init.RepetitionCounter = 0;
                htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
                if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
                {
                Error_Handler();
                }
                sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
                if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
                {
                Error_Handler();
                }
                if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
                {
                Error_Handler();
                }
                sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
                sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
                if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
                {
                Error_Handler();
                }
                sConfigOC.OCMode = TIM_OCMODE_PWM1;
                sConfigOC.Pulse = 4096;
                sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
                sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
                sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
                sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
                sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
                if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
                {
                Error_Handler();
                }
                if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
                {
                Error_Handler();
                }
                if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
                {
                Error_Handler();
                }
                if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
                {
                Error_Handler();
                }
                sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
                sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
                sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
                sBreakDeadTimeConfig.DeadTime = 0;
                sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
                sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
                sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
                if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
                {
                Error_Handler();
                }
                /* USER CODE BEGIN TIM1_Init 2 */

                /* USER CODE END TIM1_Init 2 */
                HAL_TIM_MspPostInit(&htim1);

                این تنظیمات کیوب هست
                تو شبیه سازی به خوبی تایمر کار می کنه ولی فقط مسئله خروجی هست انگار که اون پین اصلا متصل نباشه
                حتی مقادیر alternative هم چک کردم اون ها هم تغییر کردن ولی باز کار نمی کنه
                خیلی برام عجیب بود تو سایت st هم دست و پا شکسته پرسیدم ولی کسی جواب نداده
                اللهم صل علی محمد و ال محمد و عجل فرجهم
                پیامبر اکرم(ص):زکات علم نشر آن است.
                در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                دیدگاه


                  #9
                  پاسخ : کار نکردن PWM در میکروی stm32f051

                  خب من روی STM32F030K6 ، تایمر 3، کد رو نوشتم و بدون مشکل کار میکنه. تو کد ببینید کدوم تنظیمات رو من نوشتم ولی شما ننوشتید تا مشخص بشه عیب کجاس. تایمر 3 هر دو مدل میکروکنترلر، دقیقا یه ساختار داره.

                  uint16_t stepVal = 20;
                  LL_InitTick(8000000, 1000);

                  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
                  LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE);
                  LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_6, LL_GPIO_OUTPUT_PUSHPULL);
                  LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_LOW);
                  LL_GPIO_SetAFPin_0_7(GPIOA, LL_GPIO_PIN_6, LL_GPIO_AF_1);


                  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);
                  LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL);
                  LL_TIM_SetCounterMode(TIM3, LL_TIM_COUNTERMODE_UP);
                  LL_TIM_EnableARRPreload(TIM3);
                  LL_TIM_SetAutoReload(TIM3, 8000);
                  LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH1);
                  LL_TIM_OC_ConfigOutput(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCPOLARITY_HIGH);
                  LL_TIM_OC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCPOLARITY_HIGH);
                  LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_PWM1);
                  LL_TIM_OC_SetCompareCH1(TIM3, stepVal);
                  LL_TIM_EnableCounter(TIM3);
                  جدیدترین ویرایش توسط tiranoid; ۰۰:۲۵ ۱۳۹۸/۱۲/۰۶.
                  Si vis pacem, para bellum

                  دیدگاه


                    #10
                    پاسخ : کار نکردن PWM در میکروی stm32f051

                    نوشته اصلی توسط tiranoid نمایش پست ها
                    خب من روی STM32F030K6 ، تایمر 3، کد رو نوشتم و بدون مشکل کار میکنه. تو کد ببینید کدوم تنظیمات رو من نوشتم ولی شما ننوشتید تا مشخص بشه عیب کجاس. تایمر 3 هر دو مدل میکروکنترلر، دقیقا یه ساختار داره.

                    uint16_t stepVal = 20;
                    LL_InitTick(8000000, 1000);

                    LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
                    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE);
                    LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_6, LL_GPIO_OUTPUT_PUSHPULL);
                    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_LOW);
                    LL_GPIO_SetAFPin_0_7(GPIOA, LL_GPIO_PIN_6, LL_GPIO_AF_1);


                    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);
                    LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL);
                    LL_TIM_SetCounterMode(TIM3, LL_TIM_COUNTERMODE_UP);
                    LL_TIM_EnableARRPreload(TIM3);
                    LL_TIM_SetAutoReload(TIM3, 8000);
                    LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH1);
                    LL_TIM_OC_ConfigOutput(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCPOLARITY_HIGH);
                    LL_TIM_OC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCPOLARITY_HIGH);
                    LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_PWM1);
                    LL_TIM_OC_SetCompareCH1(TIM3, stepVal);
                    LL_TIM_EnableCounter(TIM3);
                    سلام
                    ممنون ولی فرقی نکرد من هم با میکروی STM32F030K6 کار کردم ولی از این مشکلات نداشت
                    این میکرو 051 نمی دونم عیبش چیه
                    اللهم صل علی محمد و ال محمد و عجل فرجهم
                    پیامبر اکرم(ص):زکات علم نشر آن است.
                    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                    دیدگاه


                      #11
                      پاسخ : کار نکردن PWM در میکروی stm32f051

                      نوشته اصلی توسط seyed saeed نمایش پست ها
                      سلام
                      ممنون ولی فرقی نکرد من هم با میکروی STM32F030K6 کار کردم ولی از این مشکلات نداشت
                      این میکرو 051 نمی دونم عیبش چیه
                      سلام درست شد بلاخره
                      مشکل در نوشتن اسم تابع فعال سازش بود
                      من قبلا این رو می نوشتم که
                      HAL_TIMEx_PWMN_Start
                      که مربوط میشه با کانال N هر pwm
                      که اصلا من باهاشون کاری نداشتم
                      باید از تابع
                      HAL_TIM_PWM_Start
                      استفاده می کردم
                      اللهم صل علی محمد و ال محمد و عجل فرجهم
                      پیامبر اکرم(ص):زکات علم نشر آن است.
                      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                      دیدگاه

                      لطفا صبر کنید...
                      X