UNO接步进电机,通过timerOne定时器中断调速问题
我用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的定时中断,该如何处理? 跑不到这么快,假设你系统时钟16MHz的话,那么你1us可以跑16条指令,如果你在中断中,16条指令解决不了,那么你是没可能跑到1us的,也就是说,你在中断中跑的代码就就要耗费15us。
页:
[1]