درودمن عدد adc avr با دقت 10 بیت خوندم و تقسیم بر 204 کردم و ولتاژ ثابتی بهش دادم . عددی که به من میده ثابت هستحالا همین کارو با stm کردم ولی تقسیم بر 1241 کردم که مثل همون avr بشه . خیلی خیلی پرش داره حتی با adc خارجی 12 بیتی هم تست کردم پرش نداشت ولی این stm پرش دارهروی چند نمونه برد هم تست زدم همین بود ؟؟کسی تجربه ای داره ؟؟؟
اطلاعیه
Collapse
No announcement yet.
پرش زیاد در adc
Collapse
X
-
پاسخ : پرش زیاد در adc
سلام
من هم این مشکل رو داشتم،البته حل نشد منم فعلآ بی خیالش شدم
ظاهراً خیلی ها با adc میکرو stm32f103 مشکل دارن.
اینم لینک
سلام من از هدر بورد سایت استفاده میکنم پایه adc رو به vcc وصل کردم ،نمیدونم چرا هر برنامه ای برای adc مینویسم حتی با 239 کلاک برای نمونه برداری و delay دو ثانیه ای باز هم اعداد خوانده شده از 4095 تا حتی 3950 متغیره!!!؟؟؟ تغذیه هم از 3.3 ولت stlink/v2 هستش
دلیل: ادغام دو پست برای جلوگیری از اسپم
از فریت بید و فیلتر LC برای تغذیه VDDA استفاده کنید ببینید مشکل حل میشه؟
فکر کنم مقادیر رو هم 100nf و 20uH قرار بدید خوب باشه.
از خازن مرغوب 100nf هم برای ورودی adc استفاده کنید.
سعی کنید زمین آنالوگ و دیجیتال رو هم از هم جدا کنید،از فریت بید هم میتونید برای جدا کردن زمین آنالوگ و دیجیتال استفاده کنید.
ببینید با این کارها نتیجه بهتر میشه؟
دیدگاه
-
جدیدترین ویرایش توسط sepehr63; ۲۳:۴۷ ۱۳۹۶/۰۳/۲۴.
دیدگاه
-
پاسخ : پرش زیاد در adc در stm
با سلام
در میکرو avr برای یک نمونه برداری دقیق
باید سرعت نمونه برداری درست تنظیم
بشه مثلا بهترین حالت نمونه برداری با
اسیلاتور داخلی 1M اتفاق میافته.
گفتم شاید این نکته تو stm هم صدق
کنه، تقسیم کلاک adc رو تغییر بدید
شاید درست شد. گاهی وقتا هم یک خازن
100nf دکوپلاژ روی خود کانال هم تاثیر
داره.
- تشکرها 1
دیدگاه
-
پاسخ : پرش زیاد در adc
یعنی همه فرکانس هارو تست زدم .اصلا یه چیز ضایعی هست . وقتی پین مستقیم به زمین میزنم عدد adc از 5 تا 42 تغییر میکنه . یک بار 5 بعدیش میشه 18 بعد میشه 10 ...
اصلا نا امیدم کرده . خیلی سرچ زدم . خیلی ها این مشکل دارند . سنسور lm35 بهش زدم با همون دقت 1 درجه پرش که جه عرض کنم جفتک میزنه
دیگه روی adc arm حساب نمیکنم و adc خارجی میزارم. نمیدونم adc lpc - atmel هم اینجوریه یا نه؟؟؟
دیدگاه
-
پاسخ : پرش زیاد در adc
نوشته اصلی توسط AIOBIT نمایش پست هامدیران و حامیان stm نظری ندارند ؟؟؟؟
در مورد این تاپیک باید بگم که در این تاپیک هم گفته بودم که ADC میکرو STM32 نه بچه بازیه و نه حساسیتش کمتره. تفاوتش رو اینجا هم گفتم:
(تاپیک بالا رو خوب بخونید)
بخاطر حساسیت بالاتر و سرعت نمونه گیری بیشتر، باید دقت بیشتری توی طراحی برد و PCB اعمال کنید. توی تاپیک بالا کسی که با LPC کار کرده و هم STM32 نظرش رو گفته که کاملا واضحه و بعنوان کسی که تجربه دو میکرو خوب رو داره، میگه که STM32 خیلی خوبه.
دوستانی که تو این تاپیک نظر دادن و یا تاپیک ایجاد کردن هیچ کدوم هیچ چیزی در مورد طراحی برد و PCBشون نگفتن. الان این دوستمون یه سری نکات رو توی این تاپیک که من گفته بودم رعایت کرد و نتیجه هم گرفت:
دوستانی که مشکل داره همه چیزشون رو اینجا بذارن تا ما هم ببینیم و نظر بدیم. من مطمئنم شماها یه جایی خراب کردید.
دیدگاه
-
پاسخ : پرش زیاد در 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);
/* 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; ۱۴:۱۹ ۱۳۹۶/۰۳/۲۵.
دیدگاه
دیدگاه