Мазмуну:
- 1 -кадам: Эски мектептин жыштыгын эсептөө
- 2 -кадам: Өз ара жол
- 3 -кадам: Аппараттык жабдуулар жана анын схемасы
- 4 -кадам: Код
- 5 -кадам: Тактык жана Тактык
Video: Жогорку чечим Frequency Counter: 5 кадамдар (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
Бул көрсөтмө жыштыктарды ылдам жана акылга сыярлык тактык менен өлчөөгө жөндөмдүү өз ара жыштык эсептегичти көрсөтөт. Бул стандарттык компоненттерден жасалган жана дем алыш күндөрү жасалышы мүмкүн (мага бир аз көбүрөөк убакыт кетти:-))
EDIT: Код GitLabда азыр жеткиликтүү:
gitlab.com/WilkoL/high-resolution-frequency-counter
1 -кадам: Эски мектептин жыштыгын эсептөө
Сигналдын жыштыгын өлчөөнүн эски мектеп жолу-бул логиканы жана AND-дарбазаны колдонуу, өлчөнө турган сигналды бир портко жана башка портко так 1 секунд жогорку убакыт менен берүү жана чыгарууну эсептөө. Бул ГГцке бир нече кГц сигналдары үчүн жакшы иштейт. Бирок, эгер сиз жакшы чечим менен төмөнкү жыштыктагы сигналды өлчөгүңүз келсе, эмне кылыш керек? Электр тармагынын жыштыгын өлчөгүңүз келет дейли (бул жерде 50 Гц). Эски мектеп методу менен сиз дисплейиңизде үзгүлтүксүз 50 көрөсүз, эгерде сиз бактылуу болсоңуз, бирок 49дан 50гө чейин же 50дөн 51ге чейин дисплейдин которуштуруусун көрөсүз. Чечим 1 Гц, жана башка. Сиз дарбазанын убактысын 1000 секундга чейин көбөйтүүгө даяр болбосоңуз, 50.002 Гцти эч качан көрө албайсыз. Бул бир эле өлчөө үчүн 16 мүнөттөн ашык!
Төмөн жыштык сигналдарын өлчөөнүн эң жакшы жолу - анын мезгилин өлчөө. Электр тармагын кайра мисал катары алсак, 20 миллисекунддук мезгил бар. Ошол эле логикалык AND-дарбазаны алыңыз, аны 10 МГц (0.1 импульс) деп жана башка порттогу сигналыңыз менен 200000 импульсту чыгарыңыз, андыктан мезгил 20000.0 uS жана кайра 50 Гцке которулат. Сиз 199650 импульсун ченегенде жыштыгы 50.087 Гц, бул бир топ жакшыраак жана ал бир эле секунддук өлчөө убагында. Тилекке каршы, бул жогорку жыштыктар менен жакшы иштебейт. Мисалы, азыр 40 кГц ченегибиз келет. Шилтеме катары 10 МГц кирүү жыштыгы менен биз азыр 250 импульсту гана өлчөйбүз. Биз 249 импульсту эсептегенде, эсептөө 40161 Гцти, ал эми 251 менен 39840 Гц жыйынтыкты берет. Бул алгылыктуу чечим эмес. Албетте, маалымдама жыштыгын жогорулатуу натыйжаларды жакшыртат, бирок микро контроллерде колдонууга чек бар.
2 -кадам: Өз ара жол
Төмөн жана жогорку жыштыктарда иштеген чечим - бул жыштыктын өз ара эсептегичи. Мен анын принцибин түшүндүрүүгө аракет кылам. Сиз болжол менен 1 секунд өлчөө убактысынан баштайсыз, бул өтө так болушу шарт эмес, бирок бул өлчөө үчүн акылга сыярлык убакыт. Бул 1 Гц сигналды D-киришиндеги D-flipflopка бериңиз. Чыгыштарда азырынча эч нерсе болбойт. Өлчөгүңүз келген сигналды D-flipflopтын CLOCK киришине туташтырыңыз.
Бул сигнал ТӨМӨНДӨН ЖОГОРУГА өтөөрү менен, D-flipflopтун чыгышы D-киргизүү абалын чыгууга которот (Q). Бул RISING сигналы кирүүчү сигналды, ошондой эле маалымдама саат сигналын саноону баштоо үчүн колдонулат.
Ошентип, сиз так ошол эле учурда ЭКИ сигналды, сиз өлчөгүңүз келген сигналды жана маалымдама саатын эсептеп жатасыз. Бул маалымдама саат так мааниге ээ жана туруктуу болушу керек, кадимки кристалл осциллятору жакшы. Бул чоң жыштык жана анын баасы жакшы белгилүү болгондо, мааниси анча маанилүү эмес.
Бир нече убакыттан кийин, бир нече миллисекундта айткыла, сиз D-flipflopтун D-киришин кайра төмөн кыласыз. Кийинки CLOCK-киришинде Q чыгышы кирүү абалына жараша болот, бирок башка эч нерсе болбойт, анткени микро контроллер RISING сигналына гана жооп берүүгө коюлган. Андан кийин, өлчөө убактысы бүткөндөн кийин (болжол менен 1 секунд) сиз D-киргизүүнү HIGH кыласыз.
Дагы кийинки CLOCK-киргизүүдө Q чыгарылышы келип чыгат жана бул RISING сигналы микро контроллерди иштетет, бул жолу эки эсептегичти эсептөөнү токтотуу үчүн.
Жыйынтык эки сан. Биринчи сан - бул шилтемеден алынган импульстардын саны. Биз маалымдама жыштыгын билгендиктен, бул импульстарды эсептөөгө кеткен убакытты да билебиз.
Экинчиси - бул биз өлчөп жаткан сигналдын импульсунун саны. Биз бул сигналдын RISING четтеринен баштаганыбызда, бул сигналдын импульсунун санына абдан ишенебиз.
Эми бул жөн гана кирүү сигналынын жыштыгын аныктоо үчүн эсептөө.
Мисалы, бизде бул сигналдар бар жана биз f-киргизүүнү өлчөгүбүз келет дейли. Шилтеме кварц кристалл осциллятору тарабынан чыгарылган 10 МГц. f_input = 31.416 Гц f_reference = 10000000 Гц (10 МГц), өлчөө убактысы болжол менен. 1 секунд
Бул убакыттын ичинде биз 32 импульсти санадык. Эми бул сигналдын бир мезгили 1 / 31.416 = 31830.9 uS алат. Ошентип, 32 мезгил бизге 1.0185892 секундду алды, бул 1 секунддан бир аз көбүрөөк.
Бул 1.0186 секундда биз дагы 10185892 таяныч сигналдын импульсун эсептейбиз.
Бул бизге төмөнкү маалыматты берет: input_count = 32 reference_count = 10185892 f_reference = 10000000 Гц
Жыйынтыгын эсептөө үчүн формула мындай: freq = (input_count * f_reference) / ref_count
Биздин мисалда бул: f-input = (32 * 10000000) / 10185892 = 31.416 Гц
Жана бул төмөнкү жыштыктар үчүн да, жогорку жыштыктар үчүн да жакшы иштейт, кирүү сигналы таяныч жыштыкка жакындаганда (же андан да жогору) стандарттык "дарбазалуу" өлчөө ыкмасын колдонуу жакшы. Бирок андан кийин биз жөн эле кириш сигналга жыштык бөлүштүргүчтү кошо алмакпыз, анткени бул өз ара ыкма ар кандай жыштык үчүн бирдей токтомго ээ (кайра шилтемеге чейин). Демек, сиз 100 кГцти түздөн -түз 1000x бөлүүчүгө бөлсөңүз да, чечим бирдей.
3 -кадам: Аппараттык жабдуулар жана анын схемасы
Мен мындай жыштык эсептегичтердин бир нечесин жасадым. Көптөн бери мен аны ATMEGA328 (Arduinoдо болгон контроллер) менен, кийинчерээк СТнын ARM микро контроллери менен жасадым. Акыркы 168 МГц жыштыктагы STM32F407 менен жасалган. Бирок азыр мен бир топ * кичине менен ушундай кылсам эмне кылам деп ойлонуп калдым. Мен 2 кбайт FLASH эс тутуму жана 128 байт RAM менен ATTINY2313 тандадым. Менде бар дисплей MAX7219, анын сегиз сегменттик дисплейи бар, бул дисплейлер Ebayде болгону 2 еврого жеткиликтүү. ATTINY2313'ти 1,5 еврого сатып алса болот, калган бөлүктөрүнүн бир даанасы болгону цент. Эң кымбаты, балким, пластикалык долбоордун кутусу болгон. Кийинчерээк мен аны литий-иондук батареяда иштетүүнү чечтим, ошондуктан (LDO) 3.3V чыңалуу стабилизаторун батареяны кубаттоочу модулду жана батарейканын өзүн кошушум керек болчу. Бул бааны бир аз жогорулатат, бирок менимче, аны 20 евродон азыраак курса болот.
4 -кадам: Код
Код Atmel (Microchip) Studio 7 менен C тилинде жазылган жана OLIMEX AVR_ISP (клон?) Аркылуу ATTINY2313ке программаланган. Эгерде сиз сүрөттөмөнү бул жерде аткаргыңыз келсе, төмөндөгү ZIP файлындагы (main.c) ачыңыз.
ИНИЦИАЛДАНДЫРУУ
Биринчиден, ATTINY2313 тышкы кристаллды колдонууга коюлган, анткени ички RC-осциллятор эч нерсени өлчөө үчүн жараксыз. Мен кичинекей өзгөрүлмө конденсатор менен туура 10 000 000 Гц жыштыгын тууралаган 10 МГц кристаллын колдоном. Инициализация портторду киргизүү жана чыгаруу үчүн, таймерлерди орнотуу жана үзгүлтүктөрдү жана MAX7219 инициализациясын камсыздоо менен алектенет. TIMER0-бул тышкы саатты, TIMER1 ички саатты, ошондой эле D-flipflopтон келген ICPдин көтөрүлүүчү четиндеги эсептегичтин маанисин кармоо үчүн орнотуу.
Мен негизги программаны акыркы жолу талкуулайм, андыктан кийинки үзгүлтүккө учуроо тартиби.
TIMER0_OVF
TIMER0 255ке чейин (8 бит) чейин эсептелгендиктен, 0гө айланат, биз толуп кетүүлөрдүн санын эсептөө үчүн үзгүлтүккө муктажбыз. TIMER0_OVF муну жасайт, жөн эле толуп кетүү санын эсептеңиз. Кийинчерээк бул сан эсептегичтин өзү менен биригет.
TIMER1_OVF
TIMER1 65536га чейин эсептей алат (16 бит), андыктан TIMER1_OVF үзүлүшү да толуп кетүүлөрдүн санын эсептейт. Бирок ал көбүрөөк кылат. Ал ошондой эле 152ден 0гө чейин азаят, бул болжол менен 1 секундду талап кылат, андан кийин флипфлоптун D-киришине барып, чыгуу пинин коет. Жана бул үзгүлтүккө учуроодо жасала турган акыркы нерсе, тайм-таймды азайтуу, болжол менен 5 секундга созулган 765тен 0гө чейин.
TIMER1_CAPT
Бул D-flipflop сигнал жиберген сайын, сигналдын көтөрүлүүчү четинде (жогоруда түшүндүрүлгөндөй) иштей турган TIMER1_CAPT үзгүлтүгү. Тартуу логикасы TIMER1 эсептегичтин баалуулугун сактап калуу үчүн кам көрөт, ал сакталат жана толуп кетүүчү эсептегич. Тилекке каршы, TIMER0до кирүү функциясы жок, андыктан бул жерде анын учурдагы мааниси жана толуп жаткан эсептегичтин учурдагы мааниси окулат. Билдирүүнүн өзгөрмөлүү варианты анын негизги программасы үчүн коюлган, бул бул жаңы маалыматтар.
Кийинки MAX7219ду көзөмөлдөө үчүн эки функция бар
SPI
Чипте универсалдуу сериялык интерфейс (USI) бар болсо да, мен аны колдонбойм. MAX7219 дисплейи SPI аркылуу башкарылышы керек жана бул USI менен мүмкүн. Бирок, SPIдин битбинги ушунчалык жөнөкөй болгондуктан, мен аны USI менен кылууга убакыт бөлгөн жокмун.
MAX7219
MAX7219ду орнотуу протоколу, анын колдонмосун окуп чыкканыңыздан кийин, абдан жөнөкөй. Ал цифралык сан үчүн 8 биттен турган (1ден 8ге чейин) ар бир цифр үчүн 16 биттик мааниге ээ болушу керек, андан кийин аны көрсөтүү үчүн 8 бит керек.
НЕГИЗГИ ПРОГРАММА
Акыркы нерсе - негизги программаны түшүндүрүп берүү. Ал чексиз циклде иштейт (while (1)), бирок үзгүлтүккө учуроо режиминен билдирүү (1) болгондо же күтүү убакыты эсептегич нөлгө түшүп калганда (кирүү сигналы жок) бир нерсе кылат.
Өзгөрүлмө билдирүү бир болуп коюлганда эмне кылуу керек, биз сигналдын бар экенин билгенден кийин, убакытты эсептегичти баштапкы абалга келтирүү. D-flipflop аны өлчөө убактысынан кийин келе турган кийинки триггерге даяр кылуу үчүн баштапкы абалга келтирилет (бир секунд күтө туруңуз).
Тартуу үзгүлтүгүндө катталган сандар шилтеме санын жана киргизүү-жыштык санын берүү үчүн кошулат. (шилтеме эч качан нөлгө барбашы керек, анткени биз аны кийинчерээк бөлөбүз)
Кийинки реалдуу жыштыгын эсептөө болуп саналат. Мен, албетте, 2 кбайт флэш жана 128 байт кочкор менен микроконтроллерде сүзгүч сандарды колдонгум келбейт, мен бүтүн сандарды колдоном. Бирок жыштыктар 314.159 Гц сыяктуу болушу мүмкүн, бир нече ондуктар менен. Ошондуктан мен кирүү жыштыгын шилтеме жыштыгы менен эле эмес, көбөйткүч менен да көбөйтөм, анан ондук чекит кайда кетиши керектигин санга кошом. Муну кылганда бул сандар абдан чоң болуп калат. Мисалы 500 кГц кириши менен, 10 МГц маалыматы жана 100 мультипликатору менен, бул 5 x 10^14 берет, бул чынында эле чоң! Алар 32 биттик номерге туура келбейт, ошондуктан мен 64 x 1,8 x 10^19га чейин бара турган номерлерди колдоном (бул ATTINY2313де жакшы иштейт)
Жана акыркы нерсе - MAX7219 дисплейине жыйынтык жөнөтүү.
Код 1600 байтты түзөт, андыктан ал ATTINY2313те бар 2048 байт флешке туура келет.
Сактоочу регистрлер мындай болушу керек:
УЗАТЫЛГАН 0xFF
Жогорку 0xDF
ТӨМӨН 0xBF
5 -кадам: Тактык жана Тактык
Тактык жана тактык - бул эки башка жырткыч. Бул жердеги тактык жети цифрадан турат, иш жүзүндө кандай тактык аппаратура менен калибрлөөдөн көз каранды. Мен 10 МГцти (сыноо чекитинде 5 МГц) GPS дисциплиналуу осциллятору бар башка жыштык эсептегич менен калибрледим.
Ал абдан жакшы иштейт, мен аракет кылган эң төмөнкү жыштык 0,2 Гц, эң жогорку 2 МГц. Бул так жерде. 2 МГцтен жогору контролер үзгүлтүккө учурай баштайт, бирок 2 МГцте TIMER0 кирүү сигналы секундасына 7800дөн ашык үзүлүштөрдү түзөөрүн билгенде таң калыштуу деле эмес. ATTINY2313 дагы башка нерселерди жасашы керек, TIMER1ден үзгүлтүккө учуроо, дагы 150 секундасына жана албетте эсептөөлөрдү жүргүзүү, дисплейди жана D-flipflopту көзөмөлдөө. Чыныгы түзмөктү карасаңыз, мен дисплейдин сегиз санынын жетөөнү гана колдоноорумду көрөсүң. Мен муну бир нече себептерден улам жасайм.
Биринчиден, киргизүү жыштыгын эсептөө - бул бөлүү, ал дээрлик дайыма калдыктарга ээ болот, анткени сиз аны бүтүн сандык бөлүм катары көрө албайсыз. Экинчиден, кварц кристалл осциллятору температура турукташкан эмес.
Туура 10 МГцке тууралаган конденсаторлор керамикалык, температуранын өзгөрүшүнө өтө сезгич. Андан кийин, TIMER0до логиканын курулушу жок экени жана үзгүлтүккө учуратуу функцияларынын баары өз жумуштарын аткаруу үчүн бир аз убакытты талап кылат. Мен ойлойм жети цифра баары бир жетиштүү.
Сунушталууда:
Жогорку чечим вебкамерасы: 9 кадам (сүрөттөр менен)
Жогорку чечимдеги веб -камера: Бир нече жылдар бою мен RPi негизиндеги веб -камераны колдоном (PiCam модулу менен). Өндүрүлгөн сүрөттөр баары жайында болчу, бирок мен сапатына канааттанбай калган учурум болгон. Мен жогорку ажыратымдылыктагы веб-камера жасоону чечтим. Кийинки бөлүктөр
OpenLogger: Жогорку чечим, Wi-Fi иштетилген, ачык булак, портативдүү маалыматтарды каттоочу: 7 кадам
OpenLogger: Жогорку чечилиши бар, Wi-Fi иштетилген, ачык булак, портативдүү маалыматтарды каттоочу: OpenLogger-бул кымбат баалуу программаларды же жазуу программасын талап кылбастан жогорку сапаттагы өлчөөлөрдү камсыз кылуу үчүн иштелип чыккан портативдүү, ачык булак, арзан, жогорку чечилиштеги маалымат каттоочу. нөлдөн баштап. Эгерде сиз инженер, илимпоз же энтузиаст болсоңуз
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: 13 кадам (сүрөттөр менен)
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: Бул компьютерди кантип ажыратуу керектиги жөнүндө көрсөтмө. Негизги компоненттердин көбү модулдук жана оңой эле алынып салынат. Ошентсе да, бул боюнча уюштуруу маанилүү. Бул сизди бөлүктөрдү жоготпоого, ошондой эле кайра чогултууга жардам берет
PCB дизайны жөнөкөй жана оңой кадамдар менен: 30 кадам (сүрөттөр менен)
ПКБнын дизайны жөнөкөй жана оңой кадамдар менен: САЛАМ ДОСТОР ПКБ дизайнын үйрөнүүнү каалагандар үчүн анын абдан пайдалуу жана оңой үйрөткүчү башталат
Жогорку Power LED Grow Lights M.k2: 10 Кадамдар (Сүрөттөр менен)
Жогорку кубаттагы LED чырактары M.k2: LED чырактарынын алдында өсүп жаткан өсүмдүктөр менен ойногондон кийин, мен жогорку кубаттуулуктагы светодиоддордун жардамы менен чоңураак системаны курууга барам деп ойлогом ……… Мен кечирим сурайм Мен өлгөн атты сабап жаткандай көрүнөм, бул менин акыркы көрсөтмөм болот