为了进入上下文,我要这样做:通过脉冲频率输入到驱动器(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
发布于 2016-04-07 06:33:35
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
}https://stackoverflow.com/questions/36466823
复制相似问题