CodeWarrior Получить значение переменной из event.c
Чтобы войти в контекст, я делаю это: Управляю шаговым двигателем путем изменения частоты импульсов, вводимых в драйвер (A4988) (Для этого вопроса не обязательно знать, как это работает). Теперь и меняются частоты импульсов (они меняют частоту вращения двигателя). Вы должны знать, что для вала двигателя 1 полный оборот должен получить 200 импульсов (двигатель на 1,8 ° градусов за шаг).
Я получил двигатель и сделал его полный оборот за 1 секунду. Период = 0,005 с
Для программирования я использую компонент: 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 секунду).
Это гарантировало бы отправку менеры в одиночку и одиноко, ни больше, ни меньше, только 200 импульсов.
Я требую это настолько же точно, как и программу для станка с ЧПУ, и она слишком важна, чтобы точность была самой высокой.
Я надеюсь, что вы понимаете, и я говорю по-испански, и это было переведено Chrome
Программируется на языке C, Freescale KL25Z, CodeWarrior, OPEN_SDA,
1 ответ
I managed to implement something but I think it may be easier to get
-----(main.c)
extern int count;//called external variable
int main(void){
PE_low_level_init();
TU1_Enable(TU1_DeviceData);
TU1_SetPeriodTicks(TU1_DeviceData,410);//T=0.005 sec
for(;;){
Term1_Cls();// Clear Console
WAIT1_Waitms(1000);
Term1_MoveTo(0,0);// Set 0,0 in Console
for(;;){
TU1_Enable(TU1_DeviceData);
Term1_SendNum(count);
Term1_CRLF();
if (count>400){//amount of high and low pulse counting
count=0;
TU1_Disable(TU1_DeviceData);
break;
}
}
WAIT1_Waitms(1000);
Dir1_NegVal();
}
----(Events.c)
int count;
void TU1_OnCounterRestart(LDD_TUserData *UserDataPtr)
{
Step1_NegVal();
count=count+1; //counter
}