درودمن عدد 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 نه بچه بازیه و نه حساسیتش کمتره. تفاوتش رو اینجا هم گفتم:
سلام در میکروهای 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 می کنم بازم یه ولتاژی روی این پایه ها هست .که نباید
دوستانی که مشکل داره همه چیزشون رو اینجا بذارن تا ما هم ببینیم و نظر بدیم. من مطمئنم شماها یه جایی خراب کردید.
دیدگاه
-
پاسخ : پرش زیاد در 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; ۱۴:۱۹ ۱۳۹۶/۰۳/۲۵.
دیدگاه
دیدگاه