Სარჩევი:

გააკეთეთ ნებისმიერი სენსორი FPGA– დან: 4 ნაბიჯი
გააკეთეთ ნებისმიერი სენსორი FPGA– დან: 4 ნაბიჯი

ვიდეო: გააკეთეთ ნებისმიერი სენსორი FPGA– დან: 4 ნაბიჯი

ვიდეო: გააკეთეთ ნებისმიერი სენსორი FPGA– დან: 4 ნაბიჯი
ვიდეო: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, ივლისი
Anonim
Image
Image
FPGA
FPGA

უმეტესმა შემქმნელებმა ცხოვრებაში ერთხელ მაინც სცადეს თერმომეტრის აგება, შესაძლოა ის, რაც მათ სახლში აქვთ, არ არის საკმარისად ჭკვიანი, ან იქნებ ფიქრობენ, რომ მათ შეუძლიათ შექმნან შემდეგი NEST. მიუხედავად ამისა, რაღაც მომენტში მათ ჰქონდათ მიკროკონტროლერი თავიანთი უახლესი პროგრამული უზრუნველყოფით ტემპერატურის სენსორთან (და შესაძლოა სხვა სენსორებთან: წნევა, შუქი). აქამდე ყველაფერი სრულყოფილია, პროგრამული უზრუნველყოფა მუშაობს და სენსორი იგრძნობს. მოდით შევამოწმოთ!

ჰმმმ … იქნებ მან უნდა გაათბოს სენსორი ფენით და გააციოს ყინულის გამოყენებით, ის მუშაობს გარკვეული დროის განმავლობაში. მაგრამ ეს არ ჩანს პროფესიონალურად, სენსორი ძალიან სწრაფად ცვლის მნიშვნელობებს, თუ გაათბობთ, ის არ ათბობს რამდენიმე გრადუსზე მეტს. პროექტი არის ბიუსტი! მაგრამ ალგორითმი ახალია, ითვალისწინებს უამრავ ფაქტორს, რა სირცხვილია, რომ ის ამ სულელურად უმნიშვნელო ნივთზე გაჩერდა.

ჩემი გამოსავალი არის ეს: გააკეთეთ FPGA იმოქმედოს როგორც სენსორი კომპიუტერისგან გადმოცემული მნიშვნელობებით (ან ინახება მეხსიერებაში, ან შეიქმნა დროებით FPGA– ს შიგნით). ასე რომ, თქვენი ძვირფასი MCU– სთვის FPGA ჰგავს სენსორს, მაგრამ არა რომელიმე სენსორს: რომელი სენსორი მოგწონთ. შესაძლოა თქვენ გადაწყვიტეთ, რომ გჭირდებათ მეტი რეზოლუცია ან უფრო სწრაფი რეაგირების დრო, ვიდრე მოსალოდნელი იყო, თქვენ უნდა შეცვალოთ სენსორი. შეუკვეთეთ ონლაინ, ის ჩამოვა რამდენიმე დღეში, რამდენიმე თვეში, ვინ იცის. დააფიქსირეთ თქვენი PCB ან შეუკვეთეთ მოდული ახალი სენსორით. ან… რამდენიმე დაწკაპუნებით და FPGA არის კონფიგურირებული როგორც თქვენი ახალი სენსორი და მას შეუძლია მიბაძოს ზუსტ შიდა კონფიგურაციას.

ამის დაწერის მომენტში, FPGA- ს შეეძლო მოქმედებდეს როგორც LM75, ტემპერატურის მონაცემებით BRAM- ში (FPGA- ზე).

ნაბიჯი 1: MCU

ჩემი არჩევანის MCU არის LPC4337 LPCXpresso– ზე. მის თავზე მაქვს ფარი (LPC General Purpose Shield) დისპლეით და ნამდვილი LM75 სენსორით. LPC4337 არის ARM Cortex M4, რომელიც მუშაობს 200 MHz და უფრო მცირე Cortex M0 (აქ არ გამოიყენება). რეალური სენსორი დაკავშირებულია I2C1 პერიფერიულ მოწყობილობასთან და ჩვენი ვირტუალური იქნება I2C0- თან. წყარო ხელმისაწვდომია ჩემს GitHub– ზე.

როგორ ავაშენოთ იგი? ჩამოტვირთეთ LPCXpresso IDE LPCOpen ბიბლიოთეკასთან ერთად. შემოიტანეთ ბიბლიოთეკა IDE– ში და ასევე გახსენით პროექტი GitHub– დან. ყველაფერი უნდა იყოს კონფიგურირებული და თქვენ შეგიძლიათ დააწკაპუნოთ "გამართვაზე" ქვედა მარცხენა კუთხეში.

მთელი პროექტი ემყარება NXP– ის ერთ – ერთ მაგალითს (იმის საჩვენებლად, რომ ჩემი პროექტი ახდენს რეალური სენსორის სიმულაციას და არ საჭიროებს სპეციალურ კოდს MCU– ს მხარეს). მთავარ ფაილში (ე.წ. iox_sensor.cpp) დევს ეს კოდი:

#განსაზღვრეთ SENSORS_ON_SHIELD

#if განსაზღვრული (SENSORS_ON_SHIELD) #განსაზღვრეთ SHIELD_I2C I2C1 #elif განსაზღვრული (SENSORS_ON_FPGA) #განსაზღვრეთ SHIELD_I2C I2C0 #endif

SENSOR_ON_SHIELD და SENSOR_OR_FPGA შეცვლით მომხმარებელს შეუძლია შეცვალოს შედგენის დროს რომელ სენსორზე ისაუბროს, ნამდვილზე თუ ვირტუალურზე, რადგან ისინი სხვადასხვა I2C ქინძისთავზეა.

ნაბიჯი 2: FPGA

ჩემი არჩეული FPGA დაფა არის Digilent– ის მიერ დამზადებული Artix 7, რომელსაც აქვს Xilinx Arty 7. ორი PMod კონექტორი გამოიყენება, ერთი გამართვისა და ერთი რეალური დატვირთვისთვის, კავშირი MCU დაფასთან.

ისევ და ისევ, FPGA– ს საწყისი კოდი ხელმისაწვდომია ჩემს GitHub– ში (fpgaSide საქაღალდე).

როგორ ავაშენოთ იგი? ჩამოტვირთეთ, იყიდეთ ან გახსენით Xilinx Vivado IDE. პროექტის ფაილების იმპორტი GitHub– დან. ერთ -ერთი ფაილი (content.coe) არის ტემპერატურის მონაცემები ნედლი ფორმატით, რომელიც გადაიცემა ყალბი სენსორზე. ასევე არსებობს Excel ფაილი ამავე სახელწოდებით, რომელიც ეხმარება ადამიანის წაკითხული ტემპერატურის მონაცემების ნედლეულ LM75 მონაცემად გადაყვანას. მე ვგეგმავ შეცვალოს ეს ავტომატიზირებულ პროცესად პროგრამული უზრუნველყოფის პროგრამული უზრუნველყოფით, რომელიც დაწერილია ჯავაში, მაგრამ მანამდე ეს გამოსავალი მუშაობს. სინთეზს და განხორციელებას გარკვეული დრო სჭირდება, ამის გათვალისწინება.

ნაბიჯი 3: როგორ მუშაობს?

Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?

როგორც ვთქვი, MCU– სთვის, FPGA ჰგავს სენსორს, უფრო ზუსტად I2C სენსორს. I2C პერიფერიული გამომავალი უკავშირდება FPGA- ს შეყვანას. FPGA– ს შიგნით არის 3 ძირითადი კომპონენტი:- I2C კონტროლერი- I2C მოწყობილობა- მონაცემები I2C კონტროლერი იღებს I2C მონაცემებს FPGA– ს ქინძისთავებიდან და აგზავნის მათ დანარჩენ FPGA– ში და იგივეს აკეთებს საპირისპირო მიზნით. იგი ინარჩუნებს შიდა სახელმწიფო მანქანას I2C პროტოკოლისთვის (სხვათა შორის, აქ არის დოკუმენტაცია ამისთვის). რას უგზავნის ეს კომპონენტი I2C მოწყობილობას? ამჟამად მიღებული ბაიტი, ამ ბაიტის პოზიცია მიმდინარე კომუნიკაციაში და წერს თუ არა MCU წერილი FPGA– სგან ან კითხულობს მას. I2C მოწყობილობა იღებს გაგზავნილ ბაიტებს და განაახლებს სენსორის იმიტირებულ შიდა სტრუქტურას. მას შეუძლია უბრალოდ განაახლოს რეგისტრის მაჩვენებელი ან მოითხოვოს ახალი მონაცემები მონაცემთა წყაროდან. მონაცემთა კომპონენტი ავრცელებს მონაცემთა ახალ წერტილებს. ამჟამად ეს მხოლოდ ROM მეხსიერებაა, რომლის მისამართი იზრდება (დაახლოებით) ორჯერ წამში.

რა არის ჩემი საბოლოო მიზანი? ნაჩვენებია მეორე სურათზე. ეს არის: შესაძლებელი გახადოს მეტი I2C მოწყობილობა (სენსორები და სხვა) იყოს სიმულაციური ერთდროულად FPGA- ს შიგნით. სენსორის უკანა ნაწილში მონაცემები უნდა იყოს შენახული FPGA– ში და გადაედინება კომპიუტერიდან USB– ით ან Ethernet– ით. მხარი დაუჭირეთ უფრო მოწინავე სენსორებს და სხვა I2C მოწყობილობებს (მეხსიერება, LED დრაივერები და ა.

ნაბიჯი 4: ყველაფერი ერთად ააწყვეთ

აყენებს ყველაფერს ერთად
აყენებს ყველაფერს ერთად
აყენებს ყველაფერს ერთად
აყენებს ყველაფერს ერთად

ახლა დროა ყველაფერი ერთმანეთთან დააკავშიროთ. თეორიულად, ეს მარტივია: mcu დაფას აქვს PMod კონექტორი (I2C0 & SSP0 (შეუძლია იმუშაოს როგორც SPI)). Artix დაფაზე არის 4 PMod კონექტორი, რომელიც შეიძლება გამოყენებულ იქნას როგორც გსურთ. მე ვირჩევ D კონექტორს MCU– ს გასაუბრებაზე და B კონექტორს ჩემს ლოგიკურ ანალიზატორთან დასაკავშირებლად.

გაფრთხილება

თქვენ არ შეგიძლიათ დააკავშიროთ ორი დაფა ერთმანეთთან ზუსტად ისე. რატომ? PMod შეიქმნა იმისთვის, რომ განმუხტოს სამაგისტრო/მასპინძელი დაფის კავშირი (რომელიც აძლევს ძალას) მონა/სენსორულ დაფას (რომელიც იღებს ენერგიას). მაგრამ ამ პროექტში ორივე დაფა იძლევა ძალას და თუ თქვენ დაუკავშირდებით 3.3 ვ გამომავალს ერთი დაფიდან სხვა დაფის 3.3 ვ გამომავალზე, ცუდი რამ შეიძლება მოხდეს. მაგრამ ისინი შეიძლება არა და თქვენ უბრალოდ შეცვალოთ FPGA დენის რელსების პარამეტრები (ისინი ძალიან ფრთხილად არის შემუშავებული). ასე რომ, ნუ გარისკავთ და გადაიტანეთ კონექტორი ერთი პინი მარცხნივ (და ასევე გადაატრიალეთ FPGA დაფა), როგორც ჩანს ზემოთ სურათებში. აქ არის PMod სპეციფიკაცია, თქვენ შეგიძლიათ შეისწავლოთ იგი, რაც მე მოკლედ გავაკეთე არის ის, რომ არ დავკავშირო ორი დაფის VCC.

გირჩევთ: