اطلاعیه

Collapse
No announcement yet.

پرش زیاد در adc

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

    پرش زیاد در adc

    درودمن عدد adc avr با دقت 10 بیت خوندم و تقسیم بر 204 کردم و ولتاژ ثابتی بهش دادم . عددی که به من میده ثابت هستحالا همین کارو با stm کردم ولی تقسیم بر 1241 کردم که مثل همون avr بشه . خیلی خیلی پرش داره حتی با adc خارجی 12 بیتی هم تست کردم پرش نداشت ولی این stm پرش دارهروی چند نمونه برد هم تست زدم همین بود ؟؟کسی تجربه ای داره ؟؟؟
    جدیدترین ویرایش توسط sepehr63; ۲۳:۴۷ ۱۳۹۶/۰۳/۲۴.

    #2
    پاسخ : پرش زیاد در adc

    خوب به دلیل وجود نویز توی ورودی تغزیه adc هست ، از جه مدل STM استفاده کردید
    بیشتر STM ها پایه جدا برای رفرنس ADC ندارد و از اونجایی که پایه تغزیشون با پایه تغزیه PLL یکی هست باید مقداری فیلتر کنید تغزیه ورودی این قسمت رو

    دیدگاه


      #3
      پاسخ : پرش زیاد در adc

      ممنون . من از stm32f103 استفاده کردم که vref نداره .تغذیه هم از usb اومده توی lm1117 و بعد یه خازن 470 میکرو و یه چند تایی 100 نانو
      یعنی آخه انقدر adc مزخرف ؟؟؟با این همه تقسیم این همه پرش .تازه من 10 بار نمونه میگیرم ؟؟؟؟

      دیدگاه


        #4
        پاسخ : پرش زیاد در adc

        سلام
        من هم این مشکل رو داشتم،البته حل نشد منم فعلآ بی خیالش شدم
        ظاهراً خیلی ها با adc میکرو stm32f103 مشکل دارن.
        اینم لینک
        سلام من از هدر بورد سایت استفاده میکنم پایه adc رو به vcc وصل کردم ،نمیدونم چرا هر برنامه ای برای adc مینویسم حتی با 239 کلاک برای نمونه برداری و delay دو ثانیه ای باز هم اعداد خوانده شده از 4095 تا حتی 3950 متغیره!!!؟؟؟ تغذیه هم از 3.3 ولت stlink/v2 هستش


        دلیل: ادغام دو پست برای جلوگیری از اسپم

        از فریت بید و فیلتر LC برای تغذیه VDDA استفاده کنید ببینید مشکل حل میشه؟
        فکر کنم مقادیر رو هم 100nf و 20uH قرار بدید خوب باشه.
        از خازن مرغوب 100nf هم برای ورودی adc استفاده کنید.
        سعی کنید زمین آنالوگ و دیجیتال رو هم از هم جدا کنید،از فریت بید هم میتونید برای جدا کردن زمین آنالوگ و دیجیتال استفاده کنید.
        ببینید با این کارها نتیجه بهتر میشه؟
        [آموزشی] کنترل رله با پیامک توسط sim800l
        [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
        [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
        [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
        صفحه اینستاگرام : ecdco_ir

        دیدگاه


          #5
          پاسخ : پرش زیاد در adc

          چجون دقت 10 بیت هم برام کافیه فکر کنم مجبورم با مگا8 اعداد بخونم و بفرستم برای stm .از خازن های mkt و تانتان استفاره کردم زیاد فرقی نداشته . حتی با اوسکوپ تغذیه چک کردم صاف صاف بود.

          دیدگاه


            #6
            پاسخ : پرش زیاد در adc

            عجب ؟؟؟ من پایه adc کلا زمین کردم . مستقیم . عدد از 5 تا 42 تغییر میکنه ؟؟؟

            دیدگاه


              #7
              پاسخ : پرش زیاد در adc

              سلام.
              من با این مشکل مواجه شدم شمائ از روش مانگین گیری استفاده کن مشکلت حل میشه . مثلا 10 نمونه بگیر .

              دیدگاه


                #8
                پاسخ : پرش زیاد در adc

                من که با ۱۰۰ نمونه هم به نتیجه مطلوب نرسیدم
                [آموزشی] کنترل رله با پیامک توسط sim800l
                [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                صفحه اینستاگرام : ecdco_ir

                دیدگاه


                  #9
                  پاسخ : پرش زیاد در adc در stm

                  دقیقا من هم 40 تا نمونه گرفتم فرقی نکرد. همه تنظیمات cobe دست کاری کردم فرقی نکرد.



                  این مطالب خوندم ولی اجرا کردم ولی فرقی نکرد
                  جدیدترین ویرایش توسط sepehr63; ۲۳:۴۷ ۱۳۹۶/۰۳/۲۴.

                  دیدگاه


                    #10
                    پاسخ : پرش زیاد در adc در stm

                    با سلام
                    در میکرو avr برای یک نمونه برداری دقیق
                    باید سرعت نمونه برداری درست تنظیم
                    بشه مثلا بهترین حالت نمونه برداری با
                    اسیلاتور داخلی 1M اتفاق میافته.
                    گفتم شاید این نکته تو stm هم صدق
                    کنه، تقسیم کلاک adc رو تغییر بدید
                    شاید درست شد. گاهی وقتا هم یک خازن
                    100nf دکوپلاژ روی خود کانال هم تاثیر
                    داره.

                    دیدگاه


                      #11
                      پاسخ : پرش زیاد در adc

                      یعنی همه فرکانس هارو تست زدم .اصلا یه چیز ضایعی هست . وقتی پین مستقیم به زمین میزنم عدد adc از 5 تا 42 تغییر میکنه . یک بار 5 بعدیش میشه 18 بعد میشه 10 ...
                      اصلا نا امیدم کرده . خیلی سرچ زدم . خیلی ها این مشکل دارند . سنسور lm35 بهش زدم با همون دقت 1 درجه پرش که جه عرض کنم جفتک میزنه
                      دیگه روی adc arm حساب نمیکنم و adc خارجی میزارم. نمیدونم adc lpc - atmel هم اینجوریه یا نه؟؟؟

                      دیدگاه


                        #12
                        پاسخ : پرش زیاد در adc

                        من کریستال 1 مگ به میکرو زدم و PLL فعال نکردم . کلاک ADC تا 16 تقسیم کردم فرقی نکرد .
                        حتی مثال های توی سایت های مختلف تست زدم باز همین مشکل داشت
                        روی 2 تا برد مختلف تست زدم باز همین بود
                        پیشنهاد میکنم روی ADC STM اصلا حساب نکنید . برا لای جرز خوب نیست .

                        دیدگاه


                          #13
                          پاسخ : پرش زیاد در adc

                          مدیران و حامیان stm نظری ندارند ؟؟؟؟

                          دیدگاه


                            #14
                            پاسخ : پرش زیاد در adc

                            نوشته اصلی توسط AIOBIT نمایش پست ها
                            مدیران و حامیان stm نظری ندارند ؟؟؟؟
                            اینجا STM32 حامی یا طرف دار نداره. اینجا استفاده کننده و مصرف کننده داره. ما طرفداری چیزی رو نمیکنیم.
                            در مورد این تاپیک باید بگم که در این تاپیک هم گفته بودم که ADC میکرو STM32 نه بچه بازیه و نه حساسیتش کمتره. تفاوتش رو اینجا هم گفتم:


                            سلام در میکروهای AVR وقتی یه مقدار انالوگ رو اندازه گیری میکنیم و دو مقاومت 1 کیلو بین 0 تا 5 ولت قرار داده باشیم خروجی مقدار انالوگ بین این دو مقاومت عدد 512 هست و ممکنه بین 511 و 512 خروجی تغییر کنه اما وقتی همین دو مقاومت رو بین 0 تا 3.3 قرار میدیم و با میکروکنترلر STM32F103RET6 قصد اندازه گیری این مقدار انالوگ رو داریم خروجی خیلی نوسان داره، مثلا بجای اینکه مقدار خروجی بین 0 تا 4096 یعنی 2048 باشه این عدد بین 1980 تا 2100 مدام در حال تغییر هست. تغذیه میکرو هم از فیلتر سلفو خازن استفاده


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


                            دوستان سلام - ADC تراشه STM32F103Zet6 رو راه اندازی کردم و با کالیبراسیون اولیه (قبل از شروع تبدیل) رنج کاملی از 0 تا 4096 رو در بازه 0-3.3 ولت دریافت می کنم . مشکل اینه که وقتی یه شبکه مقاومتی می چینم تا ولتاژ 5 یا 30 ولت رو در بازه 0 تا 3.3 اندازه گیری کنم پایه های ADC هر کدوم یه ولتاژ بین 1تا 3 ولت میسازن!چرا نمی دونم.! یه مسئله دیگه هم هست و اونم اینه که وقتی ولتاژ مثلا خارجی که دارم اندازه گیری میکنم رو قطع کنم و پایه ADC رو PULL Down می کنم بازم یه ولتاژی روی این پایه ها هست .که نباید


                            دوستانی که مشکل داره همه چیزشون رو اینجا بذارن تا ما هم ببینیم و نظر بدیم. من مطمئنم شماها یه جایی خراب کردید.

                            دیدگاه


                              #15
                              پاسخ : پرش زیاد در adc

                              اون پست من کامل خوندم . فرض کن من pcb بد کشیدم و نکات رعایت نکردم . حالا چرا من وقتی اون پایه adc از بیخ میکرو به زمین میزنم عدد 0 نمیشه و مدام تغییر میکنه.؟؟؟اگه اعدادی که متغیر هست حالا بین 0 تا 5 یا 10 بود یه چیزی ولی این عدد تا 42 متغیره.من تمام این پست هارو خوندم ولی چیزی که متوجه شدم اینه که هیچ کسی به نتیجه نرسیده.حالا شاید مبکرو های 144 پایه که vref خارجی دارند بهتر باشه ولی این هم نباید انقدر مزخرف باشه.توی اون پست خود اقای پورخلیلی هم ظاهرا به جایی نرسیده
                              این کد توی main هست
                              کد:
                                  HAL_ADC_Start(&hadc1);
                                      HAL_ADC_PollForConversion(&hadc1,100);
                                  adc = HAL_ADC_GetValue(&hadc1);
                                      sprintf(lcd,"adc->%04u ",adc);
                                       LCD_SendText (0,0,lcd);
                                      HAL_Delay(500);
                              این قسمت کانفیگ adc


                              /* ADC1 init function */
                              static void MX_ADC1_Init(void)
                              {


                              ADC_ChannelConfTypeDef sConfig;
                              ADC_InjectionConfTypeDef sConfigInjected;


                              /**Common config
                              */
                              hadc1.Instance = ADC1;
                              hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
                              hadc1.Init.ContinuousConvMode = DISABLE;
                              hadc1.Init.DiscontinuousConvMode = DISABLE;
                              hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
                              hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
                              hadc1.Init.NbrOfConversion = 1;
                              if (HAL_ADC_Init(&hadc1) != HAL_OK)
                              {
                              Error_Handler();
                              }


                              /**Configure Regular Channel
                              */
                              sConfig.Channel = ADC_CHANNEL_15;
                              sConfig.Rank = 1;
                              sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
                              if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
                              {
                              Error_Handler();
                              }


                              /**Configure Injected Channel
                              */
                              sConfigInjected.InjectedChannel = ADC_CHANNEL_15;
                              sConfigInjected.InjectedRank = 1;
                              sConfigInjected.InjectedNbrOfConversion = 1;
                              sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5;
                              sConfigInjected.ExternalTrigInjecConv = ADC_INJECTED_SOFTWARE_START;
                              sConfigInjected.AutoInjectedConv = ENABLE;
                              sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
                              sConfigInjected.InjectedOffset = 0;
                              if (HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected) != HAL_OK)
                              {
                              Error_Handler();
                              }


                              }


                              جدیدترین ویرایش توسط sepehr63; ۱۴:۱۹ ۱۳۹۶/۰۳/۲۵.

                              دیدگاه

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