mraaf Ответов: 0

Как создать набор квадратурных импульсов кодера из пары цифровых выходов


Здравствуйте Эксперты,
Я пытаюсь создать набор квадратурных выходных сигналов, которые сдвигаются на 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

Привет,
Есть идеи или советы?

Спасибо

0 Ответов