OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5785|回复: 5

求助,使用定时器查询溢出方式来控制步进电机?? 做过的朋友请给点意见。谢谢!

[复制链接]

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
发表于 2013-4-8 11:24:55 | 显示全部楼层 |阅读模式
定时器4设置:TIM4_Int_Init(19,7199); //10Khz(0.1ms)的计数频率

能否像51单片机那样查询?
比如
while(TF1 == 0);
TF1 = 0;
用STM32
while(TIM4->SR&0X0001==0); //等待定时器中断标志位溢出
TIM4->ARR = TimeWait; //重装初值
TIM4->SR&=~(1<<0);//清除中断标志位   

还有测试的时候必须在中断里面才能清除中断标志位 
void TIM4_IRQHandler(void)
{        
if(TIM4->SR&0X0001)//溢出中断
{

         
}   
TIM4->SR&=~(1<<0);//清除中断标志位    
}
在外部是不起作用的。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-8 13:38:29 | 显示全部楼层
可以啊。
查询SR寄存器即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-8 21:33:02 | 显示全部楼层
最近才做过
建议你用全局变量+计数变量 控制频率
定时器固定频率中断就好
每次中断计数变量自增1,然后和你设置的全局变量值对比
这样修改频率只需要改全局变量值就OK
不需要修改任何寄存器
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
 楼主| 发表于 2013-4-9 15:41:08 | 显示全部楼层
回复【3楼】兰斯洛:

最近才做过
建议你用全局变量+计数变量 控制频率
定时器固定频率中断就好
每次中断计数变量自增1,然后和你设置的全局变量值对比
这样修改频率只需要改全局变量值就OK
不需要修改任何寄存器

---------------------------------
感觉这样控制不怎么好,我是想通过查表的形式来改变定时器的频率,可以实现电机的加减速,还可以算出送出的脉冲个数。
今天我测试了一下,感觉查询标志位没起作用,送出的脉冲数丢失了很多。
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
 楼主| 发表于 2013-4-9 15:46:26 | 显示全部楼层
回复【2楼】正点原子:

可以啊。
查询SR寄存器即可。

---------------------------------
原子兄,感觉通过这样查询标志位的方法好像没起作用,
TIM4_Int_Init(499,71);  //1KHZ

while(TIM4->SR&0X0001 == 0); //等待定时器中断标志位溢出
PUL = 0; 
TIM4->ARR = TimeWait; //重装初值  查表
TIM4->SR&=~(1<<0);//清除中断标志位    
if(Direction) 
{
if(CurrentLocation<65535)
CurrentLocation++;

}
else
{  
if(CurrentLocation>0)
CurrentLocation--;
}

if(AccSign)
{
if(AccSpeed < LimitSpeed)
{
AccSpeed++;
}
}
else
{
if(AccSpeed > 0)
{
AccSpeed--;
}
}
PUL = 1;

这样等待标志位,送出的脉冲丢失很多。不解??  如果是51,可以做得很好,现在换stm32,只是追求速度。
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
 楼主| 发表于 2013-4-9 22:03:11 | 显示全部楼层
问题解决了,在外部查询标志位是不行了,必须在中断里面,如果在外部就出现像干扰一样的信号。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 16:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表