CodeWarrior 从 event.c 中获取变量值

CodeWarrior Get variable value from a event.c

进入上下文我正在这样做: 通过输入到驱动器 (A4988) 的脉冲频率的变化来驱动步进电机(对于此问题,无需了解其功能)。现在改变了脉冲的频率(它们改变了发动机转速)。你需要知道对于电机轴1整圈必须得到200个脉冲(发动机每步1.8°度)。

我拿到了引擎,让他在 1 秒内转完一圈。 周期 = 0.005s

为了对此进行编程,我正在使用组件:TimerUnit_LDD。 频率为 163840 Hz count

在全转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赫兹(ok)。

已经输入上下文问题是这样的:

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

使用此代码,我尝试检查频率计算是否正确,并且在一秒钟内将转一圈。但是发生的事情是它提供了旋转但偏移了一点。我想这会经历每行代码所需的运行时间。

我想知道的是,如何获取事件中变量的数值?我怎么能做这样的事情。

----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)这个函数会获取Events.c中的x的值,并定义控制espefico的脉冲数。

取一个变量并受计数器影响,它达到 200(1 秒内 1 回合)。

这就确定了梅内拉是孤独寂寞的,不多也不少,只有200脉。

我需要这个非常具体,因为我正在设计 CNC 机器的程序,而且精度是最高的。

我希望你能理解,我会说西班牙语,这是由 Chrome

翻译的

用C语言编程, 飞思卡尔KL25Z, 代码战士, OPEN_SDA,

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
 }