Во-первых, быстрое отступление. У вас, кажется, есть небольшое недопонимание относительно того, как работают сервоприводы. Сервоприводы не контролируются ШИМ, и они не знают или не заботятся о том, что вы посылаете импульсы с частотой 49 Гц. Они не знают, что пульс составляет некоторый процент от некоторого произвольного периода. Сервоприводу наплевать, каково время между импульсами. Я говорю это потому, что вы, кажется, необычно сосредоточены на вещах, которые на самом деле не имеют значения.
Сервоприводы даже не знают и не заботятся о высоком или низком напряжении в данный момент времени. Их волнует только одно: время между нарастающим и падающим фронтом.
Сервоуправление контролируется путем обнаружения нарастающего фронта напряжения и измерения времени до появления падающего фронта. Время действия обычно составляет от 1,0 до 2,0 мс, но оно может варьироваться от сервопривода к сервоприводу.
Вы можете управлять им на 1 Гц, 10 Гц, 50 Гц, 100 Гц. Большинство будет реагировать на еще более высокие частоты пульса, но опять же, это переменная. Я пытаюсь сказать, что частота, коэффициент заполнения, длительность между импульсами не могут быть менее значимыми для вашей проблемы, а именно то, что сервопривод не реагирует, когда вы ожидаете этого.
Единственное, что имеет отношение к делу - это границы вашего пульса, на которые вы не обращали никакого внимания. Если вы хотите понять это, пожалуйста, начните с того, что вы видите, что имеет значение, сделайте снимки ваших краев импульсов, и тому подобное. Вы не сделали ничего полезного на этих снимках экрана, поэтому, вероятно, здесь нет проблем или различий. Есть много проблем или различий, которые никогда не будут видны с тем, что вы измерили.
Что я вижу, так это то, что захват нерабочей последовательности импульсов заметно грязнее, как импульса, так и земли, чем любой другой. Что странно, так как он должен вызывать ту же функцию, что и остальные. Почему это так шумно?
Что еще более важно, в нерабочем захвате посмотрите на «время падения». 809μs? Ваш осциллограф считает, что он видит время падения продолжительностью 0,8 мс. Это плохо. Понятно, что это неверно, но факт остается фактом, вот что он измеряет.
Это классический признак грязного края. Думаю об этом. Если этот импульс вводит в заблуждение ваш высокопроизводительный тестовый прибор, которым является ваш осциллограф, то, что он видит смехотворно длинный край или время падения, или, возможно, настолько грязный, что просто не может правильно определить спадающий фронт все время (или кто знает), тогда Какова вероятность того, что у этого бедного маленького сервопривода за 8 долларов появится достойный спад?
Если сервопривод не получает действительный импульс (например, если падающий фронт занимает слишком много времени, он слишком грязный или пропущен) в допустимом диапазоне импульсов, а сервоприводы рассчитывают по краям, которые могут иметь или не иметь ничего для делать с тем, что вы считаете фронтами импульсов, тогда он реагирует так же, как если бы он был выключен.
Другими словами, он не только не двигается, но и не сопротивляется движению вала. Это будет просто мягко, именно так, как вы видите.
Теперь возникает вопрос .... почему вызов servo.write влияет на качество края?
Вы сказали, что клон. Как этот?
Эти клоны, в частности, склонны вести себя хаотично из-за невероятно плохой развязки. На каждом выводе питания должны быть развязывающие конденсаторы, максимально приближенные к mega2560. И на самом деле Arduino, действительно, есть. Однако по этим клонам они слишком далеки или, возможно, отсутствуют, трудно сказать. Из доски видно, что она не будет вести себя надежно, это главное.
Так в чем же разница?
Когда вы вызываете servo.write, он толкает стек выше, чем если вы вызываете writeMicroseconds. Учитывая 3-байтовый указатель стека mega2560 (17 бит), ему приходится перебрасывать кучу критических битов, которых нет при вызове writemicroseconds. Я знаю, что это кажется маловероятной разницей, но я испытал свою долю плохо отсоединенных микроконтроллеров, и, в частности, atmegas, похоже, демонстрирует странное поведение, особенно при использовании таймеров и / или толкании или выталкивании стека. Нечто подобное произошло со мной, только стек был поврежден, когда я пытался управлять светодиодами с помощью ШИМ, но если я поместил все в линию, не вставляя стек, это сработало. Плохая развязка была в конечном итоге проблемой.
Я полностью ожидал бы, что плохая развязка сможет по причинам, известным этому atmega2560 и никому другому, оказывать пагубное влияние на качество фронта этого импульса, но только когда вы толкаете стек прямо перед этим. Этот сервопривод просто не в состоянии справиться с тем, как стираются эти края, поэтому в этом случае он не видит действительных импульсов. Другие сервоприводы, очевидно, справляются с этим.
Разъединяющие вещи всегда такие причудливые и гиперспецифичные. Вот почему разделение так важно. Храните кошмарный ад проблем, из-за которых отсутствие емкости может отвлечь вас от хороших толстых керамических колпачков и как можно ближе к чипу, насколько это физически возможно.