войти в контекст Я делаю это: Привод шагового двигателя через изменение частоты импульсного ввода на драйвер (A4988) (Нет необходимости знать о функционировании этого для этого вопроса). Теперь и изменилась частота импульсов (они меняют частоту вращения двигателя). Вы должны знать, что для вала двигателя 1 полный оборот должен получить 200 импульсов (двигатель 1,8 ° градусов за шаг).CodeWarrior Получить значение переменной из события.c
Я получил двигатель и сделал его полный оборот за 1 секунду. Период = 0,005s
Чтобы запрограммировать это, я использую компонент: TimerUnit_LDD. С частотой 163840 Гц
В случае всего поворота 1, чтобы часто использовать эту функцию.
---- main.c
TU1_Enable (TU1_DeviceData); TU1_SetPeriodTicks (TU1_DeviceData, 410);
Параметр 410 по сравнению с периодом я хочу, как и посылает импульсы, запрограммированные путем изменения значения штифта принимать во внимание как высокая и низкий пульс, как это:
----- Events.c
TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData) { Step1_NegVal(); }
Период для серьезных формулировок 819.2, имея в виду вышеупомянутые серьезные аппроксимации 409,6 и 410 (наблюдаемый на частоте осциллографа 200 Гц (ок).
Уже введены в контексте проблема заключается в следующем:
---- main.c
TU1_Enable (TU1_DeviceData); // Enable the counter TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period
for (;;) { TU1_Enable (TU1_DeviceData); WAIT1_Waitms (1000); // Rotation time TU1_Enable (TU1_DeviceData); // Disable the counter }
С помощью этого кода является то, что я пытаюсь проверить, что частота расчет был правильным и что через одну секунду будет 1 оборот. Но то, что происходит, это то, что он дает вращение, но смещается немного больше. Я предполагаю, что это проходит через время выполнения, необходимое для каждой строки кода.
Что я хочу знать, как можно получить числовое значение переменной в событии? как я мог сделать что-то подобное.
---- main.c
TU1_Enable (TU1_DeviceData); // Initialize the counter TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period
for (;;) { for (;;) { if (GetValue (x) == 200) break; // GetValue (x) This function is what I want to achieve } WAIT1_Waitms (1000); }
----- Events.c
TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData)
{
Step1_NegVal();
x = x + 1;
}
GetValue (x) эта функция получит значение x, которое находится в Events.c, и определит количество импульсов для управления espefico.
Возьмите переменную и на нее влияет счетчик, и это достигает 200 (за 1 оборот за 1 секунду).
У этого была бы уверенность, что menera будет отправлено в одиночку и одиноко, ни больше, ни меньше, всего 200 импульсов.
Я требую, чтобы это было специфичным, поскольку я desarrolando программа для машины с ЧПУ и слишком важна точность является самой высокой.
Я надеюсь, вы понимаете, и я говорю на испанском, и это было переведено на Chrome
Запрограммированный на языке C, Freescale KL25Z, CodeWarrior, OPEN_SDA,
вау, CodeWarrior, является то, что до сих пор вокруг? Я помню, как его использовали в 1990 году, он не знал, что он все еще существует. –
в университете, где я решил использовать Freescale CodeWarrior KL25Z, который позволяет вам запускать отладочный код, позволяя лучше оценивать поведение одного и того же. –