CodeWarrior从事件获取变量值c
进入环境我正在这样做: 驱动步进电机,通过脉冲频率输入到驱动器(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(); }
考虑到上述严重近似值409.6和410(在示波器频率中看到的是200 Hz(ok)),认真制定819.2的时间段。
在上下文中已经进入了问题是这样的:
---- 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)此函数将获取Events.c中x的值,并定义一些脉冲来控制espefico。
取一个变量并受到计数器的影响,并且达到200(1秒内1转)。
这样就可以确定menera是孤独的,孤独的,不多也不少,只有200个脉冲。
我需要这个具体的,因为我desarrolando数控机床的程序,是太重要了精度是最高的。
我希望你明白,我说西班牙语,这是由Chrome
在C语言中, 飞思卡尔KL25Z, 的CodeWarrior, 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
}
哇,CodeWarrior的是,仍然周围?我记得1990年左右使用它,不知道它仍然存在。 –
在我决定使用飞思卡尔CodeWarrior KL25Z的大学里,它允许您运行调试代码,从而更好地理解相同的行为。 –