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





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









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









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





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

نمایش نتایج: از 1 به 8 از 8

موضوع: مشکل با ADC

  1. #1
    2013/12/15
    کاشان
    141
    10

    مشکل با ADC

    سلام دوستان.
    من تازه کار با آرم رو شروع کردم برا همین سوالاتم شاید خیلی ساده باشن. من پیشاپیش معذرت میخوام
    سه تا مشکلی که دارم.
    1- از برد اموزشی فروشگاه، STM32F103 استفاده میکنم و یه دونه سنسور LM35 و یدونه ولوم رو به ADC متصل کردم. با زیاد کردن ولوم، دما هم چند درجه زیاد میشه. این مشکل از کجاست؟ سخت افزاریه یا نرم افزاریه؟
    این دستورات من برا خوندن ADCهست:
    کد:
    hadc1.Init.NbrOfConversion=2;///////////channel of read        
    HAL_ADC_Init(&hadc1);/////channel init
            HAL_ADC_Start(&hadc1);//////start adc
            HAL_ADC_PollForConversion(&hadc1,10);/////time for ready
            temp=HAL_ADC_GetValue(&hadc1);//////////get value
            HAL_ADC_Stop(&hadc1);///////stop adc
            temp*=0.107;    
            
            hadc1.Init.NbrOfConversion=1;///////////channel of read
            HAL_ADC_Init(&hadc1);/////channel init
            HAL_ADC_Start(&hadc1);//////start adc
            HAL_ADC_PollForConversion(&hadc1,10);/////time for ready
            adc=HAL_ADC_GetValue(&hadc1);//////////get value
    HAL_ADC_Stop(&hadc1);///////stop adc
    کد:
    hadc1.Instance = ADC1;  
    hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
      hadc1.Init.ContinuousConvMode = DISABLE;
      hadc1.Init.DiscontinuousConvMode = DISABLE;
      hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
      hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc1.Init.NbrOfConversion = 2;
      HAL_ADC_Init(&hadc1);
    
    
        /**Configure Regular Channel 
        */
      sConfig.Channel = ADC_CHANNEL_1;
      sConfig.Rank = 2;
      sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
      HAL_ADC_ConfigChannel(&hadc1, &sConfig);
    
    
        /**Configure Regular Channel 
        */
      sConfig.Channel = ADC_CHANNEL_0;
      sConfig.Rank = 1;
      sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
      HAL_ADC_ConfigChannel(&hadc1, &sConfig);
    سوال دوم:
    برا ایجاد تاخیر با حلقه FOR، این دستور چند کلاک لازم داره؟
    کد:
    for(i=0;i<1000;++i);
    سوال سوم:
    میخوام تو وقفه خارجی به یه متغیر مقدار بدم و از اون متغییر تو تابعmainاستفاده کنم. من متغییرم رو تو تایع مین تعریف میکنم ولی وقتی میخوام تو وقفه خارجی اون رو بخونم، متغییر رو نمیشناسه.

    من با نرم افزار کیل کار میکنم و برا نوشتن تو تابع وقفه از کتابخونه#include "stm32f1xx_it.h" استفاده میکنم. آیا اصلا این روش درسته،

    ممنون از همه دوستان
  2. #2
    2015/08/27
    1,741
    993

    پاسخ : مشکل با ADC

    سلام به شما

    1_شماتیک اتصال ولوم و سنسور رو رسم کنید یا بگید
    2_ابتدا مقدار 0 به متغیر i وارد میشه ( 1 کلاک )
    بعدش شرط چک میشه( نمیدونم یک کلاک یا دو کلاک )
    اگه درست بود یک واحد به متغیر اضافه میشه ( یک کلاک )
    دوباره شرط چک میشه اگه درست بود یک واحد به متغیر اضافه میشه و . . .
    در کل حدود 2000 کلاک فکر کنم لازم داشته باشه
    3_کلا تو برنامه نویسی هرجا خواستی از متغیر استفاده کنی باید قبلش متغیر رو تعریف کنی

    سوالی داشتید در خدمتم
    ضمنا از این که به جمع دوستداران الکترونیک و میکروکنترلر به خصوص میکروکنترلر آرم پیوستید تبریک میگم

    موفق باشید
  3. #3
    2013/12/15
    کاشان
    141
    10

    پاسخ : مشکل با ADC

    خروجی سنسور lm35 رو مستقیما به ورودیadcوصل کردم و ولوم رو هم همینطور.

    من به یه متغییری نیاز دارم که بتونم همزمان هم تو تابع مین و هم داخل روتین وقفه خارجی بتونم مقدار دهی کنم. من تو مین متغییر رو تعریف میکنم ولی تو وقفه نمیتونم از اون استفاده کنم. خطا میده میگه متغییر تعریف نشده.



    ویرایش توسط الفا11 : 2018/04/11 در ساعت 20:28
  4. #4
    2015/08/27
    1,741
    993

    پاسخ : مشکل با ADC

    در مورد اندازه گیری دما با lm,35 اول این که اگه تغذیه این آی سی 5 ولت باشه خروجی ضرب در 100 میشه همون دمای اندازه گیری شده
    بنابر این شما با adc مقدار دیجیتال رو که میخونید با فرمول تبدیل به ولت که میکنید باید در عدد 100 ضرب کنید که بشه دما
    1_حالا من نمیدونم این وسط شما چیکار به ولوم دارید ؟؟؟ آیا ولوم به سنسور وصل کردید ؟؟؟
    2_درمورد متغیر هم عرض کردم خدمت شما که باید تنها قبل از وقفه تعریفش کنید . چرا این کارو انجام ندادی ؟؟؟؟
    ویرایش توسط rezamajdi : 2018/04/11 در ساعت 22:47
  5. #5
    2011/08/07
    اصفهان
    974
    65

    پاسخ : مشکل با ADC

    اگر متغیر که میخوای باهاش کار کنی تو یه فایل دیگه تعریف شده اینجا تو فایل مین تعریف شده شما میخوای ازش تو یه فایل دیگه استفاده کنی باید extern char val تعریف کنی
    کلمه extern رو بنویس قبل تعریف متغیر تو فایل دیگه

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

    برای خوندن adc فرکانس adc رو تا جایی که میتونی کم کن نتیجه رو بگو
  6. #6
    2018/02/17
    دزفول
    34
    10

    پاسخ : مشکل با ADC

    سلام شما باید متغیرتون رو بیرون حلقه main و قبل از تابع وقفه تعریف کنید مثلا volatile float temp=0.00; و اینکه بعد از تبدیل مقدار دیجیتال به ولتاژ(آنالوگ) باید اون رو در عدد 100 ضرب کنید تا به دما تبدیل بشه. چون ولتاژ adc stm32 برابر 3.3ولت و adc اون 12بیتی هست ضریب تبدیل ما برای تبدیل مقدار دیجیتال به آنالوگ میشه 3.3/4095=0.00080586 که برابر ولتاژ معادل با دمای سنسور lm35 هست حالا اگر این مقدار رو در 100 ضرب کنید مقدار دما بدست میاد.
  7. #7
    2013/12/15
    کاشان
    141
    10

    پاسخ : مشکل با ADC

    نقل قول نوشته اصلی توسط ehsanbagheri

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اگر متغیر که میخوای باهاش کار کنی تو یه فایل دیگه تعریف شده اینجا تو فایل مین تعریف شده شما میخوای ازش تو یه فایل دیگه استفاده کنی باید extern char val تعریف کنی
    کلمه extern رو بنویس قبل تعریف متغیر تو فایل دیگه

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

    برای خوندن adc فرکانس adc رو تا جایی که میتونی کم کن نتیجه رو بگو
    سلام مجدد
    همون جور که راهنمایی کردید مشکل متغییر حل شد. باید متغییر رو از جنسextern انتخاب میکردم. ممنون بابت راهنمایی
    برا مشکلی که با آنالوگ به دیجیتال هم داشتم، با افزایشSAMPLETIMEمشکل بر طرف شد. ولی چرا با SAMPLETIMEهای پایین، adcجواب نمیده؟
    در ضمن شما گفتید عدد دریافتی از آنالوگ به دیجیتال رو در 100 ضرب کن تا دما رو بدست بیاری. ولی من عددی که از آنالوگ به دیجیتال میگیرم تو دمای تقریبا25 درجه برابر 250 هستش و باید تقسیم بر 10 بکنم تا دما رو بدست بیارم. اینجا رو هم راهنمایی بکنید.

    ممنون از همه دوستانی که راهنمایی کردن
  8. #8
    2018/02/17
    دزفول
    34
    10

    پاسخ : مشکل با ADC

    سلام شما اون عدد دیجیتال (250) رو ابتدا باید ضرب کنید در (3.3/4095) تا تبدیل بشه به ولتاژ متناسب با دما بعد اونو در 100 ضرب میکنید تبدیل میشه به خود دما برای عدد مد نظر شما میشه :
    20.14 = 100 * (3.3/4095) * 250 که اینجا دما 20.14 بدست اومد.
نمایش نتایج: از 1 به 8 از 8

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

  1. مشکل - مشکل - مشکل ( حروف نا مفهوم برروی LCD)
    توسط ssaeid2000 در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 11
    آخرين نوشته: 2008/10/07, 17:00

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

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

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

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

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