Анализатор свиста на cortex-m4 или включение нагрузки по свистку

Плата и прошивка на Cortex-M4 (STM32F4) с нуля

Не так давно заинтересовался 3D-печатью, и собственно, начал со сборки принтера.

(Пардон за качество, лень доставать камеру)

Выбор платы пал на 3DSWAY Lerdge.Все её минусы перечислять не буду, и так понятно, закрытость и тд…Вообщем появилась мысль сделать что-то своё, с преферансом и куртизанками.Пока что вырисовывается вот что —

По железу:

1. Микроконтроллер STM32F4 (ARM Cortex-M4) из-за присутствия FPU.

2. Дисплей серии Nextion с удобным 4-х проводным HMI)

По прошивке:

1. Программное зеркалирование моторов (то есть дублирование оси для систем где на одну ось работает 2 и больше двигателей, например как на “Пруше” по Z .

Чтобы не включать моторы параллельно или не навешивать дополнительный драйвер на управляющие линии, а просто задать режим Slave дополнительному драйверу.

2. Увеличенное количество драйверов: 7 шт. (X,Y,Z-оси, E1-экструдер и P1,P2,P3-программируемые драйверы)

X,Y,Z — для моторов осей, без возможности программирования.E1 — драйвер первого экструдера, без возможности программирования.P1,P2,P3 — программируемые драйверы, выполняют или функцию зеркалирующих X,Y,Z-моторов осей (любой из них любую ось, хоть все Z, хоть каждый отдельную), или роль экструдера.Например: X, Y, Z (P1 дублирует Z), E1-первый экструдер, P2,P3-второй и третий экструдеры (допустим для “Diamond”.

3. Независимое питание (12-24В) для платы стола и экструдеров.

4. Нормальная силовая часть для питания стола.

5. Выбор питания концевиков (5 или 12/24В) для правильного функционирования промышленных датчиков, и возможность использовать любой их тип (NPN/PNP).

6. Сенсорный экран.

7. Со временем, может быть, плюшки типа доступа по сети (wifi?), веб-интерфейс управления, вебкамера, и тд тп.

Но, пока особой в сетевой интеграции пользы не вижу, с флешки таки надёжнее.

Проект не предполагает каких-то конкретных сроков, и будет делаться ради фана, но по мере продвижения буду держать в курсе, если кому-то интересно.

P.S. Также есть пара вопросов к Сообществу:

1. Кто-нибудь использует концевики по max.-координатам осей?

Нужны они вообще кому-нибудь?

2. Тот же вопрос по термопарам — оно надо, или терморезисторов достаточно?

3. …и вообще какие будут соображения?

Спасибо за внимание!

mlizart
Загрузка

15.03.18

20202

Несколько раз уже я обращался к уважаемому сообществу с вопросом на тему – почему так го…

Источник: http://3Dtoday.ru/questions/board-and-firmware-on-cortexm4-stm32f4-from-scratch/

Описание элементов управления и настроек SDRSharp

1. Главный экран.

[STOP / PLAY] – кнопка запуска / остановки приема.

рядом строка с выпадающим списком – выбор источника сигнала, в нашем случае RTL 2832 USB тюнер.

[CONFIGURE] – вход в настройки источника сигнала (в нашем случае настройки тюнера).

[VFO] – отображение частоты приёма. Мышкой, курсорными клавишами или цифровыми клавишами можно менять частоту приёма непосредственно в этом поле.

ползунок [Zoom] – изменение масштаба отображения анализатора спектра и водопада.

ползунок [Contrast] – смещение палитры водопада.

ползунок [Speed] – изменение частоты обновления водопада и анализатора спектра.

Черное окно вверху – анализатор спектра принимаемой полосы частот. В этом окне кроме индикации спектра с помощью мышки возможно изменять частоту настройки.

Черное окно внизу – водопад. Так-же позволяет изменять частоту приема при помощи мышки.

Далее идёт панель элементов управления. Каждую вкладку этой панели мы рассмотрим отдельно.

2. RADIO

[NFM AM LSB USB WFM DSB CW RAW] – переключение видов модуляции принимаемого сигнала. RAW – прием без демодуляции сигнала.

[Shift] – смещение индикации частоты приема. Галочка включает, а цифровое поле задаёт смещение. Используется в основном с конвертерами для индикации точной частоты приёма.

[Filter type] – выбор оконного фильтра. Относится к теории цифровой обработки сигналов. Практической пользы от смены фильтров я не заметил.

[Filter bandwidth] – полоса фильтра принимаемого сигнала.

[Filter order] – добротность фильтра. Влияет практически на все фильтры в программе, пропускающие принимаемый сигнал.

[Squelch] – шумоподавитель. Галочка включает, цифровое поле – настройка чувствительности.

[Snap to grid] – привязка изменения частоты к сетке с шагом указанным в цифровом поле [Step size].

[Correct IQ] – автокоррекция дисбаланса фазы и уровня IQ сигнала. Очень полезная функция. Улучшает подавление зеркального канала и убирает палку в середине спектра на 0 частоте (видно на первом рисунке).

[Swap I & Q] – меняет местами I и Q составляющие сигнала. Для RTL устройств функция не используется, у них всё на своих местах.

[FM stereo] – тут комментарии излишни, разрешает стереодекодер для WFM приема.

[Marks Peak] – Маркировать пики сигнала. На спектре рисует много кружков в пиках сигналов. Полезность и назначение этой функции мне не известны.

3. AUDIO

[AF Gain] – громкость.

[Samplerate] – частота дискретизации звукового потока на выходе.

[Input] – выбор звукового входа.

[Output] – выбор устройства для воспроизведения звука.

[Latency] – Размер буфера накопления сигнала в миллисекундах.

[Filter audio] – включение звукового фильтра на выходе. Фильтр не настраиваемый. Полоса пропускания для NFM и AM равна половине полосы установленной в параметре [Filter Bandwidth]. Для WFM 20 – 20000 Гц.

4. AGC (АРУ – Автоматическая регулировка усиления)

В приемном тракте несколько автоматических регулировок усиления. Данная AGC программная, поддерживает уровень звука после демодуляции на одном уровне и не влияет на общее усиление тракта от антенны до демодуляции.

5. FFT Display

[View] – выбор отображения анализатора спектра, водопада или обоих одновременно.

[Window] – выбор оконной функции для анализатора и водопада. Из теории цифровой обработки сигналов. Оказывает некоторое влияние на отображение.

[Resolution] – количество точек преобразования фурье входного IQ сигнала. Чем больше точек, тем чётче картинка спектра и больше нагрузка на процессор.

[Use time marker] – вывод на водопад информации о времени и дате.

[Gradient …] – настройка палитры водопада.

Набор регуляторов [Smoothing] – в переводе на русский означает сглаживание. Влияет на отображение спектра и водопада.

[Offset] – смещение максимума анализатора спектра.

[Range] – (диапазон) смещение минимума анализатора спектра. Очень полезный регулятор. Для RTL-тюнеров достаточно поставить -70 -80dB.

Источник: http://rtl-sdr.ru/page/opisanie-elementov-upravlenija-i-nastroek-sdrsharp

Знакомство с микроконтроллерами ARM Cortex M на примере LPC1114

В последнее время всё большую популярность набирают микроконтроллеры построенные на основе архитектуры ARM. Есть мнение, что эра восьмиразрядных микроконтроллеров подходит к концу, так как им трудно тягаться в производительности с 32-разрядными ARM Cortex M-ядрами. Более того, ARM-чипы уже опережают 8-битных конкурентов не только по соотношение цена/производительность, но и просто по цене.

Архитектура процессоров ARM и семейство Cortex M

Понятие “архитектура ARM” объединяет довольно большое семейство микроархитектур 32 и 64-разрядных RISC-процессоров. Различные микроархитектуры имеют свои особенности и свои области применения.

Поэтому при первоначальнои поиске информации нужно понимать, что “ARM ARMу рознь”.

В этом посте речь пойдёт о микроархитектуре ARM Cortex-M, ориентированной на микроконтроллеры, и у неё, конечно, есть свои особенности, которые надо учитывать при первоначальном поиске информации.

Например, процессоры ARM могут поддерживать два набора инструкций: 32-битные инструкции ARM и 16-битные Thumb. При этом ARM Cortex-M поддерживает только Thumb инструкции. Кроме того, процедура начальной загрузки, которую мы будем тут рассматривать, отличается для микроконтроллеров Cortex-M от таковой для большинства других ARM-микроархитектур.

Микроконтроллеры Cortex-M в свою очередь делятся на несколько семейств в зависимости от ядра. Семейство на самых простых ядрах Cortex-M0 – микроконтроллеры предназначенные ситуаций, где самый важный фактор – цена. Как правило они имеют не столь богатую периферию как Cortex-M3/M4/M7.

Лично мне кажется, что чем меньше навротов тем проще изучение (хотя бы потому, что datasheet короче, и досконально изучить микроконтроллер гораздо проще). С другой стороны, реализация мигания светодиодом очень похожа и для LPC1114 (Cortex-M0) и для какого-нибудь STM32F4 (Cortex-M4F).

Впрочем, хотя микроконтроллеры ARM Cortex-M от разных производителей хотя и имеют одинаковое “ядро”, в периферии могут иметь большое количество различий, тонкостей и своих граблей. Поэтому не стоит недооценивать опыт работы с конкретным микроконтроллером и вдумчивое чтение документации.

На рынке есть большое количество отладочных плат с этими микроконтроллерами, что сильно облегчает изучение и создание прототипов устройств. Для создания своих собственных плат может потребоваться оборудование и определённые навыки. Тем не менее это вполне под силу многим энтузиастам. Пользователь habrahabr.

ru Михаил Сваричевский (@BarsMonster) убедительно показывает, что создание своей платы с микроконтроллером STM32F100C4T6B вполне поддаётся лазерно-утюжной технологии, но для многих (для меня в том числе) даже это – черезчур.

С некоторых пор Cortex-M0 микроконтроллеры существуют и в DIP-корпусах, что на мой взгляд делает создание своих собственных плат доступным даже абсолютным новичкам.
Мне известно по крайней мере о двух таких чипах: LPC810 (DIP8) и LPC1114 (DIP28). Недавно я приобрёл второй чип LPC1114.

На мой взгляд это идеальный микроконтроллер для знакомства с семейсвом Cortex M. Сейчас цена eBay на них $4.50 (недёшево).

В архитектуре ARM есть 12 регистров общего назначения. Они так и называются: R0-R12. Также имеется 2 регистра-указателя стека MSP (Main Stack Pointer) и PSP (Process Stack Pointer). Один из этих указателей отображается на регистр R13 (SP) (Stack Pointer). R13 и SP – просто взаимозаменяемые названия.

В зависимости от бита 1 в регистре CONTROL SP будет соответсвовать MSP (0) или PSP (1). Link Register (LR) или R14 используется при вызове процедур и прерываний. В нём содержится адрес возврата. Program Counter (PC) или R15 – указатель текущей команды. Program Status Register (PSR).

Программа кодируется с помощью 2-байтных инструкций Thumb. 

Регистры общего назначения R0-R12 делятся на LO-регистры (R0-R7) и HI-регистры (R8-R12). Многие команды Thumb работают только с LO-регистрами. Согласно документации, значение может передаваться из из LO-регистра в HI-регитр и из HI-регистра в LO-регистр, с помощью специального варианта инструкции MOV.

Значения в HI-регистрах могут сравниваться с значениями в LO-регистрах с помощью инструкции CMP.  Значения в HI-регистрах могут так же добавляться к значениям в LO-регистрах с помощью инструкции ADD.

В стандартный набор периферии микроконтроллеров могут входить UART (универсальный асинхронный приёмопередатчик, тот что лежит в основе компьютерных COM-портов), шина I2C, шина SPI и, разумеется GPIO (General Purpose I/O или вводы-выводы общего назначения).

Могут входить так же ADC (АЦП, аналого-цифровой преобразователь), DAC (цифро-аналоговый преобразователь), реализованный аппаратно PWM (ШИМ, широтно-импульсная модуляция). Внешние утстройства управляются с помощью регистров (не путать с регистрами процессора R0-R15), которые отображаются на определённые области в памяти.

Так, например, в LPC1114 по адресу 0x50008000 находится регистр GPIO0DIR, который определяет, какие ножки GPIO0 будут работать как вводы, а какие – как выводы.

А по адресу 0x50003ffc находится регистр GPIO0DATA, с помощю которого можно установить значение на выводах (записывая значения в соответствующие биты регистра), или, соответственно, считать значения на тех ножках GPIO0, которые настрены как ввводы.То есть в отличие от архитектуры x86 в ARM нет аналогов инструкций IN/OUT.

Вместо записи значения в порт нужно просто записать значение по определённому адресу так же как мы бы записывали его в память. Это, кстати, позволяет при работе с внешними устройствами из языка C/С++ использовать только лишь адресную арифметику и указатели.

В процессоре LPC1114 (как и во многих других) можно “включать” и “выключать” периферию, оптимизируя таким образом потребляемую мощность. Как я понял, подключение/отключение блоков периферии производится с помощью подключения/отключения тактирования для этих блоков. Это делается установкой соответствующего бита в регистре SYSAHBCLKCTRL (по адресу 0x40048080).

В нашем примере мы устанавливаем 6-й и 16-й биты, включая таким образом GPIO (6-й бит) и IOCON Block (блок конфигурации воода-вывода).Процедура начальной загрузки одинакова по крайней мере для контроллеров Cortex-M0/3/4.

Процессор считывает по адресу 0x00000000 начальное значение указателя стека и инициализирует регистр MSP (который сразу после загрузки отображается на регистр R13) Затем, начиная с адреса 0x00000004 находится таблица исключений (таблица прерываний). Самое первое прерывание – Reset.

Это значит, что по адресу 0x00000004 лежит адрес кода, который начнёт выпонятся сразу после сброса микроконтроллера. Вооружившись этими знаниями, а так же таблицей комманд Thumb и манулом к LPC1114 я покажу как реализовать мигание светодиодом – аналог “Hello world” в мире микроконтроллеров.Хорошая новость о разработке на ассемблере для ARM заключается в том, что можно обойтись совсем без ассемблера, и написать всю прошивку, начиная от начальной заргрузки и заканчивая общением с периферией на языке C или даже C++. Однако для знакомства с платформой написание программ на ассемблере будет очень полезным упражнением. С этого и начнём. В мире ARM популярны как минимум два транслятора ассемблерного кода GNU AS и ARMASM, и синтаксис у них отличается. Здесь рассмотрен GNU AS.  Я буду использовать набор утилит для сборки (toolchain) GNU и коммандную строку. Это позволит в максимально явном виде показать каждый этап сборки.

Сначала оттранслируем ассемблерный файл, получив на выходе объектный файл *.o :

PATH_TO_GNU_TOOLCHAIN_arm-none-eabi-as.exe -mcpu=cortex-m0 blink-lpc1114.s -o blink-lpc1114.o

В итоге должен получиться файл blink-lpc1114.o . Следующий шаг – компоновка, или, в просторечии – линковка. Для того чтобы всё правильно слинковалось нам понадобится правильный скрипт компоновки.

Используя этот скрипт можно скомпоновать объектный файл в ELF-файл:

PATH_TO_GNU_TOOLCHAIN/arm-none-eabi-gcc -nostartfiles -Tblink-lpc1114.ld blink-lpc1114.o -o blink-lpc1114.elf

Должен сгенерироваться файл blink-lpc1114.elf . Наконец, последний шаг – конвертация ELF-файла в BIN-файл, который будет из себя представлять двоичные данные в том виде, в котором они будут лежать во флеш-памяти микроконтроллера. Это делается с помощью утилиты objcopy:

PATH_TO_GNU_TOOLCHAIN/arm-none-eabi-objcopy.exe -O binary blink-lpc1114.elf blink-lpc1114.bin

В результате получим файл blink-lpc1114.bin.Здесь я немного “срезал угол”. Я приобрёл чип LPC1114 вместе с mbed-совместимой платой. Она подключается к USB-разъёму, и определяется как файловая система (этакая небольшая флешка). На неё можно просто скопировать bin-файл.

После перезагрузки плата “поймёт”, что есть новая версия прошивки для микроконтроллера и “зальёт” бинарник в его флеш-память. Остаётся убедиться, что всё работает.
Без ткой платы LPC1114 прошивается через UART с уровнями 3.3 В. Существуют по крайней мере две утилиты для прошивки: lpc21isp (opensource) и flashmagic (бесплатная, но исходники, вроде, закрыты).

Если использовать компьютерный COM-порт, то необходимо использовать адаптер уровней (COM-порт выдаёт уровни +12/-12 вольт). Я планирую попробовать использовать плату Raspberry Pi и её UART-выводы, которые как раз выдают 3.3 В, и преобразование не требуется. Я надеюсь испытать этот метод на практике в ближайшем будущем и напишу о результатах в этом блоге.

Нам достаточно одной ножки, чтобы подключить светодиод. Из datasheet'а я понял, что среди всех “стандартных” GPIO-ножек выделяется PIO0_7 (28-я ножка микросхемы), которая служит “выводом с большим током” (High-current output driver), и может выдавать аж 20мА, что вполне достаточно для подключения светодиода через ограничивающий ток резистор.

С остальными выводами ситуация такая: если через вывод вытекает ток равный 4мА, то напряжение на этом выводе падает на 0.4В, то есть выходное сопротивление этих выводов равно 0.4В/4мА = 100Ом. При этом суммарный потребляемый микроконтроллером ток (часть из которого будет выходить через выводы GPIO) не должен превышать 100мА.

В общем, к другим ножкам тоже можно подключить светодиоды. Я собрал вот такую схему на макетной платe:Плата завелась без проблемЯ использовал плату Arduino Uno в качестве источника питания на 3.3ВЯ думаю, что мне удалось показать, что работа с микроконтроллерами ARM Cortex M не обязательно сложна как с программной так и со схемотехнической точек зрения.

Надеюсь, этот пост поможет кому-то вьехать в разработку устройств на этой архитектуре. В следующих постах я планирую написать про использование языка C и заголовочных файлов, предоставляемых производителем контроллера для более быстрой и удобной разработки.

Ссылки

Cortex M0 Devices Generic Manual

Источник: http://blog.asavochkin.com/2016/03/arm-cortex-m-lpc1114.html

Анализатор свиста на Cortex-M4 или включение нагрузки по свистку

Как говорится, лучше один раз увидеть, чем сто раз услышать:

Почему этот проект и именно сейчас?

Обычно, я всегда обдумываю проект перед поиском компонентов. Для проекта the whistled (анализатор свиста), все пошло по-другому.

Несколько месяцев назад, когда был приобретен микроконтроллер Cortex M4 с 32-выводами, у меня было множество идей, и проект анализатора свиста был одной из них.

Как упоминалось в видеоролике, данный небольшой микроконтроллер Kinetis K10 может выполнять около 80 [q15 2048 балов] быстрых преобразований Фурье (FFT) в секунду и еще оставляет пользователю дополнительное процессорное время для запуска собственных алгоритмов.

Это объясняется тем, что микроконтроллер Cortex M4 имеет набор инструкций для цифровой обработки сигналов (DSP), который особенно пригоден для обработки данных, а также потому, что библиотека ARM CMSIS предоставляет нам уже оптимизированный код для выполнения более сложных функций, таких как быстрое преобразование Фурье. Поскольку все подготовительные работы выполнены, я смог сфокусироваться на расчете фильтра и алгоритмов по распознаванию свиста.

На это ушло много времени и потребовалось множество тестовых процедур.

Спецификация и схемные решения

Итак, принципиальная схема:

Как видите, схемы состоят из довольно простых и компактных компонентов. На них показаны: – Несколько ферритовых катушек (L1/L2/L3) для фильтрации паразитных помех, которые могут присутствовать в системе или появляться при срабатывании транзистора Q2 – Р-канальный МОП-транзистор (Q1) для защиты соединений от обратной полярности (с каждым может случиться)

– Стандартный линейный преобразователь LDO (U1) на 3.3 В

– Основной микроконтроллер Cortex M4 (U3)
– Mosfet драйвер (U4) вместе с N-канальным МОП-транзистором (Q2) позволяют выполнить правильное диммирование (изменение уровня яркости) при больших нагрузках
– Микрофонный усилитель с автоматической регулировкой усиления (AGC) (U2), параметры которого довольно трудно установить.

Все дорожки на печатной плате, к которым можно прикоснуться, имеют защиту от электростатического разряда, а именно: источник электропитания и сток N-канального МОП-транзистора, поскольку все остальные части печатной платы покрыты прозрачной термоусадочной трубкой. Для своего проекта я хотел иметь защиту от дурака (без обид). Наибольшее преимущество микроконтроллера Kinetis K10 заключается в том, что он имеет 16-битный таймер с ШИМ-выходами, что в результате приводит к широкому диапазону диммирования.

Платформа позволяет использовать напряжение в диапазоне от 4.5 В до 18 В, с максимальным током 5 A на входах.

Вы также можете управлять нагрузкой мощностью до 90 Ватт с помощью данного устройства размером всего лишь 55×13 мм!
И конечно, на плате размещаются контактные площадки для последовательного отладочного порта SWD, который используется для загрузки вашей программы.

Перечень компонентов

Таблица используемых компонентов и их стоимость показана ниже…

Список компонентов не слишком дешевый, поскольку существует несколько вариантов исполнения: – Желание иметь различное входное напряжение привело к выбору более дорогостоящих компонентов – Добавлены дополнительные фильтры (ферриты) – Для соединений выбрана клеммная колодка – Выбрано устройство для защиты от обратной полярности – Выбраны транзисторы с низким сопротивлением Rds (сопротивление полностью открытого транзистора) для предотвращения перегрева печатной платы.

Я думаю, что это идеальная стоимость и платы будут работать при любых возможных ситуациях.

Печатная плата

Как видите, все компоненты умещаются на данной компактной плате. Первые прототипы было трудно спаять, поскольку выводы MAX9814 имеют шаг 0.4 мм.

Для защиты от электростатического разряда используется термоусадочная трубка, однако она не перекрывает микрофон. На нижнем слое я установил замыкающие цепи через землю между микроконтроллером/аналоговыми компонентами и силовыми цепями схемы, чтобы при усилении звука не происходило возбуждения из-за наведенных помех при переключении.

Конечная толщина медного покрытия составляет 60 мкм, что приводит к повышению температуры на 7 градусов при токе 5 А для дорожек, по которым протекает высокий ток.

Удобство использования

Как уже упоминалось, плата имеет незакрытые аппаратные компоненты и 4 контактные площадки для подключения отладочного порта SWD (3.3 В / 0 В / clock (синхроимпульс) / data (данные)):

Так что, если у вас есть некоторые необычные идеи для данной платформы, дайте волю своей фантазии.
Мощные вычислительные возможности микроконтроллера Cortex M4 дадут возможность сделать намного больше, а не просто распознать свист. Я просто уверен, что множество таких применений могут даже «подсветить» вечеринку.

Вы также сможете использовать “последовательность секретных звуков” для открытия дверей или сейфов.

Файлы

Ниже располагается все, что необходимо для воспроизведения данного проекта.
Проект имеет открытую аппаратную платформу. Также я предоставляю исходный код, за исключением моих алгоритмов, поскольку на некоторых веб-сайтах могут появиться некачественные копии данного изделия.

Схемы довольно простые, поэтому вы легко сможете разработать печатную плату с помощью CAD программного обеспечения.
Когда вы будете работать над программным кодом, то все что вам нужно, так это запустить ваши алгоритмы с переменной working_buffer в функции run_recognition_algo в конце кода main.c

Алгоритм

Благодаря большому количеству полученных комментариев, я бы хотел немного разъяснить общую структуру текущего применяемого алгоритма. Я создал рабочий алгоритм, но убежден, что кто-нибудь сможет сделать его намного лучше.

Созданный алгоритм пригоден только для данной платформы, и что немало важно, для текущей реализации (два последовательных свиста для включения/выключения). Поэтому я не уверен, что алгоритм будет полезен для тех, кто хочет собрать платформу на скорую руку.

Если вы на самом деле хотите создать алгоритм таким же способом как и я, тогда прочтите следующие рекомендации: – Определите два последовательных пиковых значения в быстром преобразовании Фурье при различных частотах. – Проверьте ширину данных пиковых значений.

– В зависимости от того, как вы свистите, проконтролируйте отклонение частоты первого пикового значения. – Проверьте выделение сигнала между высотой пикового значения и близлежащих пиковых значений.

– Выполните одно или два быстрых преобразований Фурье без учета пиковых значений, предположив, что ваш свист непрерывный, хотя фактически таким не является. – Разрешите только один частотный диапазон свиста (с 8 по 46 в текущем алгоритме). Созданный алгоритм основывается на ложном распознавании сигналов (ложное распознавание) и ложном не распознавании сигналов (без распознавания, когда вы свистите), поскольку люди свистят по-разному.

Поэтому для вас будет легче написать свой собственный код для свиста, чем быть таким же терпеливым, как я.

Заключение

Я полностью уверен в данном проекте. Поэтому я предпринял попытку и решил задачу самостоятельно. Данное решение было одобрено со стороны многих знакомых и коллег, которые нашли проект анализатора свиста очень удобным в использовании для автоматизации их домов. Если данный проект будет успешным, я планирую создать новую линейку продуктов, которые будут использовать данный принцип работы.

Поэтому если вы заинтересовались данным проектом, я буду рад, если вы загляните на мою страничку tindie page.

– сноска для собранного устройства на печатной плате
– сноска для собранного устройства на печатной плате + блок питания US AC/DC
– сноска для собранного устройства на печатной плате + блок питания EU AC/DC
– сноска для собранного устройства на печатной плате + блок питания US AC/DC + светодиодная лента
​- сноска для собранного устройства на печатной плате + блок питания EU AC/DC + светодиодная лента

Скачать даташиты

Список радиоэлементов

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

Источник: http://cxem.net/mc/mc212.php

Контроллер W7500P – ARM Cortex M0 + аппаратный Ethernet. С чего начать?

Контроллер W7500P – ARM Cortex M0 + аппаратный Ethernet.

С чего начать?

Проводные сети Ethernet остаются популярными и востребованными, несмотря на бурное развитие беспроводных технологий, предлагаемых им на замену.

Развитая инфраструктура позволяет просто и дешево обеспечить подключение любых устройств (счетчиков расхода ресурсов, контрольно-кассового оборудования) к локальным сетям и Интернет.

Кроме того, в случае проводного подключения можно не беспокоиться об устойчивости канала обмена и возможных сбоях в передаче из-за воздействия внешних условий, что не всегда может  быть обеспечено при использовании беспроводных соединений.

Микросхемы компании Wiznet являются одним из самых простых в освоении и применении решений для проводного Ethernet.

Этот производитель уже более 15 лет выпускает аппаратные мосты Ethernet,  аппаратный стек TCP/IP которых включает в себя поддержку протоколов TCP, UDP, IPv4, ICMP, IGMP и PPPoE.

Этого вполне достаточно для реализации типовых задач по удаленному сбору данных, мониторингу и управлению.

В декабре 2015 года компания Wiznet начала производство новой микросхемы W7500P. Этот микроконтроллер (МК) включает в себя три основных блока – популярное ядро ARM Cortex M0 с периферией, аппаратный Ethernet и PHY.

По стоимости новые микросхемы W7500P дешевле на 25% популярных мостов W5100 этого же производителя и дороже на 25%, чем новые мосты W5500.

С помощью W7500P можно в короткий срок реализовать интерфейс Ethernet в новой разработке или, без дополнительной нагрузки на основной МК, добавить его поддержку в модернизируемое устройство.

На рисунке 1 изображена блок-схема МК W7500P. Детально описывать все его узлы в данной статье не будем, с их описанием можно познакомиться в техническом руководстве на микросхему [1].

Отметим только, что микросхема имеет набор стандартных интерфейсов для общения с внешними устройствами.

Сюда входят два интерфейса UART с аппаратным контролем передачи, один UART без контроля, два интерфейса SPI со скоростью передачи до 20 МГц, два интерфейса I2C со скоростью передачи до 100 кГц, а также 8-канальный АЦП последовательного приближения с частотой преобразования до 10 МГц.

Эта периферия обеспечивает возможность использования W7500P в типовых задачах, где требуется обеспечить подключение к Ethernet и/или организовать мониторинг с помощью аналоговых или цифровых датчиков.

Для освоения микросхемы производитель предлагает недорогую отладочную плату WIZwiki-W7500P (см. рис.2). На плате реализовано все, что необходимо для тестирования функциональных возможностей Ethernet-контроллера.

Программирование и отладка производится с помощью стандартизованного интерфейса микроконтроллеров ARM Cortex CMSIS-DAP, который реализован на отдельном МК, а для связи с ПК используется интерфейс USB.

Основным назначением CMSIS-DAP является обеспечение процесса программирования и/или отладки целевого МК через интерфейсы USB или SWD (Serial Wire Debug). При первом знакомстве с МК W7500P и платой WIZwiki-W7500P  для программирования удобно использовать USB.

В таком режиме плата отображается на ПК как внешний диск с именем MBED. Никаких специальных драйверов предварительно устанавливать не требуется. Скомпилированный файл прошивки достаточно скопировать на этот диск и процесс загрузки будет выполнен автоматически.

CMSIS-DAP, кроме функции программирования, обеспечивает связь МК W7500P с ПК через виртуальный последовательный порт. Со стороны W7500P для этих целей задействован блок UART без аппаратного контроля (UART2).

Этот канал может быть использован, например, для вывода отладочной информации в процессе выполнения программы. Для получения доступа к W7500P через виртуальный COM-порт предварительно необходимо скачать и установить драйвер последовательного интерфейса, который можно найти по следующей ссылке [2]. 

Еще одним достоинством отладочной платы WIZwiki-W7500P является наличие статуса mbedEnabled. Он говорит о том, что данное отладочное средство прошло все необходимые тесты на совместимость с набором программных и аппаратных средств, представленных на сайте ARMmbed (https://developer.mbed.org/).

Данный ресурс объединяет производителей микроконтроллеров на базе ARM, производителей отладочных средств на базе этих МК и различных плат расширения для них, а также разработчиков, кто работает с ARM-контроллерами.

Все представленные на сайте аппаратные платформы полностью поддерживают работу с универсальными набором программных средств – mbed SDK. Это дает возможность запустить любой из примеров, представленных на данном сайте, на нашем МК, если периферия нашего МК позволяет это сделать.

Далее мы покажем, как использовать возможности этого ресурса на этапе освоения Ethernet-контроллера W7500P.

Первым шагом для начала работы с W7500P будет добавление отладочной платы WIZwiki-W7500P в онлайн компилятор. Находим, например, через поиск по сайту страницу с описанием этой платы и добавляем ее нажатием на кнопку “Add to your mbed Compiler” (см. рис.3).

После добавления платы надпись на этой кнопке изменится на “Open mbed Compiler”. При запуске компилятора с помощью этой кнопки появится окно создания проекта “Create new program”, в котором можно выбрать готовые примеры или создать проект с “нуля” (см. рис.4). 

За основу нашего будущего проекта возьмем простой пример mbed_blinky. В результате будет создан следующий проект (см. рис.5) в который будут включены файл программы main.cpp и библиотека mbed.

В библиотеку mbed включены все необходимые элементы для работы с периферией и ядром контроллера ARM. В эту библиотеку не входит то, что касается работы аппаратного блока Ethernet. Как работать с Ethernet мы рассмотрим позже, а пока вернемся к текущему примеру. Его код выглядит следующим образом:

#include “mbed.h”

DigitalOut myled(LED1); // выбор выхода МК к которому подключен красный светодиод

int main() {

    while(1) {

        myled = 1;

        wait(0.2);

        myled = 0;

        wait(0.2);

    }

}

Данный код выполняет простую функцию, попеременно включая и выключая красный светодиод. Из всех настроек здесь присутствует только выбор нужного вывода МК и назначение ему функции выхода: DigitalOut myled(LED1).

Имена вводов микроконтроллера приведены на странице описания платы WIZwiki-W7500P [3]. Запустим компиляцию проекта и по ее завершении загрузим получившийся файл прошивки с расширением bin в контроллер.

Это осуществляется, например, простым перетаскиванием этого файла из папки, где он хранится, на значок съемного носителя MBED (см. рис.6).

По завершению процесса копирования на отладочной плате начнет мигать красный светодиод.

Выше мы упоминали, что плата WIZwiki-W7500P может принимать и передавать данные через виртуальный COM-порт, который доступен через интерфейс USB. Добавим в наш проект вывод информации через него, и код примет следующий вид:

while(1) {

        myled = 1;

        printf(“LED On
”);

        wait(0.2);

        myled = 0;

        printf(“LED Off  
”);

        wait(0.2);

    }

По умолчанию, инициализация UART осуществляется в библиотеке mbed со следующими параметрами: скорость 9600 бод, без контроля четности и управления потоком, 8 бит данных и 1 стоп-бит. Если мы хотим поменять эти параметры, то инициализацию надо будет сделать самостоятельно. Например, мы хотим увеличить скорость обмена до 115200 бод, надо будет добавить следующий код:

  #include “mbed.h”

DigitalOut myled(LED1);

void baud(int baudrate) {

    Serial s(USBTX, USBRX);

    s.baud(baudrate);

}

int main() {

        baud(115200);

        while(1) {

            myled = 1;

            printf(“LED On
“);

            wait(0.2);

            myled = 0;

            printf(“LED Off
“);

            wait(0.2);

        }

}

Теперь рассмотрим базовые принципы работы с Ethernet, который и является основной отличительной особенностью МК W7500P. Для работы с ним в компиляторе mbed нам понадобится фирменная библиотека WIZnetInterface. Ее можно найти на странице производителя [5]. В поле с кратким описанием библиотеки нажимаем кнопку “Import library” (см. рис.7а).

В окне импорта (см. рис. 6б) нам будет предложено указать, в какой из наших проектов требуется добавить эту библиотеку, соответственно выбираем наш текущий проект.

Теперь у нас есть все необходимое для работы с Ethernet. Попробуем теперь реализовать передачу данных между двумя ПК, с одной стороны будет использоваться виртуальный COM-порт, с другой – Ethernet, т.е. реализуем простой конвертер Ethernet-Serial.

Первым делом надо добавить в проект ссылку на заголовочный файл библиотеки WIZnetInterface и задать основные сетевые настройки нашего преобразователя:

#include “EthernetInterface.h”

#define ECHO_SERVER_PORT   80

char ip_addr[] = “192.168.22.3”;

char subnet_mask[] = “255.255.255.0”;

char gateway_addr[] = “192.168.22.1”;

uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}; 

   Следующим шагом инициализируем и устанавливаем сетевое соединение W7500P:

int main() {

EthernetInterface eth;

eth.init(mac_addr, ip_addr, subnet_mask, gateway_addr);

eth.connect();

printf(“Server IP Address is %s
“, eth.getIPAddress());

На этом этапе, если откомпилировать и загрузить проект в WIZwiki-W7500P, можно удостовериться о наличии сетевого соединения пингованием.

МК W7500P не имеют функции автоматического переназначения линий TX/RX в сетевом интерфейсе.

Поэтому, если не получили ответа в процессе проверки соединения, в первую очередь стоит проверить, каким сетевым кабелем (прямым или перекрестным) подключена отладочная плата.

Следующим шагом будет инициализация TCP-сервера, назначение порта, по которому удаленное устройство будет устанавливать соединение и переход в режим ожидания запроса на установление соединения:

TCPSocketServer server;

server.bind(ECHO_SERVER_PORT);

server.listen();

Далее переходим к основному коду программы, в котором будет реализован обмен  данными между последовательным портом и Ethernet:

while(1)

        {

           printf(“Wait for new connection…
“);

           TCPSocketConnection client;

           server.accept(client); // принятии запроса клиента на соединение

           client.set_blocking(false, 15000); // Таймаут по истечении 1.5 с

           printf(“Connection from: %s
“, client.get_address()); // получение сетевого адреса клиент

           char buffer[256];

           while (true) {

           int n = client.receive(buffer, sizeof(buffer));

           if (n<\p>

Источник: http://mymcu.ru/articles/kontroller-w7500p-arm-cortex-m0-apparatniy-ethernet-s-chego-nachat.html

Калибровка китайских весов

ПодробностиКатегория: Статьи Опубликовано: 05 Июль 2016

  Калибровка весов – это комплекс технических мероприятий, устанавливающих соотношение между значением величины веса, полученным с помощью весов и соответствующим значением величины веса, определенным с помощью эталона (гири).

Это делается с целью привидения метрологических характеристик весов к установленным техническим требованиям (паспорт весов).

ПЕРВЫЙ ВАРИАНТ

Вход в режим калибровки осуществляется несколькими способами:

  • Если на весах предусмотрен джамперочек. То для калибровки просто переключаем его.
  • Если джампера нет, то вход осуществляется с помощью числового кода.

На просторах интернета мне удалось найти следующие комбинации паролей для входа в режимы калибровки.

  • 9755,
  • 1509,
  • 1579,
  • 1680,
  • 3658,
  • 1589,
  • 1578,
  • 9851,
  1.  И так. Для входа в режим калибровки, необходимо всего лишь, включить весы, набрать код и нажать кнопку ТАРА. Повторюсь еще раз. Код в зависимости от модели весов разный. В идеале он должен быть в паспорте. Но такое бывает редко. Далее нажимаем кнопку “1”. И опять кнопку “Т” (ТАРА). После этого автоматически запустится калибровка нулевого веса.
  2.  После завершения калибровки нулевого веса на индикаторе “Цена” появиться цифра “2”. На индикаторе “Стоимость” высветятся “тире” (“—–“). Весы “ожидают” установки веса, равного половине (или близкого к нему) от максимального. Устанавливаем на платформу нужный вес. Нажимаем “Т“.
  3.  На индикаторе “Цена” высвечивается “3”. Вводим значение этого веса в килограммах. Нажимаем “Т“.
  4.  На индикаторе “Цена” высвечивается “4”. Вводим значение максимального веса (30000). Нажимаем “Т“.
  5.  На индикаторе “Цена” загорается “5”. Набираем коэффициент дискретизации. Нажимаем “Т“. Чаще всего его можно варьировать от 1 до 10. По умолчанию, как правило – 10.
  6.  На индикаторе “Цена” загорается “6”. Набираем коэффициент дискретизации. Нажимаем “Т“. Чаще всего его можно варьировать от 1 до 10. По умолчанию, как правило – 10.
  7.  Это опция записи калибровок. Все индикаторы по нулям. Калибровки записаны.

ВТОРОЙ ВАРИАНТ

  1. Установить калибровочный вес, составляющий 1/3 от НПВ. Для весов с НПВ=300 кг это 100кг. 
  2. Нажать «Тара». В окне общей стоимости появится «0». 
  3. Ввести калибровочный вес в граммах (для 100кг это 10000, а не 100000!) и нажать «ТАРА». 
  4. Ввести с клавиатуры максимальный вес в граммах. Вот тут нужно ввести 300000. На дисплее видно только 30000. Тем не менее, нужно нажать на ноль 5 раз. При этом, запятая на дисплее массы будет отделять два разряда справа. Нажать кнопку «Тара». 
  5. Теперь нужно ввести желаемый размер деления от 2 до 10. Таким образом установится желаемая точность взвешивания. Снова нажать кнопку «Тара». На дисплее веса должен отобразиться калибровочный вес (100.00 кг). Это значит, что калибровка успешно завершена. Необходимо разгрузить весы, выключить, снова их включить и проверить правильность показаний весов. 

ТРЕТИЙ ВАРИАНТ

     Он подходит для калибровки весов на 1, 2, 3 тонны таких производителей как SPRINT, Мехэлектрон, МИДЛ и Romitech. С учетом того, что набор микросхем этих весов совпадает с микросхемами весов SIBS и BLES, возможно подойдут и к ним.

 Калибровка весов НПВ = 1 000 кг.

  1. Включить весы.
  2. Ввести код «3658» – «Т», набрать «1» – «Т». 
  3. Установить на платформу калибровочный груз (500 кг) – «Т». 
  4. Ввести значение массы калибровочного груза «5000» – «Т». 
  5. Ввести значение НПВ «10000» – «Т».  
  6. Ввести количество знаков после запятой в значении массы «1» – «Т».
  7. Ввести значение дискретности  «5» – «Т».

Калибровка весов НПВ = 2 000 кг.

  • Включить весы.
  • Ввести код «3658» – «Т», набрать «1» – «Т». 
  • Установить на платформу калибровочный груз (1 000 кг) – «Т». 
  • Ввести значение массы калибровочного груза «1000» – «Т». 
  • Ввести значение НПВ «2000» – «Т».  
  • Ввести количество знаков после запятой в значении массы «0» – «Т».
  • Ввести значение дискретности  «1» – «Т».

Калибровка весов НПВ = 3 000 кг.

  • Включить весы.
  • Ввести код «3658» – «Т», набрать «1» – «Т». 
  • Установить на платформу калибровочный груз (1 000 кг) – «Т». 
  • Ввести значение массы калибровочного груза «1000» – «Т». 
  • Ввести значение НПВ «3000» – «Т».  
  • Ввести количество знаков после запятой в значении массы «0» – «Т».
  • Ввести значение дискретности  «1» – «Т».

Источник: http://cto34.ru/index.php/stati/22

Анализатор свиста на Cortex-M4 либо включение нагрузки по свистку

Анализатор свиста на Cortex-M4 либо включение нагрузки по свистку

Как говорится, лучше один раз узреть, чем 100 раз услышать:

Почему этот проект и конкретно на данный момент?

Обычно, я всегда обдумываю проект перед поиском компонент. Для проекта the whistled (анализатор свиста), все пошло по-другому.

Несколько месяцев вспять, когда был приобретен микроконтроллер Cortex M4 с 32-выводами, у меня было огромное количество мыслях, и проект анализатора свиста был какой-то из них.

Как упоминалось в видеоклипе, данный маленький микроконтроллер Kinetis K10 может делать около 80 [q15 2048 балов] стремительных преобразований Фурье (FFT) за секунду и еще оставляет юзеру дополнительное процессорное время для пуска собственных алгоритмов.

Это разъясняется тем, что микроконтроллер Cortex M4 имеет набор инструкций для цифровой обработки сигналов (DSP), который в особенности подходящ для обработки данных, также поэтому, что библиотека ARM CMSIS предоставляет нам уже оптимизированный код для выполнения более сложных функций, таких как резвое преобразование Фурье. Так как все предварительные работы выполнены, я сумел сфокусироваться на расчете фильтра и алгоритмов по распознаванию свиста.

На это ушло много времени и потребовалось огромное количество тестовых процедур.

Спецификация и схемные решения

Итак, принципная схема:

Видите ли, схемы состоят из достаточно обычных и малогабаритных компонент.

На их показаны: — Несколько ферритовых катушек (L1/L2/L3) для фильтрации паразитных помех, которые могут находиться в системе либо появляться при срабатывании транзистора Q2 — Р-канальный МОП-транзистор (Q1) для защиты соединений от оборотной полярности (с каждым может случиться) — Стандартный линейный преобразователь LDO (U1) на 3.3 В — Основной микроконтроллер Cortex M4 (U3) — Mosfet драйвер (U4) вкупе с N-канальным МОП-транзистором (Q2) позволяют выполнить правильное диммирование (изменение уровня яркости) при огромных нагрузках

— Микрофонный усилитель с автоматической регулировкой усиления (AGC) (U2), характеристики которого достаточно тяжело установить.

Все дорожки на печатной плате, к которым можно прикоснуться, имеют защиту от электростатического разряда, а конкретно: источник электропитания и сток N-канального МОП-транзистора, так как все другие части печатной платы покрыты прозрачной термоусадочной трубкой. Для собственного проекта я желал иметь защиту от дурачины (без обид). Наибольшее преимущество микроконтроллера Kinetis K10 состоит в том, что он имеет 16-битный таймер с ШИМ-выходами, что в итоге приводит к широкому спектру диммирования.

Платформа позволяет использовать напряжение в спектре от 4.5 В до 18 В, с наибольшим током 5 A на входах.

Вы также сможете управлять нагрузкой мощностью до 90 Ватт при помощи данного устройства размером всего только 55×13 мм!
И естественно, на плате располагаются контактные площадки для поочередного отладочного порта SWD, который употребляется для загрузки вашей программки.

Список компонент

Таблица применяемых компонент и их цена показана ниже…

Перечень компонент не очень дешевенький, так как существует несколько вариантов выполнения: — Желание иметь различное входное напряжение привело к выбору более дорогостоящих компонент — Добавлены дополнительные фильтры (ферриты) — Для соединений выбрана клеммная колодка — Выбрано устройство для защиты от оборотной полярности — Выбраны транзисторы с низким сопротивлением Rds (сопротивление вполне открытого транзистора) для предотвращения перегрева печатной платы.

Я думаю, что это безупречная цена и платы будут работать при всех вероятных ситуациях.

Интегральная схема

Видите ли, все составляющие умещаются на данной малогабаритной плате. 1-ые макеты было тяжело спаять, так как выводы MAX9814 имеют шаг 0.4 мм.

Для защиты от электростатического разряда употребляется термоусадочная трубка, но она не перекрывает микрофон. На нижнем слое я установил замыкающие цепи через землю меж микроконтроллером/аналоговыми компонентами и силовыми цепями схемы, чтоб при усилении звука не происходило возбуждения из-за наведенных помех при переключении.

Конечная толщина медного покрытия составляет 60 мкм, что приводит к увеличению температуры на 7 градусов при токе 5 А для дорожек, по которым протекает высочайший ток.

Удобство использования

Как уже упоминалось, плата имеет незакрытые аппаратные составляющие и 4 контактные площадки для подключения отладочного порта SWD (3.3 В / 0 В / clock (синхроимпульс) / data (данные)):

Так что, если у вас есть некие необыкновенные идеи для данной платформы, дайте волю собственной фантазии.
Массивные вычислительные способности микроконтроллера Cortex M4 дадут возможность сделать намного больше, а не просто распознать свист. Я просто уверен, что огромное количество таких применений могут даже «подсветить» вечеринку.

Вы также можете использовать «последовательность скрытых звуков» для открытия дверей либо сейфов.

Файлы

Ниже размещается все, что нужно для проигрывания данного проекта.
Проект имеет открытую аппаратную платформу. Также я предоставляю начальный код, кроме моих алгоритмов, так как на неких сайтах могут показаться плохие копии данного изделия.

Схемы достаточно обыкновенные, потому вы просто можете создать интегральную схему при помощи CAD программного обеспечения.
Когда вы будете работать над программным кодом, то все что вам необходимо, так это запустить ваши методы с переменной working_buffer в функции run_recognition_algo в конце кода main. c

Метод

Благодаря большенному количеству приобретенных комментариев, я бы желал незначительно объяснить общую структуру текущего используемого метода. Я сделал рабочий метод, но убежден, что кто-либо сумеет сделать его намного лучше.

Сделанный метод подходящ только для данной платформы, и что много принципиально, для текущей реализации (два поочередных свиста для включения/выключения). Потому я не уверен, что метод будет полезен для тех, кто желает собрать платформу по-быстрому.

Если вы по сути желаете сделать метод таким же способом как и я, тогда прочтите последующие советы: — Обусловьте два поочередных пиковых значения в резвом преобразовании Фурье при разных частотах. — Проверьте ширину данных пиковых значений.

— Зависимо от того, как вы свистите, проконтролируйте отклонение частоты первого пикового значения. — Проверьте выделение сигнала меж высотой пикового значения и близкорасположенных пиковых значений.

— Сделайте одно либо два стремительных преобразований Фурье без учета пиковых значений, предположив, что ваш свист непрерывный, хотя практически таким не является. — Разрешите только один частотный спектр свиста (с 8 по 46 в текущем методе). Сделанный метод основывается на неверном распознавании сигналов (неверное определение) и неверном не распознавании сигналов (без определения, когда вы свистите), так как люди свистят по-разному.

Потому вам будет легче написать собственный свой код для свиста, чем быть таким же терпеливым, как я.

Заключение

Я вполне уверен в данном проекте. Потому я предпринял попытку и решил задачку без помощи других.

Данное решение было одобрено со стороны многих знакомых и коллег, которые отыскали проект анализатора свиста очень комфортным в использовании для автоматизации их домов.

Если данный проект будет удачным, я планирую сделать новейшую линейку товаров, которые будут использовать данный механизм работы.

Потому если вы заинтересовались данным проектом, я буду рад, если вы загляните на мою страницу tindie page.

— сноска для собранного устройства на печатной плате — сноска для собранного устройства на печатной плате + блок питания US AC/DC — сноска для собранного устройства на печатной плате + блок питания EU AC/DC — сноска для собранного устройства на печатной плате + блок питания US AC/DC + светодиодная лента

​- сноска для собранного устройства на печатной плате + блок питания EU AC/DC + светодиодная лента

Скачать даташиты

Перечень радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот U1 Линейный преобразовательMIC5235-3.

31 Поиск в win-sourceВ блокнотU2 Микрофонный усилительMAX98141 Поиск в win-sourceВ блокнотU3 МикроконтроллерMK10DX128VFM51 Поиск в win-sourceВ блокнотU4 ДрайверFAN3111ESX1 Поиск в win-sourceВ блокнотQ1 MOSFET-транзистор BSZ086P03NS3E G 1 Поиск в win-sourceВ блокнотQ2 MOSFET-транзистор BSZ036NE2LS 1 Поиск в win-sourceВ блокнотC1, C6 Конденсатор2.

2 мкФ2 Поиск в win-sourceВ блокнотC2, C3, C11 Конденсатор1 мкФ3 Поиск в win-sourceВ блокнотC4, C5 Конденсатор0.47 мкФ2 Поиск в win-sourceВ блокнотC7-C10 Конденсатор0.1 мкФ4 Поиск в win-sourceВ блокнотC12 Конденсатор22 мкФ1 Поиск в win-sourceВ блокнотR1, R2 Резистор 100 Ом 2 Поиск в win-sourceВ блокнотR3 Резистор 2.

2 кОм 1 Поиск в win-sourceВ блокнотMK1 МикрофонCMC-5042PF-AC1 Поиск в win-sourceВ блокнотD1 Подавитель статического зарядаPESD0603-2401 Поиск в win-sourceВ блокнотL1 ДросельHI0805R800R-101 Поиск в win-sourceВ блокнотL2, L3 ДросельMPZ1608S221A2 Поиск в win-sourceВ блокнотJ1 РазьёмPJ-002AH1 Поиск в win-sourceВ блокнотJ4-J8 КлеммникиOSTTC0201625 Поиск в win-sourceВ блокнотДобавить все

Скачать перечень частей (PDF)

code_template. rar (6 Кб) Manual. pdf (1063 Кб) whiste_gerbers. rar (15 Кб) whistle_schematics. pdf (22 Кб)
FFT Микроконтроллер ARM Freescale

Источник: http://bloggoda.ru/2017/10/17/analizator-svista-na-cortex-m4-libo-vklyuchenie-nagruzki-po-svistku/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}