极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10343|回复: 1

UNO接步进电机,通过timerOne定时器中断调速问题

[复制链接]
发表于 2015-11-19 20:30:26 | 显示全部楼层 |阅读模式
我用UNO连接了一个工业步进电机,希望能输入高频率来驱动电机快速转动,用PWM的话,频率被限定在几个值上,不满足任意调速的要求,因此使用了timerOne库,通过定时器中断来翻转数字IO输出实现方波的输出,程序如下:                   #include <TimerOne.h>
void setup() {
  pinMode(13, OUTPUT);
  Timer1.initialize(100000);//设置定时器中断时间,基本单位为微秒,如设置为100000,则定时时间为0.1秒,频率为10Hz。
  Timer1.attachInterrupt(timerIsr ); // 设置用户自定义的定时器中断服务函数,每发生一次定时器中断,均会执行一次定时器中断服务函数。
}
void loop(){
//主函数,用于执行非周期性任务
}
void timerIsr(){
    // 反转I/O口电平
    digitalWrite( 13,digitalRead( 13 ) ^ 1 );
}
问题是:我通过更改Timer1.initialize()的值来调速,接了一个示波器读取PIN13的频率,发现当Timer1.initialize()的值在15us以下时,频率就保持15us时的值不再变了,假设我希望能用到1us的定时中断,该如何处理?
回复

使用道具 举报

发表于 2015-11-20 16:24:12 | 显示全部楼层
跑不到这么快,假设你系统时钟16MHz的话,那么你1us可以跑16条指令,如果你在中断中,16条指令解决不了,那么你是没可能跑到1us的,也就是说,你在中断中跑的代码就就要耗费15us。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 18:46 , Processed in 0.038329 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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