اطلاعیه

Collapse
No announcement yet.

کتابخانهآ‌ای برای چیپ AD7780-AD7730

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

    کتابخانهآ‌ای برای چیپ AD7780-AD7730

    درود

    شاید تا حالا نیاز داشتید که از یک LoadCell در کارتون استفاده کنید
    منم چند مدت پیش در پروژهآ‌ای نیاز به استفادش داشتم
    اول میخواستم سیگنال لودسل رو تقویت کنم و بدم به ADC میکروکنترلر
    ولی متاسفانه ADC میکروکنترلرم فقط ۱۰ بیت دقت داشت و تازه پایداری جالبی هم نداشت (یا من نتونستم زیاد پایدارش کنم)
    بطور خیلی اتفاقی یکی از دوستان چیپی رو بهم معرفی کرد که مخصوص راه اندازی پل مقاومتی بود و خوراکش استفاده از اون برای راه اندازی لودسل بود
    خود این چیپ تقویت میکنه ، فیلتر میکنه ، با دقت خیلی خوب و بصورت سریال هم خروجی میده بیرون
    و اون چیزی نبود جز AD7730

    دیدم از این بهتر دیگه نمیشه و شروع کردم به خوندن منوالش و ور رفتن باهاش

    منتها ، همونطور که میدونید ، یه ADC خوب ، ADC مرده هست
    اوه ، ببخشید ، منظورم اینه که یه ADC خوب ADC ای هست که ولتاژ رفرنس خوبی هم داشته باشه :biggrin:

    من برای تولید یه ولتاژ ثابت و دقیق از چیپ AD584 استفاده کردم.
    این چیپ سه تا ولتاژ رفرنس میده که من از پنج ولتش استفاده کردم.

    بالاخره بعد از چند روز تونستم جواب بسیار مطلوبی از کارم بگیرم
    کتابخونه ای رو که برای AD7730 نوشتم ، اینجا میزارم تا بقیه دوستانم هم ازش استفاده کنن و گسترشش بدن (اگه حوصلشو دارن)

    من برای تست این چیپ اونو روی بردبرد تست میکردم ، ولی روی برد برد حداکثر فقط تونستم ۱۲ بیت پایدار از ۱۶ بیت دقت داشته باشم
    که این اصلا برای کارم کافی نبود.
    ولی در کمال تعجب روی PCB ، دقت ۱۵ بیت از ۱۶ بیت رو داشتم، یعنی فقط یک بیت نوسان ! (اون یه بیت هم بخاطر جابجایی هوا در کنار لودسل بود! )

    لودسلی که من استفاده کردم :


    مدار ساخته شده :


    دستگاه در حالت کار (لودسل یه مقدار تار افتاده)


    واین هم یک عکس هنری :biggrin:



    اینجا من مدارچاپی نمونهآ‌ای رو هم قرار میدم ، تا ازش استفاده کنید

    اتصالات سخت افزاری :

    در فایل هیدر شما میتونید اتصالات میکروکنترلر به چیپ رو تعیین کنید ،ولی پایه MCLK IN همیشه باید به پایه OC0 میکروکنترلر وصل بشه.
    چون برای AD7730 فرکانس رو با تایمر ساختم.
    یا شما میتونید برای AD7730 یک کریستال بزارید که در اینصورت نیازی به استفاده از پایه OC0 میکروکنترلر نیست
    ( من خودم چون با کریستال برای AD7730 جواب خوبی نگرفتم ، از میکروکنترلر برای تولید فرکانس برای AD7730 استفاده کردم )

    یک نمونه سیم کشی (در PCB ارایه شده به همین شکل است )

    کانفیگ متناسب با سیم کشی بالا (در فایل هیدر) :
    کد PHP:
    #define AD_SCLK_BIT 0
    #define AD_RESET_BIT 1
    #define AD_DOUT_BIT 2
    #define AD_MCLK_BIT 3

    #define AD_DIN_BIT 4



    #define AD_PORT PORTB

    #define AD_PIN PINB

    #define AD_DDR DDRB 


    مدار چاپی نمونه :


    توابع:

    تابعی برای راه اندازی اولیه کنترلر برای ارتباط برقرار کردن با AD7730
    کد PHP:
    void AD_InitHW(void); 


    توابع خواندن از چیپ ---------------------------------------------------
    خواندن رجیسترهای ۱۶ بیتی و یا کمتر :
    کد PHP:
    unsigned int AD_readReg(char regAddrchar bitNum); 


    خواندن از رجیسترهای ۲۴ بیتی :

    کد PHP:
    void AD_readReg24(char regAddrunsigned int *highunsigned int *low); 


    رجیسترهایی که میتوان آنها را خواند:
    کد PHP:
    // Reister's Addresses for Single Read

    #define AD_REG_R_STATUS 0x10

    #define AD_REG_R_DATA 0x11

    #define AD_REG_R_MODE 0x12

    #define AD_REG_R_FILTER 0x13

    #define AD_REG_R_DAC 0x14

    #define AD_REG_R_OFFSET 0x15

    #define AD_REG_R_GAIN 0x16

    #define AD_REG_R_TEST 0x17 


    توابع نوشتن در چیپ ---------------------------------------------------
    نوشتن در رجیسترهای ۱۶ بیتی یا کمتر:
    کد PHP:
    void AD_writeReg(char regAddrunsigned int datachar bitNum); 


    نوشتن در رجیسترهای ۲۴ بیتی :

    کد PHP:
    void AD_writeReg24(char regAddrunsigned int highunsigned int low); 


    رجیسترهایی که میتوان در آنها نوشت :
    کد PHP:
    // Reister's Addresses for Single Write

    #define AD_REG_w_STATUS 0x0

    #define AD_REG_w_MODE 0x2

    #define AD_REG_w_FILTER 0x03

    #define AD_REG_w_DAC 0x4

    #define AD_REG_w_OFFSET 0x5

    #define AD_REG_w_GAIN 0x6

    #define AD_REG_w_STOP 0x30 


    تابع خواندن مقدار ADC در حالت ادامه دار ---------------------------------------------------
    کد PHP:
    unsigned int AD_readCont16(void); 


    تابع جهت متوقف کردن خواندنآ‌آ‌:
    کد PHP:
    void AD_stopReadCont(void); 


    لایسنس

    سورس کد تحت پروانهآ‌ی جامع همگانی گنو منتشر شده که میتوانید در اینجا آنرا بیابید.
    ترجمه فارسی این پروانه


    دانلود

    سورس کتابخانه
    مثالی برای شروع

    یک مدار چاپی برای استفاده راحتتر از این چیپ :
    بصورت فایل PDF
    برای نرمآ‌افزار PCB

    امیدوارم که بدرد دوستان بخوره :smile:

    دانلود فایل های سورس، مثال و PCB به صورت یکجا از سرور ECA:
    http://vip.eca.ir/sharing/uploads/13621172771.zip
    چگونه هوشمندانه بپرسیم

    #2
    پاسخ : کتابخانهآ‌ای برای چیپ AD7730

    اول از همه بهتون تبریک میگم برای همچین نتیجه ی ترو تمیزی که گرفتید و البته به خاطر این همه حوصله ای که صرف کردید واقعا باید بهتون ایول گفت :applause:
    بعدشم پست تون برام خیلی جالب بود چون من تا دیروز داشتم خودم و به در و دیوار میزدم تا ad7705 رو راه اندازی کنم
    http://www.eca.ir/forum2/index.php?topic=20554.0
    حالا که دیروز موفق شدم رانش کنم شما امروز همچین پستی زدید ......

    حالا یه سوال: منم رو بردبرد مدارم رو بستم و از 16 بیت روی 10 تا 12 بیت بیشتر نمیشه حساب باز کرد یعنی روی pcb نتیجه بهتر میشه؟
    برای ولتاژ رفرنس هم از دیود رفرنس lm385 که دارای ولتاژ رفرنس 1.2 ولت هست استفاده کردم
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    دیدگاه


      #3
      پاسخ : کتابخانهآ‌ای برای چیپ AD7730

      نوشته اصلی توسط mikla
      اول از همه بهتون تبریک میگم برای همچین نتیجه ی ترو تمیزی که گرفتید و البته به خاطر این همه حوصله ای که صرف کردید واقعا باید بهتون ایول گفت :applause:
      بعدشم پست تون برام خیلی جالب بود چون من تا دیروز داشتم خودم و به در و دیوار میزدم تا ad7705 رو راه اندازی کنم
      ممنون mikla جان :smile:
      راستشو بخوای من امیدوار بودم قبل از اینکه جواب بگیری پستم آماده بشه
      ولی متاسفانه تو با پشتکاری که داشتی قبل از اینکه پست من آماده بشه جواب گرفتی :biggrin:

      نوشته اصلی توسط mikla
      حالا یه سوال: منم رو بردبرد مدارم رو بستم و از 16 بیت روی 10 تا 12 بیت بیشتر نمیشه حساب باز کرد یعنی روی pcb نتیجه بهتر میشه؟
      برای ولتاژ رفرنس هم از دیود رفرنس lm385 که دارای ولتاژ رفرنس 1.2 ولت هست استفاده کردم
      مطمئن باش روی PCB جواب بهتری میگیری :smile:
      در مورد ولتاژ رفرنس هم خوب کاری کردی، مهم ولتاژ ثابته (ولی شاید این AD584 بهتر باشه )
      چگونه هوشمندانه بپرسیم

      دیدگاه


        #4
        پاسخ : کتابخانهآ‌ای برای چیپ AD7730

        نوشته اصلی توسط r.babazadeh
        خسته نباشید
        اگر امکان داره چارت برنامه رو بدید تا با زبانهای دیگه هم بشه کار کرد
        چشم، اگر وقت و حوصلش بود حتما :smile:
        ولی کدش زیاد نیست، میشه با مطالعش چیزایی رو فهمید . منوال AD7730 هم که خیلی گویا هست

        نوشته اصلی توسط بهرام
        حمید جان خسته نباشی و ای ول به پشتکارت ، یه سوال ابتدایی :redface: اگه میشه در مورد این لود سل یه کم توضیح بده که چی هست و چیکار میکنه و به چه دردی میخوره ؟ اگه میشه دیتا شیتش رو اینجا بذار یا یه لینک
        لودآ‌سل ترانسدیوسری برای تبدیل وزن به سیگنال الکتریکیه
        اجالتا برای اطلاعات بیشتر اینجا رو یه مطالعه بفرمایید
        چگونه هوشمندانه بپرسیم

        دیدگاه


          #5
          پاسخ : کتابخانهآ‌ای برای چیپ AD7730

          نوشته اصلی توسط r.babazadeh
          هنوز منتظر
          اخر دیتاشیت این سری از adc های 16 بیتی چارت برنامه و یه برنامه نمونه اورده شده البته برنامش برای من کارساز نشد تو اون برنامه ریست سخت افزاری به vcc وصل هست ولی من با وصل کردن این پایه به یکی از پایه های میکرو تونستم جواب بگیرم البته cs رو هم به پایه میکرو وصل کردم (بعد از هربار ریست adc این ایسی اماده نوشتن در communication register میشود )
          چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

          دیدگاه


            #6
            پاسخ : کتابخانهآ‌ای برای چیپ AD7730

            قابل توجه دوستانی که از این تاپیک استفاده می کنند:

            آی سی AD7730 مخصوص اندازه گیری به روش تناسبی (ratiometric) است. بنابراین در مدار آن نباید از رفرنس خارجی مستقل استفاده کرد.
            در روش تناسبی خطاهای مربوط به رفرنس خودبه خود حذف می گردد. نحوه ی استفاده از این روش در دیتاشیت آی سی توصیف شده است.
            با سپاس از آقای رستمی
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه


              #7
              پاسخ : کتابخانهآ‌ای برای چیپ AD7730

              خیلی ممنون از اینکه توجه کردین :mrgreen:

              بلاخره تونستم جواب بگیرم ولی یه دوتا مشکل دارم امیدوارم یکی راهنمایی کنه

              1- عدد نشون داده شده روی lcd در ابتدای کار یه عددی حدود 31124 الی 31184 هست من چطور میتونم این مقادیر رو بصورتی کالیبره کنم که از صفر شروع بشه ؟
              2- با توجه به اینکه این نوع adc داری دو A2D داخلی میباشه چطور میتونم از A2D دوم استفاده کنم؟

              با تشکر از همه

              دیدگاه


                #8
                پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                نوشته اصلی توسط spart
                خیلی ممنون از اینکه توجه کردین :mrgreen:

                بلاخره تونستم جواب بگیرم ولی یه دوتا مشکل دارم امیدوارم یکی راهنمایی کنه

                1- عدد نشون داده شده روی lcd در ابتدای کار یه عددی حدود 31124 الی 31184 هست من چطور میتونم این مقادیر رو بصورتی کالیبره کنم که از صفر شروع بشه ؟
                2- با توجه به اینکه این نوع adc داری دو A2D داخلی میباشه چطور میتونم از A2D دوم استفاده کنم؟

                با تشکر از همه
                آفرین
                اینجوری بهتر شد که خودت تلاش کردی و اشکال رو پیدا گردی. :applause:

                1- عددی که از AD7730 در حالت 16 بینی+bipolar و بدون نیرو به لودسل خونده میشه 32768 است. یعنی این عدد صفر شماست. هر عددی که می خوانید باید از 32768 کم کنید تا صفر شما تنظیم شود. اگر جهت نیروی لودسل باعث ایجاد ولتاژ مثبت در خروجی آن شود عدد بزرگتر از 32768 خواهید خواند و برعکس. پس با تفریق از 32768 نیروی مثبت و منفی راخواهید خواند.

                البته چون شما AD7730آ‌ را صفر نکردید بجای 32768 عدد 31184 را می خوانید. دو راه برای صفر کردن وجود دارد: 1- صفر کردن خود AD7730 و 2- صفر کردن نرم افزاری

                برای صفر کردن AD7730آ‌ باید سه عدد باینری زیر را بترتیب بفرستید:

                00000010
                11000000
                10100000
                اگر در دیتاشیت AD7730 اطلاعات MODE REGISTER را ببینید بیشتر متوجه قضیه می شوید.

                روش دوم یعنی روش نرم افزاری کاری به کار AD7730 ندارد و شما هر عددی را که می خوانید باید از یک عدد ثابت که برای شما 31184 است کم کنید. اگر کلیدی را بعنوان zero در نظر گرفتید کافیست هر وقت این میکرو این کلید را خواند مقدار قرائت شده بعنوان این عدد ثابت در نظر گرفته شود. مثلا الان شما 31500 می خوانید و کلید zero را فشار می دهید. میکرو باید 31500 را جایی ذخیره کند و هر مقداری که از AD7730 می خواند از آن کم کند و نمایش دهد.

                2- برای استفاده از کانال دوم باید بایت دوم MODE REGISTER را یعنی بیت های CH0 , Ch1 را تغییر دهید(صفحه ی 18 دیتا شیت) l
                مثلا اگر می خواهید کانال دوم را صفر کنید این سه بایت را باید بفرستید:

                00000010
                11000000
                10100001

                با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                دیدگاه


                  #9
                  پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                  درود
                  واقعن که لطف کردین و من و از یه سر درگمی نجات دادین. توی دیتاشیت هر چی نگا می کردم از ص 11 تا 21 رو اصلن نمیفهمیدم.

                  خوب حالا دو تا مشکل دیگه برام هست اگه راهنمایی کنین ممنون میشم:

                  1-من برای صفر کردن ابتدایی ورودی از روش نرم افزاری استفاده میکردم حالا که میخوام از روشی که شما فرمودید استفاده کنم مقدار خروجی دائمن صفره؟
                  2-میخوام از هر دو ورودی بخونم ولی مقدارهایی که میخونم از یکدیگه تاثیر میگره چیکار کنم؟

                  با تشکر
                  موفق باشید

                  دیدگاه


                    #10
                    پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                    1- اگه بیت B/Uآ‌ در Mode Register را 1 کنید دیگر ولتاژهای منفی را نمی توانید بخوانید و وقتی روتین صفر کردن AD7730آ‌ را اجرا کنید عدد شما صفر می شود. اما اگر این بیت را 0 کنید ولتاژهای منفی را هم می توانید بخوانید و با صفر کردن AD7730آ‌ مقدار خوانده شده 32768 می شود و شما باید هر چه می خوانید از 32768 کم کنید تا عدد صحیح را بخوانید.
                    دقت کنید برای هر کدام از کانال ها این کار را بصورت جداگانه باید انجام دهید.

                    2- در تمام مالتی پلکسرها این مشکل وجود داره. وقتی کانال عوض می کنید ولتاژ کانال قبلی کمی طول میکشه تا از روی خروجی مالتی پلکسر محو بشه. بهترین روش اینه که اولین عدد خوانده شده بعد از تغییر کانال را صرف نظر کنید.

                    من برنامه ی خودم برای خوندن از AD7730 را براتون اینجا میزارم. هرچند برای یک کاناله اما حتما خیلی کمکتون می کنه. اگه دقت کنید برنامه از چند روتین تشکیل شده. اول برنامه یک ثانیه تاخیر هست تا ولتاژهای مدار پایدار بشن. بعد روتین RESET_AD7730 آی سی را ریست می کند. سپس فیلتر داخلی آی سی توسط روتین ADC_FILTER_SET در بهترین حالت ممکن تنظیم میشه. بهترین حالت طبق دیتاشیت مضرب 57 هرتز است که وقتی CHPآ‌ صفر باشد 171 هرتز می شود.

                    نکته ی بسیار مهم دیگر این است که تمام کارها با پایه ی RDY آی سی سنکرون شده اند. یعنی تا کاری تمام نشد کار بعدی انجام نمی شود. همچنین یک متوسط گیری 50 تایی روی مقدار خوانده شده انجام می شود.

                    /************************************************** ***
                    Chip type : ATmega48
                    Clock frequency : 1 MHz
                    ************************************************** ***/

                    #include <mega48.h>
                    #include <spi.h>
                    #include <delay.h>
                    #define SYS_ZERO_MODE 0b11000000
                    #define SELF_CALB_MODE 0b10100000
                    #define CONT_CNV_MODE 0b00100000
                    #define ADC_RDY PIND.6
                    #define ADC_CS PORTD.7
                    #define UPDATE_RATE 171
                    #define ADC_Vin 20 //mv
                    #define ADC_OFFSET 30
                    #define MODE_LOW 0b10000000|(16*((ADC_Vin-10)/10))

                    bit CHP;

                    //************************************************** ******
                    void RESET_AD7730(void)
                    {
                    ADC_CS=0;
                    spi(255);
                    spi(255);
                    spi(255);
                    spi(255);
                    ADC_CS=1;
                    }
                    //************************************************** ******
                    void ADC_FILTER_SET(void)
                    {
                    unsigned int filter;
                    unsigned char filterL,filterH,byte3;
                    if(CHP)
                    {
                    filter=102400/UPDATE_RATE;
                    byte3=0b00010000;
                    }
                    else
                    {
                    filter=307200/UPDATE_RATE;
                    byte3=0;
                    }
                    if(filter>2048) filter=2048;
                    filterL=filter % 16;
                    filterL=filterL*16;
                    filterH=filter / 16;
                    ADC_CS=0;
                    spi(0b00000011);
                    spi(filterH);
                    spi(filterL);
                    spi(byte3);
                    ADC_CS=1;
                    }
                    //************************************************** ******
                    void ADC_MODE_SET(void)
                    {
                    ADC_CS=0;
                    spi(0b00000010);
                    spi(ADC_MODE_BH);
                    spi(MODE_LOW);
                    ADC_CS=1;
                    }
                    //************************************************** ******
                    void ADC_GAIN_SET(void)
                    {
                    ADC_CS=0;
                    spi(0b00000110);
                    spi(ADC_GAIN2);
                    spi(ADC_GAIN1);
                    spi(ADC_GAIN0);
                    ADC_CS=1;
                    }
                    //************************************************** ******
                    void ADC_GAIN_READ(void)
                    {
                    // default value of gain= 593CEA Hex
                    ADC_CS=0;
                    spi(0b00010110);
                    ADC_GAIN2=spi(255);
                    ADC_GAIN1=spi(255);
                    ADC_GAIN0=spi(255);
                    ADC_CS=1;
                    }
                    //************************************************** ******
                    unsigned int ADC_READ_DATA(void)
                    {
                    unsigned int adc_val;
                    ADC_CS=0;
                    spi(0b00010001);
                    adc_val=(unsigned int) spi(255)*256 + spi(255);
                    ADC_CS=1;
                    return(adc_val);
                    }
                    //************************************************** ******
                    void main(void)
                    {
                    unsigned int ADC,temp,temp2;
                    bit ADC_SEL,ZERO_ADC;
                    unsigned char sum_cntr;
                    unsigned long int sum;

                    // SPI initialization
                    // SPI Type: Master
                    // SPI Clock Rate: 250.000 kHz
                    // SPI Clock Phase: Cycle Half
                    // SPI Clock Polarity: High
                    // SPI Data Order: MSB First
                    SPCR=0x58;
                    SPSR=0x00;

                    CHP=0;
                    wait_ms(1000);
                    RESET_AD7730();
                    ADC_FILTER_SET();
                    ZERO_ADC=1;
                    ADC_SEL=0;
                    sum_cntr=0;
                    sum=0;
                    ADC=32768;
                    while (1)
                    {
                    if(ADC_RDY==0)
                    {
                    if(ZERO_ADC)
                    {
                    ADC_MODE_BH=SYS_ZERO_MODE;
                    ADC_MODE_SET();
                    ZERO_ADC=0;
                    ADC_SEL=1;
                    }
                    else
                    {
                    if(ADC_SEL)
                    {
                    ADC_SEL=0;
                    ADC_MODE_BH=CONT_CNV_MODE;
                    ADC_MODE_SET();
                    }
                    else
                    {
                    temp=ADC_READ_DATA();
                    sum=sum+temp;
                    if(++sum_cntr==50)
                    {
                    sum_cntr=0;
                    ADC=sum/50;
                    sum=0;
                    };
                    };
                    };
                    //************************************************** ******************
                    };
                    }


                    end



                    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                    دیدگاه


                      #11
                      پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                      با سلام
                      جناب spart واقعا شرمندهآ‌ام ، مدتی نبودم نتونستم به سوالتون پاسخ بدم
                      که جناب ahmadmn بسیار عالی و دقیق توضیح دادند. ممنون از ایشون :smile:

                      تا اونجا که یادمه! منم بصورت Bipolar لودسل رو میخوندم و عدد صفرم سی و دو هزار و خوردهآ‌ای بود.
                      یه دکمهآ‌ای هم روی LCD گزاشته بودم که با زدنش مقدار لودسل ذخیره میشد برای کم کردن از مقدارهای بعدی.
                      دقیقا مثل توضیحی که جناب ahmadmn فرمودند.
                      چگونه هوشمندانه بپرسیم

                      دیدگاه


                        #12
                        پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                        نوشته اصلی توسط rafei
                        با سلام به تمام دوستان.

                        متن هایی که فرستادین رو مطالعه کردم و بابت اطلاعات بسیار ارزشمندتون ممنونم.

                        من علاقه مند شده ام بر روی لود کار کنم و یاد بگیرم که چطور میتونم اطلاعاتی که این سنسور می ده رو با خطای کمتر از 0.1% بوسیله میکروکنترلر ثبت کنم.

                        حالا اگه ممکنه راهنماییم کنید که از کجا می تونم شروع کنم و با چه لودسل ها و آی سی هایی سروکار دارم و اینکه به طور کلی از لودسل تا ذخیره اطلاعات چه مراحلی رو باید طی کنم که اطلاعات قابل اطمینانی رو بتونم ثبت کنم.


                        پیشاپیش تشکر تشکر.

                        من علاقه مندم با لودسل های بین 10 تا 50 تن کار کنم
                        سلام دوست خوبم
                        لودسل رو خودتون باید انتخاب کنیم چون من نمی دونم چه توناژی مد نظرتونه. فروشگاه عارف الکترونیک توی جمهوری لودسل ها مارک بونگشین می فروشه که خوب جواب دادن. فرشنده های بسیار دیگه هم هستند که انتخاب رو سختتر کردند.
                        اگه بگید کار برای چه کاربردی می خواهید می تونم در انتخاب نوع لودسل هم کمکتون کنم. مثلا اگه می خواهید ب***** بسازید باید 4 تا لودسل تیغه ای استفاده کنید و ...
                        انواع لودسل:
                        http://www.bongshin.com/e_loadcell.htm

                        قسمت الکترونیک بسیار ساده است چون AD7730 تمام چیزهای مورد نیاز رو درون خودش داره. چهار سیم لودسل مستقیم به AD7730 وصل میشه و AD7730 هم به پورت SPI میکرو متصل میشه و تمام. هیچ قطعه ی دیگه ای نیاز ندارید. اگه نگاهی به دیتاشیت AD7730 بندازید:
                        http://www.analog.com/static/imported-files/Data_Sheets/AD7730_7730L.pdf
                        صفحه 40 رو ببینید متوجه میشید.
                        شماتیکی که من استفاده می کنم:

                        باقی کار نرم افزاره که در بالا گذاشتم.
                        با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                        دیدگاه


                          #13
                          AD7730 راه اندازی/ برنامه ریزی/ نویز گیری implementation

                          با سلام و تقدیر فراوان از تمام کسانی که معلومات خود را در راه پیشرفت علم و پیشرفت همنوعان صرف می کنند...
                          در هنگام کار با آیسی AD7730BN و با مطالعه نوشته ها و متن های تخصصی و سوال و جواب های وبلاگ ها در باره این آیسی سوالاتی برام پیش آمده که در جوابشون شک دارم، از این جهت کمی جسارت کردم و این همه سوال که تو ذهنم هست رو اینجا مطرح کردم که البته توقع ندارم که جواب همشون رو بگیرم، اینرو میدونم که یه سری از سوالارو فقط میشه تو آزمایشگاه و طی تمرین و کار مداوم جواب داد. با این حال شانسم رو امتحان می کنم و سوالاتم رو مطرح می کنم، و تنها خواهشی که دارم اینست که اگر مایل بودید به هرکدام پاسخ بدید لطفا شماره ای ذکر کنید که من و حتی دیگران که می خواهند از پاسخ های شما بهره ببرند بدانند راهنماییه شما مربوط به کدام سوال است. سپاس فراوان:

                          1) برای شروع کار سعی کردم با بردبورد کار کنم.(میکروکنترلری که استفاده میکنم AVR است) تا الان 2 مرتبه آیسیم داغ کرده که البته زود فهمیدم و تغذیه رو قطع کردم، شاید 4 ثانیه هم طول نکشید. حالا نمیدونم آیا آیسیم بخاطر این داغ شدن (که من احتمال میدم بخاطر اتصال کوتاه شدن تغذیه باشه)آسیب جدی میبینه یا نه ممکنه هنوز سالم باشه. چون هنوز هم گه گداری جواب درستی در فرایند نوشتن و خواندن از رجیسترهای آیسی می گیرم. شک دارم برنامه ای که برای میکروکنترلرم نوشتم مشکل داره(برنامه را در محیط کامپایلر بسکام نوشتم) یا این آیسی است که آسیب دیده. چطور می تونم مطمئن بشم که آیسیم سالمه یا آسیب دیده؟

                          1-1) اگر فرض کنیم که آیسی آسیب دیده باشه آیا آیسی AD7799 گزینه ی بهتری برای اندازه گیری بار در محیط های صنعتی نیست؟ آیا کسی تا بحال از این آیسی استفاده کرده؟ و نتایج قابل قبول دریافت نموده؟
                          توضیح: وقتی دو پایه AN1(+) و AN1(-) رو به هم اتصال کوتاه میکنم پایه ی RDY صفر میشه!

                          2) الان فعلا برام مقدور نیست لودسل بخرم. آیا می شه با شبیه سازی عملی لودسل بوسیله ی یک پل متشکل از مقاومت های درصد پایین که همان 350 اهم رو در ورودی داشته باشه جایگزینی برای لودسل قرار داد؟
                          توضیح: میدونم که ولتاژ آفست ورودی باید نصف ولتاژ مرجع باشه!

                          3) من فعلا منبع تغذیه دقیق و یا آیسی رگولاتور دقیق برای ولتاژ مرجع و تغذیه ندارم ولی یک منبع تغذیه سوئیچینگ که درواقع همان پاور مادربورد است دارم که ولتاژ 5 ولت میده و تا حالا برای همه پروژه هام ازش استفاده کردم و باهاش مشکلی نداشتم. آیا برای کار آزمایشی با ADC میشه از این منبع تغذیه استفاده کرد؟ آیا این منبع خودش ممکنه باعث ایجاد اختلال در کار SPI و ADC بشه؟(با توجه به اینکه یک منبع تغذیه سوئیچینگ است!)

                          4) من در کنار ADC مجبورم از یک Device دیگه هم که بوسیله مقاومت به پایه های MISO و MOSI و CLK و CS وصل میشه استفاده کنم. در واقع این پایه های میکرو با یک مقاومت معادل 5 کیلو اهم زمین میشن. آیا این می تواند برای ارتباط SPI با ADC مشکل ساز باشه؟ اگر بله، به چه راهکاری میشه این دو Device رو از هم ایزوله کرد؟ آیا استفاده از مالتی پلکسر کار معقولی است؟(با توجه به اینکه PCBمدار و فضای مدار اشغال میشه!) یا اینکه راه حل بهتری هم وجود دارد؟

                          5) مشکلاتی که در کار با SPI رخ میده آیا تنها مختص میکروهای AVR و ADC های شرکت analog هست یا اینکه این مسائل برای تمام وسایلی که با SPI کار می کنن پیش میاد و گریز ناپذیرند؟

                          6) در سوال جواب هایی که در سایت edaboard هست کاربران تاکید داشتن که در مسیرهای SPI یک مقاومت 470 اهم قرار دهید و مسیر CLK را بوسیله یک خازن عدسی 100 پیکو زمین کنید. من شماتیکی که دوست عزیز ahmadmn در این تاپیک قرار دادن رو دریافت کردم (با تشکر فراوان از ایشان) که در این شماتیک از مقاومت 470 اهم استفاده نشده و بجای آن پایه ی MISO بوسیله مقاومت 2/2 کیلو به ولتاژ تغذیه متصل شده. و همین طور پایه های RDY و CS . حالا سوالی که از دوست عزیز ahmadmn دارم اینست که آیا شماتیکی که ارسال نمودید خودتان در عمل استفاده کرده اید و اگر بله، از آن راضی هستید و resolution bits قابل قبول، نزدیک به آن مقداری که در دیتاشیت بیان کرده(21 بیت از 24 بیت یا 15 بیت از 16 بیت)، رو بدست میدهد(البته با تشکر مجدد بخاطر ارسال این شماتیک)؟

                          7) نظرتون راجع به استفاده از کریستال خارجی برای میکروکنترلر چیست؟ آیا در کار با ADC مفید است؟

                          8) آیا وقتی پایه ی CS رو یک می کنیم ADC همچنان کار نمونه برداری و انتقال دیتای جدید به رجیستر دیتا را انجام میدهد و در این حالت(CS=1) پایه ی RDY در صورت وجود دیتای جدید صفر خواهد شد؟

                          9) وقتی پایه ی POL را به 5 ولت مرجع متصل میکنیم مقادیر صحیحی که برای بیت های CPOL و CHPA از رجیستر SPCR باید در نظر گرفت چیست؟ یک یا صفر؟ آیا این مقادیر در هنگام نوشتن و خواندن باید تغییر کنند؟

                          10) آیا در مدار شامل ADC ای که باید در محیط های صنعتی و پر نویز کار کند، نیاز هست ADC را قبل از هر بار نوشتن و خواندن ریست کرد و مجدد کالیبره نمود؟

                          11) آیا با توجه به اینکه آیسی AD7730 یک آیسی کند است باید بعد از هر بار دستور نوشتن و خواندن از آن یک delay در نظر گرفت و آنرا غیرفعال(CS=1) کرد؟ یا نیازی به تاخیر نیست؟

                          با تشکر از شما که زمانی را صرف خواندن این سوالات کردید. :biggrin:
                          I Hate Give Up, Just Keep Moving.

                          دیدگاه


                            #14
                            پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                            سلام دایی جان

                            1) متاسفانه در طرح این سوال دقت نکردی و معلوم نیست میکروت داغ کرده یا AD7730؟ به هر حال نباید حالا که مشغول یادگیری هستی با شک کار کنی. توصیه من اینه که از میکرو یا AD7730 نو استفاده کنی. بی گمان ارزش عمر بیشتر قیمت ایندوست. سعی کن از ATmega48 استفاده کنی چون تکنولوژی به روزتری نسبت به بقیه دارد.
                            نکته ی دوم اینست که بردبورد مناسب این مدارات فرکانس بالا نیست. کشیدن PCB و ساخت اون ممکنه سخت و زمانبر باشه اما ارزش داره. برنامه نویسی با بسکام مشکلی نداره اما برای اینکه بتونی با افراد حرفه تر تعامل داشته باشی بهتره از C استفاده کنی. یادگیری این زبان بیشتر از یک ساعت وقت نمی گیره. مخصوصا با کدویژن که کار برنامه نویسی رو بسیار آسون کرده.

                            1-1) بی گمان AD7799 پیشرفته تر و بهتر از AD7730 می باشد اما در بازار ایران پیداش کردید؟ روش اجرای پروژه در ایران معکوس تما کشور هاست. اول باید بروید بازار و قطعه پیدا کنید سپس بیایید طراحی کنید. البته معمولا همان قطعات پیدا شده تا موقع اتمام طراحی شما نایاب می شود و دوباره باید از نو قطعه پیدا کنید و ... oo:
                            انگار باور نمی کنید چندین بار دایی جانتان به این درد مبتلا شد؟

                            2) آفرین. با چهار مقاومت 350 اهم دقیق می تونی یک لودسل رو شبیه سازی کنی. البته ممکنه 350 اهم دقیق پیدا نکنی اما 348 یا 357 اهم در بازار هست که جاش کار می کنه. یه پتانسیومتر یا ولوم 100کیلواهم نوع مولتی ترن با دو مقاومت 22 کیلواهم هم نیازه تا بارگذاری روی لودسل شبیه سازی بشه. مدار زیر:



                            3) اگه نوشته های قبلی رو خونده بودی ذکر کردم که نیازی به ولتاژ مرجع برای خوندن لودسل نیست! متاسفانه آقای رستمی هنوز این اشتباهشونو تصحیح نکردند و خیلی از دوستان گمان می کنند لودسل ها را باید با ولتاژ مرجع تغذیه کرد!
                            اما برای تغذیه مدار باید ولتاژ صاف و بدون نویز داشت. منبع تغذیه سوئیچینگ را نیز می توان با فیلتر های سلف و خازنی صاف کرد که مدار آن را در پست قبلی من می بینید.
                            اگر با دقت به مدار نگاه کنید می بینید تغذیه قسمت دیجیتال که می تواند نویزی باشد توسط فیلتر صاف شده و به قسمت آنالوگ رفته. حتی زمین دیجیتال از زمین آنالوگ جدا شده!

                            4) به تعداد دلخواه Device رو میشه به یک باس SPIآ‌آ‌ متصل کرد! اما انگار این Device بینام شما غیر استاندارده که با 5 کیلو اهم زمین شده!!! البته پایه MOSI و CLK خروجی های میکرو هستند و مشکلی برای درایو کردن Device ها ندارند. میکرو پایه ای بنام CS نداره بلکه این پایه متعلق به Device ها است. هر Device یک پایه CS داره که باید به یه پورت آزاد میکرو وصل بشه و توسط برنامه فعال بشه. مثلا اگه می خوای با AD7730 ارتباط برقرار کنی ابتدا باید پایه CSآ‌ اونو صفر کنی بعد داده بفرستی و بخونی. در این حالت پایه CS باقی Device ها باید غیر فعال باشه.
                            تنها پایه ی مشکل دار MISO است برای تمامی Device ها مشترکه. مطابق نقشه پست قبل برای AD7730 باید این پایه رو با مقاومت 2.2k پول پ کنی. اگه Device های دیگه ی مدار نیاز به پول داون دارند حتما غیر استاندارد هستند و باید عوضشون کنی.

                            5) هیچ مشکلی در کار با SPIآ‌ پیش نمیاد!!!!!!!!!!!

                            6) منم از همین شمادتیک استفاده می کنم. به حرف های این و اون در edaboard هم گوش نکنید. مگر اینکه علت آن را گفته باشند و شما درکش کنید. مقاومت 2.2 کیلواهم برای اینه که خروجی آی سی AD7730 تنها یک ماسفت داره و در واقع Open Drainآ‌ است. اگر این مقاومت را نگذارید این خروجی قادر به یک شدن نیست و تنها می تواند صفر شود. پس مدار شما کار نمی کند. البته می توانید پول پ داخلی میکرو را در پایه MISO فعال کنید اما این مقاومت بسیار بزرگ است نمی تواند پول پ مناسبی برای سرعت های بالا باشد. در سرعت های بالا مقاومت های بزرگ با خازن ترانزیستور ها یک RCآ‌ تشکیل می دهند و باعث کاهش شیب لبه ی پالسها می گردند. اگر می خواهید از SPIآ‌ با سرعت پایین استفاده کنید همین پول پ داخلی میکرو کافیست و می توایند مقاومت 2.2 کیلو را حذف کنید.

                            راجع به دقت بارها نوشتم اما باز می نویسم. دقت یک مدار تابع متغیر های بسیاریست. تنها دقت دار بودن ADC کافی نیست. کسی به سادگی نمی تواند از این آی سی بالای 15 بیت دقت بگیرد. تازه اگر مدارش را داخل جعبه فلزی بگذارد، تغذیه سوئیچینگ استفاده نکند، سایز مدار را تا حد امکان کاهش دهد، کابل ها همگی شیلد باشند. بین میکرو و AD7730 فاصله ی مجاز بگذارد و ....
                            اگر همه ی اینها را رعایت کنید 15 بیت دقت خواهید داشت! دقت های بالاتر نیاز به اطلاعات بسیار تخصصی از نویز است و از مجال این بحث خارج!

                            7) تاثیری در کار ADC ندارد.

                            8) سوال خوبیست. پایه CS تنها ارتباط بین AD7730 میکرو را مقدور می سازد و باقی کارها ربطی به این پایه ندارد. پایه RDY هم مستقل از CS است.

                            9) رجیستر SPCR فقط باید یکبار تنظیم شود. پایه POL در AD7730 باید یا به صفر و یا به یک وصل شود و دیگر تغییر نکند. صفر و یک بودن آن هم بستگی به Device های دیگر متصل به پورت SPI دارد. در واقع تمام Device های باید لبه های پالس یکسان داشته باشند. برای مقدار دهی به برنامه ای که گذاشتم رجوع کنید.

                            10) مگر در محیطهای صنعتی مدار ما در هواست که نویز وارد آن شود؟!!! اولا مدار را در یک باکس فلزی بگذارید. دوما باکس را در یک تابلوی استاندارد برق که اتصال زمین دارد نصب کنید. شیلد کابل لودسل را نیز به زمین کانکتور متصل کنید. کانکتور شما باید استاندارد باشد( مثلا فیلیپسی 5 پین) دیگر نگران نویز نباشید.

                            11) هیچ نیازی به تاخیر نیست. هر وقت RDY صفر شد مقدار بخوانید.
                            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                            دیدگاه


                              #15
                              AD7730 راه اندازی/ برنامه ریزی/ نویز گیری implementation

                              با سلام.
                              با تشکر فراوان از دوست عزیز ahmadmn به خاطر اینهمه راهنمایی و آفرین به این همه دانش. :applause: اصلا انتظار نداشتم جواب همه ی سوالامو بگیرم و این خیلی تو پیشرفت کار بهم کمک میکنه و اطلاعات من را افزایش می ده.
                              - در سوالاتم نوشتم آیسیم داغ کرده: منظورم ADC بود.
                              - یک سوال دارم. آیا هیچوقت ممکنه ADC بخاطره یک برنامه اشتباه که در میکرو ریخته می شه آسیب ببینه؟ (میدونید AD7730 الان 15هزار تومانه و این یکم زیاده)
                              - شما درست میگید! اکثر برنامه نویسان ماهر با زبان برنامه نویسی c کار میکنند ولی من در کنار ADC وسایل دیگری هم راه اندازی کردم که اونها رو هم با بسکام کار کردم، البته خیلی دوست دارم به c هم مسلط بشم و برنامه هام رو به زبان c برگردونم ولی الان وقت زیادی ندارم(کنکور فوق لیسانس داره تمام وقتمو میگیره). چون من پروژه هام رو با بسکام انجام میدم، برنامه ای که دوست عزیز ahmadmn گذاشتن رو برا بسکام تغییر دادم ولی فکر کنم برنامه ی تبدیل شده یه ایراداتی داشته باشه چون پین RDY هیچ وقت صفر نمیشه(البته به جای لودسل با استفاده از مقاومت های دقیق پل مقاومتی گذاشتم! ADC ایم هم دوسه بار تا حالا به دلایل نامشخص داغ کرده ممکنه ایراد کار اونجا باشه.). ممنون میشم یاری کنید: :biggrin:

                              با تشکر .

                              دیدگاه

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