CodeWarrior从事件中获取变量值。c

CodeWarrior从事件中获取变量值。c,c,events,codewarrior,getvalue,C,Events,Codewarrior,Getvalue,要输入上下文,我将执行以下操作: 通过改变驱动器(A4988)的脉冲频率输入来驱动步进电机(无需了解此问题的功能)。现在,我们可以改变脉冲的频率(它们改变发动机转速)。您需要知道,对于电机轴,1整圈必须获得200个脉冲(发动机为每步1.8°) 我找到了引擎,让他在1秒内转了一圈。 周期=0.005s 为了编程,我使用组件:TimerUnit\u LDD。 频率为163840 Hz计数 在整个转弯1的情况下,要获得该功能,请经常使用此功能 ----main.c TU1\u启用(TU1\u设备数据)

要输入上下文,我将执行以下操作: 通过改变驱动器(A4988)的脉冲频率输入来驱动步进电机(无需了解此问题的功能)。现在,我们可以改变脉冲的频率(它们改变发动机转速)。您需要知道,对于电机轴,1整圈必须获得200个脉冲(发动机为每步1.8°)

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

为了编程,我使用组件:TimerUnit\u LDD。 频率为163840 Hz计数

在整个转弯1的情况下,要获得该功能,请经常使用此功能

----main.c

TU1\u启用(TU1\u设备数据);
TU1_SetPeriodTicks(TU1_DeviceData,410)

将参数410与我想要的周期进行比较,发送通过改变管脚值编程的脉冲时,同时考虑高脉冲和低脉冲,如下所示:

-----事件c

TU1_onCounterStart void(*UserDataPtr LDD_TUserData)
{
步骤1_NegVal();
}

严重周期公式819.2,考虑到上述严重周期近似为409.6和410(在示波器中看到的频率为200 Hz(ok))

已输入上下文,问题是:

----main.c

TU1\u启用(TU1\u设备数据);//启用计数器
TU1_SetPeriodTicks(TU1_DeviceData,410);//设置所需的周期

(;;)的
{
TU1_启用(TU1_设备数据);
WAIT1_Waitms(1000);//旋转时间
TU1_Enable(TU1_DeviceData);//禁用计数器
}

使用这段代码,我试图检查频率计算是否正确,并且在一秒钟内会旋转1圈。但是发生的情况是,它会旋转,但偏移量会多一点。我猜这会通过每行代码所需的运行时进行

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

----main.c

TU1\u启用(TU1\u设备数据);//初始化计数器
TU1_SetPeriodTicks(TU1_DeviceData,410);//设置所需的周期

(;;)的
{
对于(;;){
如果(GetValue(x)==200)break;//GetValue(x)这个函数就是我想要实现的
}
WAIT1_Waitms(1000);
}

-----事件c

TU1\u onCounterStart void(*UserDataPtr LDD\u TUserData)
{
Step1_NegVal();
x=x+1;
}

GetValue(x)此函数将获取Events.c中的x值,并定义一些脉冲来控制espefico

取一个变量,它受计数器的影响,这个值达到200(1秒内转一圈)

这将有一个确定的事实,梅内拉被单独和孤独地发送,不多也不少,只有200个脉冲

我要求这是具体的,因为我是desarrolando的数控机床程序,太重要了,精度是最高的

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

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

wow,CodeWarrior,它还存在吗?我记得在1990年左右使用过它,但不知道它仍然存在。在大学里,我决定使用飞思卡尔CodeWarrior KL25Z,它可以让你运行调试代码,让你更好地欣赏同样的行为。
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
 }