Мазмуну:

FPGAдан каалаган сенсор жасаңыз: 4 кадам
FPGAдан каалаган сенсор жасаңыз: 4 кадам

Video: FPGAдан каалаган сенсор жасаңыз: 4 кадам

Video: FPGAдан каалаган сенсор жасаңыз: 4 кадам
Video: ПЛИС | Чем FPGA лучше МК 2024, Июль
Anonim
Image
Image
FPGA
FPGA

Көпчүлүк жаратуучулар өмүрүндө жок дегенде бир жолу термометр курууга аракет кылышкан, балким, үйүндө болгон акылдуу эмес, же кийинки УЯны кура алабыз деп ойлошот. Ошентсе да, кайсы бир убакта аларда заманбап программалык камсыздоосу бар температура сенсоруна (жана, балким, башка сенсорлор: басым, жарык) туташтырылган микроконтроллер болгон. Азырынча баары идеалдуу, программалык камсыздоо иштеп жатат жана сенсор сезип жатат. Кел, аны сынап көрөлү!

Мммм … балким сенсорду чач кургаткычтын жардамы менен ысытып, муздун жардамы менен муздатуу керек, ал бир аз убакытка иштейт. Бирок бул профессионалдуу эмес окшойт, сенсор сенсорлорду өтө тез алмаштырат, эгер сиз аны ысытсаңыз, ал бир нече градустан ашык ысытпайт. Долбоор - бул бюст! Бирок алгоритм жаңы, көптөгөн факторлорду эске алат, бул акылсыз кичинекей нерсеге тыгылып калганы кандай уят.

Менин чечимим мындай: FPGAны компьютерден алынган баалуулуктары бар сенсор катары жасаңыз (же эс тутумда сакталган, же FPGA ичинде атайын түзүлгөн). Ошентип, сиздин кымбат баалуу MCU үчүн FPGA сенсорго окшош, бирок сенсорго окшобойт: кайсы сенсор жагат. Балким, сиз күтүлгөндөн көбүрөөк чечим же тезирээк жооп берүү убактысы керек деп чечесиз, сенсорду алмаштырышыңыз керек. Интернет аркылуу заказ кылыңыз, ал бир нече күндүн ичинде, бир нече айдан кийин келет, ким билет. ПКБңызга жооп бериңиз же жаңы сенсор менен модулга заказ кылыңыз. Же… бир нече чыкылдатуу жана FPGA сиздин жаңы сенсор катары конфигурацияланган жана ал так ички конфигурацияны туурай алат.

Муну жазуу учурунда, FPGA BRAMда (FPGAда) сакталган температура маалыматы менен LM75 катары иштей алат.

1 -кадам: MCU

Менин MCU тандоо - бул LPCXpresso боюнча LPC4337. Анын үстүндө менде дисплейи жана чыныгы LM75 сенсору бар калкан (LPC General Purpose Shield) бар. LPC4337 - бул 200 МГцте иштеген ARM Cortex M4 жана кичирээк Cortex M0 (бул жерде колдонулбайт). Чыныгы сенсор I2C1 перифериялык тутумуна туташкан жана биздин виртуалдык I2C0 менен туташат. Булак менин GitHubымда жеткиликтүү.

Аны кантип куруу керек? LPCXpresso IDEди LPCOpen китепканасы менен бирге жүктөп алыңыз. Бул китепкананы IDEге импорттоп, GitHubдан долбоорду ачыңыз. Баары конфигурацияланган болушу керек жана сиз төмөнкү сол бурчтагы "Мүчүлүштүктөрдү оңдоо" баскычын басыңыз.

Бүт проект NXP мисалдарынын бирине негизделген (менин долбоорум чыныгы сенсорго окшош экенин жана MCU тарабында атайын коддун кереги жок экенин көрсөтүү үчүн). Негизги файлда (iox_sensor.cpp деп аталат) бул код жатат:

#SENSORS_ON_SHIELD дегенди аныктаңыз

#аныкталган болсо (SENSORS_ON_SHIELD) #SHIELD_I2C I2C1ди аныктоо #elif аныкталган (SENSORS_ON_FPGA) #аныктоо SHIELD_I2C I2C0 #endif

SENSOR_ON_SHIELD жана SENSOR_OR_FPGAны өзгөртүү менен колдонуучу компиляция убагында кайсы сенсорго, реалдууго же виртуалдыкка сүйлөй алат, анткени алар башка I2C казыктарында.

2 -кадам: FPGA

Менин тандоо FPGA тактайым Xilinx Arty 7ге ээ Digilent тарабынан жасалган Artix 7 болуп саналат. PMod туташтыргычтарынын экөө колдонулат, бири мүчүлүштүктөрдү оңдоо үчүн, бири реалдуу жүктөө үчүн, MCU тактасы менен байланыш.

Дагы, FPGA үчүн баштапкы код GitHub (fpgaSide папкасында) жеткиликтүү.

Аны кантип куруу керек? Xilinx Vivado IDEди жүктөп алыңыз, сатып алыңыз же ачыңыз. GitHubдан проект файлдарын импорттоо. Файлдардын бири (content.coe) - бул жасалма сенсорго жөнөтүлө турган чийки форматтагы температура маалыматы. Адам окуй турган температура маалыматтарын чийки LM75 маалыматына айландырууга жардам берген ошол эле аталыштагы Excel файлы да бар. Мен муну Javaда жазылган программалык камсыздоонун автоматташтырылган процессине өзгөртүүнү пландап жатам, бирок ага чейин бул чечим иштейт. Синтез жана ишке ашыруу бир аз убакытты алышы керек, муну эске алыңыз.

3 -кадам: Бул кантип иштейт?

Бул кантип иштейт?
Бул кантип иштейт?
Бул кантип иштейт?
Бул кантип иштейт?

Мен айткандай, MCU үчүн FPGA сенсорго окшойт, тагыраагы I2C сенсору. I2C перифериялык түзүлүшүнүн чыгышы FPGAнын киришине туташкан. FPGAнын ичинде 3 негизги компонент бар:- I2C Controller- I2C Device- Data I2C Controller, FPGA пиндеринен I2C маалыматтарын алат жана аларды FPGAнын калган бөлүгүнө жөнөтөт жана тескери тартипте ушундай кылат. Бул I2C протоколунун ички мамлекеттик машинасын кармайт (айтмакчы, бул үчүн документтер). Бул компонент I2C түзмөгүнө эмне жөнөтөт? Учурда алынган байт, учурдагы байланышта бул байттын орду жана MCU FPGAга жазып жатабы же окуп жатабы. I2C түзмөгү жөнөтүлгөн байтты алат жана сенсордун жасалма ички түзүлүшүн жаңыртат. Бул жөн эле реестр көрсөткүчүн жаңыртышы же маалымат булагынан жаңы маалыматтарды сурашы мүмкүн. Маалымат компоненти жаңы маалымат чекиттерин агылтат. Учурда бул жөн эле ROM эстутуму, анын дареги секундасына эки жолу көбөйтүлөт (болжол менен).

Менин акыркы максатым эмне? Ал экинчи сүрөттө көрсөтүлгөн. Башкача айтканда: I2C түзмөктөрүнүн (сенсорлордун жана башка) бир эле учурда FPGA ичинде окшоштурулушуна мүмкүнчүлүк түзүңүз. Сенсордун артындагы маалыматтар FPGAда кэштелет жана компьютерден USB же Ethernet аркылуу агылат. Өнүккөн сенсорлорду жана башка I2C түзмөктөрүн колдоо (эс тутум, LED драйверлери ж. Б.).

4 -кадам: Бардыгын бириктирүү

Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу

Азыр бардыгын биригүүгө убакыт келди. Теориялык жактан алганда, бул жөнөкөй: mcu тактасында PMod туташтыргычы бар (I2C0 & SSP0 (SPI сыяктуу иштей алат)). Artix тактасында 4 PMod туташтыргычы бар, аны сиз каалагандай колдонсо болот. Мен MCU менен сүйлөшүү үчүн D туташтыргычын жана логикалык анализаторума туташуу үчүн В коннекторун тандап алам.

Эскертүү

Эки тактайды минтип бириктире албайсыз. Неге? PMod Мастер/Хост тактасынын (бийликти берет) Кул/Сенсордук тактасына (бийликти алган) байланышын жеңилдетүү үчүн курулган. Бирок бул долбоордо эки такта тең күч берет, эгер сиз 3.3V чыгарууну бир тактанын 3.3V башка тактасына 3.3V туташтырсаңыз, жаман нерселер болушу мүмкүн. Бирок алар мүмкүн эмес жана сиз жөн гана FPGAнын рельсинин параметрлерин өзгөртө аласыз (алар абдан кылдаттык менен иштелип чыккан). Ошентип, бул тобокелчиликке барбаңыз жана жогорудагы сүрөттөрдө көрүнүп тургандай, туташтыргычты бир пинге солго жылдырбаңыз (жана FPGA тактасын оодарыңыз). Мына PMod спецификациясы, сиз муну изилдейсиз, мен кыскача айтканда эки тактанын VCCлерин туташтырбоо.

Сунушталууда: