CodeWarrior 从 event.c 获取变量值

标签 c events codewarrior getvalue

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

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

为了对此进行编程,我使用了组件:TimerUnit_LDD。 频率为163840赫兹计数

在整转1的情况下经常使用此功能。

---- main.c

TU1_Enable (TU1_DeviceData); TU1_SetPeriodTicks (TU1_DeviceData, 410);

将参数 410 与我想要的周期进行比较,就像通过更改引脚值(考虑高脉冲和低脉冲)来编程发送脉冲一样,如下所示:

-----事件.c

TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData) { Step1_NegVal(); }

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

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

---- main.c

TU1_Enable (TU1_DeviceData);//启用计数器 TU1_SetPeriodTicks (TU1_DeviceData, 410);//设置所需的时间段

for (;;) { TU1_启用(TU1_设备数据); WAIT1_等待 (1000);//旋转时间 TU1_启用(TU1_设备数据);//禁用计数器 }

使用这段代码,我尝试检查频率计算是否正确,并且一秒钟内会转一圈。但发生的情况是,它给出了旋转,但偏移量多了一点。我想这会经历每行代码所需的运行时。

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

---- main.c

TU1_Enable (TU1_DeviceData);//初始化计数器 TU1_SetPeriodTicks (TU1_DeviceData, 410);//设置所需的时间段

for (;;) { 为了 (;;) { if (GetValue(x) == 200) 中断;//GetValue(x) 这个函数就是我要实现的 } WAIT1_等待 (1000); }

-----事件.c

TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData) {  Step1_NegVal (); x = x + 1; }

GetValue(x) 该函数将获取Events.c中的x值,并定义多个脉冲来控制espefico。

取一个变量并受到计数器的影响,并且该变量达到 200(1 秒内 1 圈)。

这样就可以确定,menera 会被单独发送,不多也不少,只有 200 个脉冲。

我要求这个具体,因为我正在开发数控机床的程序,并且太重要了,精度是最高的。

我希望您能理解,我说西类牙语,这是由 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
 }

关于CodeWarrior 从 event.c 获取变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36466823/

相关文章:

javascript - 在 iPad 上从 "src"事件更改图像元素的 "touchend"?

c - 我正在使用 CodeWarrior 的 MC9S08DZ60.h 创建 Visual Studio 项目我收到错误 C2054 : expected '(' to follow '_PTDD'

c - 如何从 C 中的现有变量创建位域

mysql - fatal error : mysql/services. h:没有这样的文件或目录

c - 为什么我的 fread 会返回一个空字符串?

javascript - 如何检测浏览器是否会通过 addEventListener 接受 xmlhttprequest 事件?

javascript - 事件监听器的指令优先级

c - 在 yacc 和 lex char 数组中制作计算器

OpenMPI 能否保证来自同一进程的接收消息的顺序?

c - mc56f8367头文件的要求