Анализ причин случайной ошибки 20 мкм при повторном позиционировании замкнутого движения решетчатого энкодера

  • Используемый шаг решетки составляет 20 мкм, а погрешность составляет всего один шаг решетки. Либо у линейки есть проблемы, либо расчет неверен. Повторное перемещение в одно и то же положение не приводит к ошибке каждый раз, это, очевидно, ошибка расчета.
  • При возникновении ошибки считайте данные sincos растрового сигнала, используемые для расчета в это время, и используйте график Matlab для выбора трех изображений относительно общих данных об ошибках.
    Вставьте описание изображения сюда
    Вставьте описание изображения сюда
    Вставьте описание изображения сюда
  • Из рисунков 1 и 3 видно, что в данных sincos, участвующих в вычислении, есть битые пиксели.Похоже, что если данные отсутствуют, появится неправильная графика в красном поле.
  • Так в чем же причина потери данных?
    Во-первых, поясните структуру всей системы и способы обмена данными по каждой ссылке.
    Мой обмен системными данными показан ниже. Контроллер платформы позиционирования имеет 3 канала: XYZ, X на рисунке представляет канал X, а канал YZ тот же. Часть X является подчиненной. Это подчиненное устройство относительно занято.У него есть 2 SPI, 1 UART и три аспекта для передачи данных.
    Вставьте описание изображения сюда

Анализ проблемы делится на два направления: одно - аппаратное, второе - программное.
Аппаратный аспект
1. Разберите линии передачи данных в системе, какие есть шины передачи и как они проложены на плате. Выходная шина передачи в моей системе включает в себя USB, 485, SPI, UART. USB используется как виртуальный последовательный порт. Теоретически скорость USB2.0 составляет 12 Мбит / с. На самом деле это не так быстро, но также намного быстрее, чем обычные последовательные порты. Скорость 485 составляет 2250000 бит / с, что тоже очень быстро. Оба они очень близки к дороге X. В первом раунде предполагалось, что это помехи от USB, 485. Обрежьте дорожки на печатной плате, чтобы отсоединить их, и используйте гибкие провода, чтобы превратить их в соединение витой пары, удерживая их подальше от X-пути. Тест показал, что проблема осталась, это не их проблема.
2. Рядом с дорогой X есть индуктор для высоковольтного модуля, высокое напряжение около 100В. Я поместил щуп осциллографа вокруг катушки индуктивности и обнаружил, что помехи, связанные с индуктивностью, также могут быть обнаружены на X-пути. Второе предположение - это влияние индуктивности. Я накрыл индуктивность небольшой железной коробкой, и никаких помех на дороге X обнаружено не было. Проблема осталась той же после повторного теста. Это была не проблема индуктивности.
3. В третьем раунде предполагается, что скорость передачи и приема данных каждого канала слишком высока, особенно частота, используемая SPI, составляет 9 МГц, а затем они уменьшаются, и проблема остается.
Что касается программного обеспечения, то
эта статья долгое время находилась в черновике, поэтому я не буду анализировать ее, а просто перейду к ответу: это вопрос, присланный uart.
Красный - форма волны uart
1. Ширина формы волны полного кадра на рисунке обозначена как «Waveform 3», но во время процесса отправки сначала будет отправлен полный кадр, а затем отправлены остальные через некоторое время, как показано на рисунке «Wave». 1 "" Waveform "2", код, отправляемый последовательным портом в коде, выглядит следующим образом: USART1->DR = (数据) & 0xFF; while(((USART1->SR&0X40)==0)&&count--);
чтобы предотвратить попадание последовательного порта в бесконечный цикл, он добавляется к while, &&count--и значение "count" будет выскакивает из цикла, когда значение достигается, но заданное значение счетчика слишком велико, то есть 0x1FFF; picture Нейтральное положение, которое было задержано, почти равно продолжительности этого «0x1FFF».
2. Какой вред принесет этот большой нейтраль?
а) Этот последовательный порт отправляет данные о смещении. На следующем уровне эти данные смещения будут использоваться для управления pid. Загрузка Из-за этой "большой нейтральной" проблемы pid не может получать свежие данные в течение длительного времени, поэтому движение неправильное;
б) Скорость движения может быть уменьшена, так что данные смещения, отправляемые через последовательный порт, могут в основном представлять текущий положение. Расчет pid не ошибется. Но если этот последовательный порт большой нейтраль решен, скорость движения будет значительно улучшена.
Я до сих пор не понимаю, почему последовательный порт отправляется в бесконечный цикл while. Если он не учитывается, он должен быть в бесконечном цикле.
Просто напишите это так. В нем много деталей, а некоторые места неясны. В любом случае проблема решена, и скорость передвижения значительно улучшена. Если вы понимаете оставшуюся проблему последовательного порта, вы можете оставить сообщение, чтобы упомянуть об этом

рекомендация

отblog.csdn.net/aqwtyyh/article/details/108818137