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