Добрый день. Есть задача - считать обороты бесколлекторного мотора. Обороты до 3,5 тыс. В наличии имею энкодер магнитный AS5048A , подключенный по SPI. Но толи в коде косячу, толи этот энкодер не может считать столько Общий смысл как я считаю : 0) в переменную angle считываю угол в текущий момент времени 1) переменная ug, в которую считаю насколько повернулся мотор 2)переменная ob делаю +1 как только ug стал больше 360. Но на маленьких оборотах все ок, чуть даешь выше, сразу не успевает считать, недосчитывает Код (Text): if (ug>360) {ug=0; ob=ob+1} angle = получаю угол; delay(10); angle2 = получаю новый угол; razn=angle2-angle; ug=ug+razn; Serial.println(ob); Вопрос - может я в корне неправильно мыслю и обороты нужно считать по другому? или не подходит датчик? Смотрел еще на такой http://amperka.ru/product/miniq-wheel-encoder , и сделать на мотор диск с прорезями Но тоже смущает что на быстрых оборотах на входе будет тупо ноль или единица Или мб есть быстрые оптические датчики?
а как тогда правильно сделать? вывести в монитор показания ведь надо, чтобы сравнить факт с реальностью
Да даже без этого Serial.print не очень то быстро выполняется. Не нужно отладкой мешать процессу измерения.
Магнитный наверное не успевает размагнититься при таких оборотах или намагнититься. ) Попробуйте с щелевым, мне кажется он быстрее.
Издеваетесь? Кто в датчики ферромагнетик будет ставить? По даташиту частота отсчетов этого датчика 11~12кГц.
3500rpm это 58.3(3)Гц, при 12кГц дискретизации датчик должен эту центрифугу с точностью 1.75 градуса.
Я не знаю почему в таком случае не работают магнитные датчики, но вот у оптических частота срабатывания два килогерца, то есть до 120 000 rpm должны отслеживать. Попробовать то можно?
Я почти на 100% уверен что проблему автору создает отладочный Serial.prinrtln. Он довольно медленный и к тому же синхронный. Сам об это спотыкался. Тем более что он выводит число оборотов каждый оборот! Лучше выводить каждые 500 оборотов. То есть примерно каждые 8.5 секунд. Как-то так: Код (Text): if ((ob % 500) == 0) Serial.println(ob);
Попробуй вот эту lib, проверял на обычном(контактном) энкодере работает отлично. Обороты не пробывал считать.
На таких оборотах можно уже не угол смотреть, а обороты считать. Подключите по PWM и считайте импульсы