Чтение двух квадратурных кодировщиков с помощью одного ардуино

В летние каникулы я работаю над автономным роботом. В настоящее время я работаю над запуском двигателей моего робота в замкнутом цикле. Для этого нужно соединить два квадратурных кодера двигателей с Arduino из того, что у меня есть. Мой моторный энкодер имеет 3200 ребер на оборот. Я прочитал данные Atmel SAM3x8E и успешно протестировал один кодер в Arduino IDE. Похоже, что TIOA0 и TIOBO используются для считывания PHA и PHB одного кодера, которые соответствуют контактам 2 и 13 Arduino Due. Я не использую индексный pin (TIOB1).

Кажется, что я могу взаимодействовать только с 1 квадратурой .Есть ли у них какой-нибудь способ использовать квадратурный декодер для чтения 2-х кодеров вместо одного. Как я уже говорил ранее, я не использую индексный контакт. Итак, возможно, есть способ декодировать кодеры с помощью трех доступных контактов, как показано на приведенной выше диаграмме. Я не хочу использовать прерывания для выполнения этой работы.

Вот ссылка на руководство SAM3x: http://www.atmel.com/Images/Atmel-11057-32-bit-Cortex-M3-Microcontroller-SAM3X-SAM3A_Datasheet.pdf

Ссылка на двигатель, который я использую: www.pololu.com/product/2824

, 👍2


1 ответ


Лучший ответ:

1

Согласно Квадратурному декодеру QDEC для SAM3/4 Devices_ApplicationNote_AT11483 и ссылочному листу excel с устройством на отсутствие каналов QDEC, кажется, что их два. Однако в СВЯЗИ с этим почти ни одно из интересных устройств не подключено к заголовкам полностью (Extmem, SD-интерфейс,...).

Однако TIOA6 и TIOB6 должны быть на контактах 5 и 4

Конфигурация pin-контактов должна быть примерно такой:

  PIO_Configure(PIOC, PIO_PERIPH_B, PIO_PC25B_TIOA6, PIO_DEFAULT);
  PIO_Configure(PIOC, PIO_PERIPH_B, PIO_PC26B_TIOB6, PIO_DEFAULT);

А TC0-это почти то же самое, что и TC2, так что просто скопируйте и вставьте и измените TC0 на TC2

Полная конфигурация:

  REG_PMC_PCER0 = PMC_PCER0_PID27 | PMC_PCER0_PID28 | PMC_PCER0_PID29; 
  REG_PMC_PCER1 = PMC_PCER1_PID33 | PMC_PCER1_PID34 | PMC_PCER1_PID35;

  PIO_Configure(PIOB, PIO_PERIPH_B, PIO_PB25B_TIOA0, PIO_DEFAULT); // arduino pin 2
  PIO_Configure(PIOB, PIO_PERIPH_B, PIO_PB27B_TIOB0, PIO_DEFAULT); // arduino pin 13

  REG_TC0_CMR2  = TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_TOGGLE | TC_CMR_WAVSEL_UP_RC;
  REG_TC0_RC2   = F_CPU / 128 / 1;
  REG_TC0_CMR0  = TC_CMR_ABETRG | TC_CMR_LDRA_EDGE | TC_CMR_LDRB_EDGE | TC_CMR_ETRGEDG_EDGE | TC_CMR_CPCTRG;
  REG_TC0_BMR   = TC_BMR_QDEN | TC_BMR_SPEEDEN /*| TC_BMR_EDGPHA*/;
  REG_TC0_CCR0  = TC_CCR_CLKEN | TC_CCR_SWTRG;
  REG_TC0_CCR1  = TC_CCR_CLKEN | TC_CCR_SWTRG;
  REG_TC0_CCR2  = TC_CCR_CLKEN | TC_CCR_SWTRG;

  PIO_Configure(PIOC, PIO_PERIPH_B, PIO_PC25B_TIOA6, PIO_DEFAULT); // arduino pin 5
  PIO_Configure(PIOC, PIO_PERIPH_B, PIO_PC26B_TIOB6, PIO_DEFAULT); // arduino pin 4

  REG_TC2_CMR2  = TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_TOGGLE | TC_CMR_WAVSEL_UP_RC;
  REG_TC2_RC2   = F_CPU / 128 / 10;
  REG_TC2_CMR0  = TC_CMR_ABETRG | TC_CMR_LDRA_EDGE | TC_CMR_LDRB_EDGE | TC_CMR_ETRGEDG_EDGE | TC_CMR_CPCTRG;
  REG_TC2_BMR   = TC_BMR_QDEN | TC_BMR_POSEN /*| TC_BMR_EDGPHA*/;
  REG_TC2_CCR0  = TC_CCR_CLKEN | TC_CCR_SWTRG;
  REG_TC2_CCR1  = TC_CCR_CLKEN | TC_CCR_SWTRG;
  REG_TC2_CCR2  = TC_CCR_CLKEN | TC_CCR_SWTRG;
,

Я использую Arduino IDE для программирования. Согласно **Квадратурный декодер QDEC для SAM3/4 Devices_ApplicationNote_AT11483** Pg 16 я должен сначала настроить ВГД. Как я могу настроить TIOA6 и TIOB6 в качестве входных контактов QDEC?, @Masood Salik

@KIVV Пожалуйста, смотрите выше комментарий, @Masood Salik

@MasoodSalik Как именно это делается прямо сейчас для TC0? Какая-то библиотека или непосредственно в arduino? У вас есть код для этого? А также какая Arduino IDE - есть arduino.cc и arduino.org, @KIIV

Я опубликовал код в другом посте http://arduinoprosto.ru/q/28268/how-to-configure-2nd-quadrature-decoder-io-pins-in-arduino-ide, @Masood Salik

В настоящее время я использую Arduino IDE 1.6.10.(zip-файл скачать fromhttps://www.arduino.cc/en/Main/Software) После установки платы "Arduino SAM board (32 бит ARM Cortex M3). Все библиотеки DUE уже добавлены в него., @Masood Salik