1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/peng_zhihui-HelloWord-Keyboard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 05:43 ad84a42

Использование JLink, STLink и других подобных отладчиков для записи прошивки, я предусмотрел на печатной плате (PCB) и корпусе разъём SWD для отладки. Для тех, у кого нет опыта разработки аппаратного обеспечения, позже я также выпущу загрузчик, который позволит обновлять прошивку через USB-порт.

О выборе электродвигателя?

Я использую электродвигатель 2204, бывший в употреблении. Однако в настоящее время его не так просто найти, поэтому можно выбрать аналогичный бесщёточный электродвигатель с подходящими размерами. Что касается параметров, то значение KV должно быть несколько ниже, примерно 200. На роторе электродвигателя необходимо вручную установить радиально намагниченный постоянный магнит для использования с энкодером. При использовании электродвигателей разных моделей может потребоваться настройка параметров FOC.

3. Архитектура программного обеспечения

Как сопоставить кнопки клавиатуры с их функциями?

Чтобы полностью использовать преимущества схемы сканирования сдвигового регистра, описанной в видео, прошивка отделяет схему разводки печатной платы от порядка сканирования кнопок. Сопоставление выполняется программно. То есть порядок соединения кнопок на печатной плате может быть любым, а после завершения разводки порядок сканирования можно переназначить в файле hw_keyboard.h в массиве keyMap[KEYMAP_NUM][IO_NUMBER].

Это двумерный массив, представляющий собой сопоставление клавиш KEYMAP_NUM слоёв с IO_NUMBER кнопками (то есть количеством кнопок на вашей клавиатуре); слой 0 является особым, он отвечает за сопоставление раскладки клавиатуры со стандартной раскладкой, последующие слои 1, 2, 3, 4... являются настраиваемыми и отвечают за сопоставление стандартных раскладок с любыми другими раскладками.

Пример:

Рассмотрим кнопку, на которую указывает стрелка на принципиальной схеме. Эта кнопка может находиться в любом месте печатной платы, но мы видим, что она находится на 10-м месте слева направо (согласно соединению 74HC165, то есть порядку сканирования сдвига). Поэтому её номер — 9 (считая от 0).

Если мы поместим эту кнопку на реальной печатной плате справа от Alt, то, как видно из кода в красном прямоугольнике на следующем рисунке, соответствующий элемент в первом слое сопоставления (стандартная раскладка) — это RIGHT_ALT, номер которого равен 76. Тогда в элементе 76 на нулевом слое сопоставления мы должны указать номер 9 (синий прямоугольник).

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

Таким образом, если вы хотите изменить раскладку клавиатуры, вам нужно только добавить или удалить несколько последовательно соединённых 74HC165 на принципиальной схеме, затем выполнить разводку на печатной плате и удалить или добавить некоторые числа в код сопоставления нулевого слоя (например, моя клавиатура имеет 83 клавиши).; последующие слои могут быть изменены аналогичным образом.

В коде функция keyboard.Remap используется для сопоставления различных слоёв, например, keyboard.Remap(2) — это использование второго слоя сопоставления.

Об алгоритме фильтрации сигналов от кнопок?

Прошивка использует независимую фильтрацию для каждой кнопки, но делает это очень эффективно (в конце концов, это 1 кГц сообщений, и каждое сообщение сканируется дважды, что означает необходимость выполнения 1000 * 2 * [количество кнопок] операций фильтрации каждую секунду).

Принцип работы довольно прост: причина дребезга кнопок заключается в том, что после нажатия они будут многократно переключаться между высоким и низким уровнями напряжения. Обычно это занимает несколько десятков микросекунд (обратите внимание, что это время стабилизации уровня напряжения, а не время срабатывания кнопки, которое может достигать нескольких миллисекунд из-за неопределённости времени контакта кнопки).

QMK предоставляет различные методы фильтрации в документации qmk_firmware/feature_debounce_type, включая Eager и Defer, симметричные и асимметричные и т. д.

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

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

Для прошивки клавиатуры Huanwen я использую симметричную задержку независимой фильтрации: каждая кнопка проверяется дважды. Если при первом обнаружении изменения кнопки оно подтверждается при повторной проверке через N микросекунд, то считается, что кнопка была нажата. Этот процесс использует эффективную обработку с помощью операции XOR, которая идеально подходит для буфера кнопок, поскольку он уже представляет собой сдвиговый регистр, где каждый бит представляет отдельную кнопку.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/peng_zhihui-HelloWord-Keyboard.git
git@api.gitlife.ru:oschina-mirror/peng_zhihui-HelloWord-Keyboard.git
oschina-mirror
peng_zhihui-HelloWord-Keyboard
peng_zhihui-HelloWord-Keyboard
main