Чтение двух квадратурных кодировщиков с помощью одного ардуино
В летние каникулы я работаю над автономным роботом. В настоящее время я работаю над запуском двигателей моего робота в замкнутом цикле. Для этого нужно соединить два квадратурных кодера двигателей с 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
@Masood Salik, 👍2
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
- Почему светодиод автоматически выключается примерно через 18 секунд?
- Сможет ли Arduino Uno считывать 3-кратные инкрементальные энкодеры?
- Кодировщик колес Arduino DUE
- Счетчик времени установки
- Arduino Due vs Mega 2560
- Точность часов времени Arduino
- Регистры ввода-вывода SAM3X8E (Arduino Due)
Я использую 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