要输入上下文,我正在这样做: 通过改变驱动器 (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/