我用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的定时中断,该如何处理?
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的定时中断,该如何处理?