首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeWarrior从event.c获取变量值

CodeWarrior从event.c获取变量值
EN

Stack Overflow用户
提问于 2016-04-07 04:38:04
回答 1查看 281关注 0票数 0

为了进入上下文,我要这样做:通过脉冲频率输入到驱动器(A4988)的变化来驱动步进电机(没有必要知道这个问题的功能)。现在,得到了改变频率的脉冲(他们改变发动机的速度)。你需要知道的是,对于发动机轴1满转必须有200个脉冲(发动机是1.8度每步)。

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

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

在整个转弯的情况下,1得到,这经常使用这个函数。

-主要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赫兹(ok) )。

已在上下文中输入的问题是:

-主要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圈。但所发生的是,它给了旋转,但被抵消了一点点。我想这会贯穿每一行代码所需的运行时。

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

-主要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); }

-事件c

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

GetValue (x)此函数将获得Events.c中的x值,并定义多个脉冲以控制速度。

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

这就可以肯定地说,只有200个脉冲是单独而孤独地发出的,既不多,也不少。

我要求这作为具体的我去做数控机床的程序和是太重要的精度是最高的。

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

用C语言编写,Freescale KL25Z,CodeWarrior,OPEN_SDA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-07 06:33:35

代码语言:javascript
复制
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
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36466823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档