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
 }
Другие вопросы по тегам