Измерьте положение шестерни с помощью ардуино
Итак, мой план состоит в том, чтобы иметь возможность вращать двигатель с шестерней на конце на определенное количество зубьев шестерни, а затем останавливать его. Я не могу найти техническое описание двигателя, но он очень быстрый, щеточный и работает на постоянном токе. Я думал поставить что-то вроде здесь и показывает положения коллектора, эмиттера, анода и катода.
@Vosem Media, 👍0
Обсуждение1 ответ
Лучший ответ:
Если мне не изменяет память, тактовая частота Arduino Uno составляет 16 МГц. Некоторые из них быстрее, некоторые намного быстрее, а некоторые медленнее.
Большинство инструкций на ассемблере занимают около 1–3 тактов. Некоторые берут больше. Предполагая, что в среднем 3 такта на инструкцию, это соответствует выполнению более 5 миллионов инструкций в секунду.
Поэтому, если ваш двигатель не приближается к сверхзвуковой скорости, Arduino должна быть в состоянии «не отставать» от датчика вашего двигателя в вашей функции loop()
.
Если вы выполняете несколько других действий в своем цикле, вы можете рассмотреть возможность использования прерывания для запуска некоторого кода, когда мотор «активирует» датчик. В этом случае вам вряд ли вообще придется беспокоиться о скорости процессора. При использовании прерывания вам не нужно беспокоиться об опросе состояния вашего датчика внутри функции loop()
.
Всегда помните, что код в процедуре обслуживания прерывания должен быть как можно короче и быстрее. В этом случае, вероятно, вы просто выключите двигатель и вернетесь, когда сработает прерывание.
Сказав все это, вам все равно придется проделать некоторую работу, чтобы получить наиболее подходящую реализацию, поскольку только вы знаете, какие еще вещи вам нужно принять во внимание в это время.
Еще одна вещь, которую следует отметить, это то, что одна инструкция высокого уровня обычно соответствует более чем одной инструкции ассемблера. Даже такой простой оператор, как int x = 1000;
, будет более чем одной ассемблерной инструкцией и, таким образом, займет более 1 такта. Однако, если память не изменяет, отдельные инструкции, сгенерированные для выполнения x = 1000
, займут всего один такт часов.
Другие будут варьировать количество инструкций, которые генерируются для их выполнения. Например
float х = 1,0;
х = х + 2,0;
скорее всего, для выполнения потребуется больше инструкций, чем для целочисленного аналога:
интервал х = 1;
х = х + 2
Надеюсь, это поможет и позволит вам попробовать управлять двигателем через Arduino. Если нет, вы всегда можете задать более конкретный вопрос позже.
Большое спасибо, это невероятно полезно. Мне придется попытаться сжать мой код. Вы знаете, уловит ли этот датчик передачу, даже если она не окрашена в белый цвет? Спасибо, @Vosem Media
Извините, я не знаком с этим конкретным датчиком. Я предлагаю внимательно изучить лист данных на веб-странице; Запрос у производителя; И/или разместить новый вопрос здесь или на сайте [Электроника](https://electronics.stackexchange.com/)., @GMc
Ладно, сначала посмотрю даташит. Спасибо, @Vosem Media
- Использование VS1838B с Arduino
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
- Как увеличить расстояние обнаружения на датчике обхода препятствий Arduino KY-032?
- Ошибка "collect2.exe: error: ld returned 1 exit status"
- Как подключить ИК-передатчик и модуль приемника?
- Tone() конфликтует с библиотекой IRremote (множественное определение `__vector_7')
- Как остановить вращение сервопривода?
- ESP32 ИК-пульт
Я знаю, это совсем бесполезно, но я не смог найти техпаспорт, и я хотел сказать, что это происходит слишком быстро, чтобы увидеть, @Vosem Media
вы, конечно, можете попробовать этот датчик .... покрасить один из зубьев шестерни в белый цвет, @jsotola
Я уверен, что Arduino достаточно быстр, чтобы считывать частоту шестерни., @Juraj
Вы можете попробовать использовать энкодер, прикрепленный к валу двигателя, таким образом, вы можете измерить количество шагов за оборот и, таким образом, вы можете рассчитать, когда и как вы поворачиваете двигатель. Или просто поставить шаговый двигатель. А для беспокойства о том, что Arduino недостаточно быстр, вы можете использовать очень быстрые прерывания., @Coder_fox
к сожалению, для применения в страйкболе он должен быть очень компактным и располагаться под снаряжением, поэтому я подумал, что использование какого-либо ИК-датчика будет уместным., @Vosem Media