Hurda ilə hazırlanan CNC Feed dərəcəsi Ölçmə Aləti: 5 addım
Hurda ilə hazırlanan CNC Feed dərəcəsi Ölçmə Aləti: 5 addım
Anonim
Hurda ilə hazırlanan CNC Feed dərəcəsi Ölçmə Aləti
Hurda ilə hazırlanan CNC Feed dərəcəsi Ölçmə Aləti

Heç kim CNC maşınında faktiki yem sürətini ölçmək istəyibmi? Yəqin ki, bir CNC işindən sonra frezeləmə bitməyincə… amma müntəzəm olaraq qırılmağa başladıqda, bəlkə də araşdırmaq vaxtıdır. Bu təlimatda, bir CNC maşınının faktiki qidalanma sürətini təyin etmək üçün bir işi izləyə bilərsiniz. Yazıcının tərs mühəndislik hissəsini, arduino firmware proqramını, PC proqramını və həmkarlarımın köməyi ilə əldə etdiyim nəticələri və bir xəzinə halına gətirilmiş zibili əhatə edəcək.

Addım 1: Layihənin işə salınması üçün istifadə olunan materiallar, alətlər, cihazlar

Bu işə başlayanda ehtiyacımız olan şeylərin qısa bir siyahısını düşündüm:

  • sökülmüş printer daşıma mexanizmi
  • Bunu düzəltmək üçün əl alətləri
  • lehimləmə dəmiri, lehim, tellər
  • multimetr
  • osiloskop və ya məntiq analizatoru - bu tamamilə lazım deyil
  • enerji təchizatı
  • mikroskop
  • Arduino nano + pinout
  • Arduino IDE, Visual Studio 2008 Express + MS Qrafik alətləri quraşdırılmış kompüter
  • (MPU6050 - bundan istifadə etmədim)
  • necə edəcəyinizi bilmədiyiniz hər şeyi axtarmağa hazırsınız

Başlanğıcda, bir MPU6050 lövhəsinin hər üç oxda bir anda yemək sürətini ölçməyimə imkan verəcəyini düşündüm. İçərisində akselerometr olduğu üçün əmin idim ki, akselerometr məlumatlarını ümumiləşdirmək mənə istənilən dəyəri - hər oxdakı sürəti verəcək. Serial monitorda xam məlumatları göstərən bir Arduino parçasını yüklədikdən və dəyişdirdikdən sonra Visual Studio -da məlumatları işləyən kiçik bir PC proqramı yazdım və daha asan təfsir etmək üçün onu cədvələ qoydum. Həm Visual Studio C# Express 2008, həm də bunun üçün qrafik alətlərini yükləməli oldum.

Bir müddət kodlaşdırdıqdan və ardıcıl ünsiyyət üçün lazım olan hər şeyi axtardıqdan sonra, qurduğum dəyərlərlə sona çatdım, amma nə etsəm də, istifadə edilə bilməzdi. Kiçik, lakin qəfil hərəkətlər böyük sıçrayışlarla nəticələnəcək, daha uzun səyahətlər isə xəritələrdə görünməyəcək. MPU6050 -ni iki gün çəkdikdən sonra nəhayət təslim oldum və başqa bir şeyə - sökülmüş printerin mövqe bildirmə mexanizminə üz tutdum.

Addım 2: Görülməli olan Avadanlıqlar

Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar
Edilməli olan Avadanlıqlar

Tərs Mühəndislik

Əlbəttə ki, printer mexanizminin dəqiq xüsusiyyətlərini təyin etmək üçün istifadə edə biləcəyim bir parça nömrəsi yox idi, istədiyimiz yerə çatmaq üçün bir az tərs mühəndisliyə ehtiyac var idi. Mexanizmi və elektronikanı yaxından araşdırdıqdan sonra qərara gəldim ki, ilk şey optik sensor sancaqlarının identifikasiyası olmalıdır. Hər şeyi Arduino ilə əlaqələndirmək üçün bunu etmək lazım idi. Qara plastik hissəni sökdüm, PCB çıxartdım və sensoru araşdırdım: üzərində ROHM RPI-2150 yazılmışdı. Bu məni xoşbəxt etdi, bir məlumat cədvəli tapacağım ümidi yüksək idi. Təəssüf ki, bu ya köhnə, ya da xüsusi bir hissədir - İnternetdə heç bir yerdə tapıla biləcək məlumat cədvəli yox idi. Məsələləri öz əlimə götürməliydim: bu sensorların ümumiyyətlə infraqırmızı LED və içərisində iki foto-tranzistor olduğunu bildiyim üçün bir multimetr tutdum, diodun ölçmə rejiminə qoydum və sancaqlar arasında ölçməyə başladım.

Güc pinlərini ümumiyyətlə tapmaq asandır - onların arasında kondansatörlər olacaq və ümumiyyətlə PCB -lərdəki geniş izlərlə əlaqələndirilir. Yer izləri daha yaxşı səs -küy rədd edilməsi üçün çox vaxt bir neçə yastığa bağlanır.

Giriş və çıxış pinləri o qədər də əhəmiyyətsiz deyil. Bir diod boyunca ölçərkən, sayğac bir istiqamətdə irəli gərginliyini, digərində isə həddindən artıq yükü (sonsuz) göstərəcəkdir. Sancaqlar arasındakı dörd diodu təyin edə bildim, dördüncü diodun komponentin güc pinləri arasında olduğu kimi bir növ zener və ya TVS diod olması lazım olduğu qənaətinə gəldim. İnfraqırmızı yayıcının yerini tapmaq asandır, onunla birlikdə 89R rezistor var idi. Qalan iki sancaqda iki diod ölçümü ilə qaldım, bunlar iki alıcı olmalı idi.

Qeyd: Bu sensorlar, impulsları sayaraq mövqeyi təyin etməklə yanaşı hərəkət istiqamətini təyin edə bilmək üçün iki qəbulediciyə malikdir. Bu iki çıxış dalğa forması fazadan 90 ° uzaqdır, bu sayma və ya geri sayma nəbzi istehsal etmək üçün istifadə olunur. Bu paxlalıların sayını izləyərək, çap başının dəqiq mövqeyi təyin edilə bilər.

Emitent və iki alıcı yerləşdikdə, telləri pinlərinə lehimlədim, buna görə də sensoru Arduino ilə birləşdirə bilərəm. Bunu etməzdən əvvəl, sensoru 3.3V ilə təchiz etdim, sensor arasındakı zolağı bir neçə dəfə çəkdim və çıxışlarda kvadrat dalğasını müşahidə etdim. Kvadrat dalğanın tezliyi hərəkət sürətindən asılı olaraq dəyişdi və nəticəyə gəldim ki, ölçü sistemi artıq Arduinoya qoşulmağa hazırdır.

Arduino ilə əlaqə

Bu yeni 'sensoru' bağlamaq çox asandır. Sensor çıxışlarını D2 və D3-ə (kəsmə qabiliyyətli sancaqlar!) Bağlayın və enerji təchizatı xətləri və kodlaşdırma başlaya bilər.

Addım 3: Arduino Kodlaşdırma

Arduino Kodlaşdırma
Arduino Kodlaşdırma

Arduino kodu olduqca sadədir. Hər dəfə D2 yüksələn bir kənar görəndə yerinə yetirən bir funksiya təyin etdim, bu əlavə etdiyim Arduino kodundan keçən funksiyadır. Kvadrat enkoderin siqnallarına nəzər salsanız, bunu görəcəksiniz:

  • bir istiqamətdə A fazası hər faza yüksələn kənarda məntiq yüksəkdir
  • digər istiqamətdə A mərhələsi hər faza yüksələn kənarda məntiq aşağıdır

Bu, istifadə etdiyim kodlayıcının mülkü idi: keçən funksiya hər dəfə D2 -nin yüksələn kənarına malik olduğu üçün yerinə yetirir, D3 yüksək olduqda sayğacı artırırsa və D3 aşağı olduqda azaldırsa, sadəcə yazdım. Bu ilk cəhddə işə yaradı, sayğacın dəyərini seriyalı monitora göndərdim və printerin başını şaftın üzərinə köçürdüyümdə artdığını/azaldığını izlədim.

Uzun sözün qısası, firmware loop funksiyasında aşağıdakıları edir:

  1. hər hansı bir daxil olan məlumat üçün serial alma tamponunu yoxlayır
  2. daxil olan məlumatlar varsa '1' olub olmadığını yoxlayın
  3. '1' olarsa, bu, PC proqramının sayğac dəyərini istədiyi deməkdir
  4. sayğacın dəyərini serial vasitəsilə PC -yə göndərin
  5. 1 -də yenidən başlayın.

Bununla, top hazırda PC proqramının məhkəməsindədir. Gəlin buna girək!

Addım 4: Visual Studio C# Proqramı

VS C# proqramının məqsədi hesablama yükünü Arduinodan PC -yə keçirmək idi. Bu proqram, Arduinonun təmin etdiyi məlumatları alır, hesablayır və sürəti qrafik şəklində göstərir.

İlk etdiyim şey Google -da C#-də serial ünsiyyətinin necə qurulması idi. Yaxşı bir nümunə ilə birlikdə MSDN.com saytında bir çox yaxşı məlumat tapdım, sonra ehtiyac duymadıqlarımı atdım - əsasən oxu hissəsindən başqa hər şeyi. COM portunu və sürəti Arduino ilə uyğunlaşmaq üçün qurdum, sonra bir neçə cəhd etdim və serial portuna gələn hər şeyi çox sətirli bir mətn qutusuna atdım.

Dəyərlər oxunduqdan sonra bir ölçümü bir -birindən və ayırıcı simvollardan ayırmaq üçün readto & split funksiyalarından istifadə edə bilərdim. Bunlar bir Qrafik nəzarətində quruldu və dəyərlər ekranda görünməyə başladı.

VS alət qutunuzda Qrafik nəzarətini görə bilmirsinizsə, problemi google -da tapa bilərsiniz və həllini burada tapa bilərsiniz (1 nömrəli cavabı axtarın): keçid

Ölçmə prinsipi

Sayma sayı ilə başın getdiyi məsafə arasındakı əlaqəni tapmaq üçün sayma dəyərini sıfırladıq, printer başını 100 mm əllə hərəkət etdirdik və sayların dəyişməsini müşahidə etdik. Nəhayət aşağıdakı nisbətlə gəldik: 1 say = 0.17094mm.

Məsafəni soruşa bildiyimiz və nümunələr arasındakı vaxtı ölçə bildiyimiz üçün, mövqe dəyişikliyinin baş vermə sürətini hesablaya bilərik - sürəti də hesablaya bilərik!

TMR0 sayəsində kobud bir proqram vaxtı 50ms var, ancaq bu zamanlamaların çox dəqiq olmadığını müşahidə etdik. Əslində, bəzi proqram sürət ölçmələrindən sonra, zamanla 50ms -in heç də 50ms olmadığını gördük. Bu, nümunələrin müəyyən bir müddətdə alınmadığı anlamına gəlirdi, buna görə də sürət hesablanması da sabit bir zaman bazasından istifadə edə bilməzdi. Bu problemi tapdıqdan sonra hərəkət etmək asan oldu: məsafə və zaman fərqini götürdük və sürəti D_distance/D_time (D-məsafə/50ms əvəzinə) olaraq hesabladıq.

Ayrıca, tənliyimizin sürəti mm/50ms vahidləri ilə qaytaracağı üçün, başın bir dəqiqədə [mm/dəq] ilə gedəcəyi məsafəni əldə etmək üçün bunu 1200 -ə vurmalıyıq.

Qeyd: Mach 3 CNC freze nəzarət proqramı [mm/dəq.]

Filtrləmə

Bu andan etibarən ölçülər olduqca dəqiq görünürdü, amma ölçülmüş siqnalda bir az səs -küy var idi. Bunun şaftdakı mexaniki uyğunsuzluqlardan, şaft birləşməsindən və s. Olduğuna görə şübhələndik, buna görə ölçülənlərin gözəl bir orta dəyərini əldə etmək üçün süzgəcdən keçirməyə qərar verdik.

Proqram təminatında incə düzəlişlər

Nümunə nisbətini və işləmə müddətində süzgəc sürətini dəyişdirmək üçün hər birinə bir ədəd sürüşmə çubuğu əlavə edildi. Ayrıca, sahələri gizlətmə qabiliyyəti də tətbiq edildi.

Addım 5: Nəticələr

Nəticələr
Nəticələr
Nəticələr
Nəticələr
Nəticələr
Nəticələr
Nəticələr
Nəticələr

Avadanlıq və proqram hissələri hazır olduqdan sonra, mach 3 + proqramımla üç ölçmə dəsti işlədik, nəticəni əlavə şəkillərdə görə bilərsiniz. Sonrakı təcrübələr həm filtr, həm də nümunə nisbətlərinin artması ilə daha yaxşı dəqiqlik göstərdi. Süjetlər ölçülmüş sürəti bərk qırmızı ilə, orta isə tire nöqtəli mavi ilə göstərir.

Deyilənə görə, Mach 3 bu sürət parametrlərini olduqca dəqiq idarə edir, amma indi dəqiq bilirik:)

Ümid edirəm ki, tərs mühəndislik və suyu şəraba çevirmək haqqında bu qısa təlimatdan zövq aldınız!

Sağol!

Tövsiyə: