2016-04-07 8 views
0

войти в контекст Я делаю это: Привод шагового двигателя через изменение частоты импульсного ввода на драйвер (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,

+0

вау, CodeWarrior, является то, что до сих пор вокруг? Я помню, как его использовали в 1990 году, он не знал, что он все еще существует. –

+0

в университете, где я решил использовать Freescale CodeWarrior KL25Z, который позволяет вам запускать отладочный код, позволяя лучше оценивать поведение одного и того же. –

ответ

0
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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^