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
}
进入上下文我正在这样做: 通过输入到驱动器 (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
}