Как создать набор квадратурных импульсов кодера из пары цифровых выходов
Здравствуйте Эксперты,
Я пытаюсь создать набор квадратурных выходных сигналов, которые сдвигаются на 90 градусов, манипулируя парой сигналов 0-5 вольт от устройства SDS, как показано ниже:
// Channel A ON canL2->SDSWriteAO(0x27C, 1, 0x13, 5); // 5 = 5V output // Channel A OFF canL2->SDSWriteAO(0x27C, 1, 0x13, 0); // 0 = 0V output // Channel B ON canL2->SDSWriteAO(0x27C, 2, 0x13, 5); // Channel B OFF canL2->SDSWriteAO(0x27C, 2, 0x13, 0);
Мне нужно достичь максимальной скорости 200 футов/м с вышеуказанными ресурсами.
Любая обратная связь высоко ценится.
Заранее спасибо,
мрааф
Что я уже пробовал:
// Speed control by manipulating OnTimer() timout int nTimout = static_cast<unsigned int>(1000/m_nSliderCtrl); // 0-200 ft/m SetTimer(1, nTimout, NULL); // Timer 1
DWORD dwInterval = static_cast<unsigned long>(nTimout/3); // calling OnTimer() for Timer 1 if(nIDEvent == 1) { // Encoder rotation Clockwise // at 0deg canL2->SDSWriteAO(0x27C, 1, 0x13, 5); // Channel A ON canL2->SDSWriteAO(0x27C, 2, 0x13, 0); // Channel B OFF Sleep(dwInterval); // shift duration // at 90deg canL2->SDSWriteAO(0x27C, 1, 0x13, 5); // Channel A ON canL2->SDSWriteAO(0x27C, 2, 0x13, 5); // Channel B ON Sleep(dwInterval); // at 180deg canL2->SDSWriteAO(0x27C, 1, 0x13, 0); // Channel A OFF canL2->SDSWriteAO(0x27C, 2, 0x13, 5); // Channel B ON Sleep(dwInterval); // at 270deg canL2->SDSWriteAO(0x27C, 1, 0x13, 0); // Channel A OFF canL2->SDSWriteAO(0x27C, 2, 0x13, 0); // Channel B OFF Sleep(dwInterval); }
Выход:
Выходное напряжение = 1,25 в
Стабилизированный выход 0-25Hz = 0-10 ft/m
Нестабильный выход 25-50Гц = 10-20 футов/м
Макс. выход при 50 Гц (20 мс)
То, что я обнаружил:
12,5 Гц = 5 футов/м -> стабильно
25,0 Гц = 10 футов/м -> стабильно
50,0 Гц = 20 футов/м -> неустойчиво, канал B иногда смещается вперед канала A (в результате вращение против часовой стрелки)
100,0 Гц = 40 футов/м -> недостижимо
Patrice T
Вы уверены, что речь идет о программировании?
mraaf
Да, я почти уверен, что мне нужно исправить свою кодировку
Patrice T
И вы показали свою кодировку ?
mraaf
Ну вот что я попробовал, я уверен, что последовательность создания цикла квадратуры а правильна (A ON, B OFF - >shift 90deg - > A ON, B ON - >shift 90deg - > A OFF, B ON - >shift 90deg - > A OFF, B OFF), но есть такие переменные, как время сдвига (Sleep() в данном случае), таймер цикла (OnTimer ()), возможно, потребуется исправить или неправильно манипулировать.
mraaf
Привет,
Есть идеи или советы?
Спасибо