关于Marlin驱动电机脉冲长度的疑问
最近在看ST的3D打印机的代码,发现一个疑问,在stepper.cpp中的void StepperHandler(void)是控制驱动电机脉冲长度的,其中有一段是这样的:void StepperHandler(void) {
//ISR(TIMER1_COMPA_vect) {
1: for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves)
...........................................................
2: counter_x += current_block->steps_x;
3: if (counter_x > 0) {
4: WRITE(X_STEP_PIN, !INVERT_X_STEP_PIN);
5: counter_x -= current_block->step_event_count;
6: signed char tmp_count_direction = count_direction;
7: count_position+=tmp_count_direction;
8: WRITE(X_STEP_PIN, INVERT_X_STEP_PIN);
}
...................................
}
第4行是把IO口拉低;
第8行是把IO口拉高;
我的疑问是:IO口从低到高,才3行代码;以ARM的代码处理速度,这个低电平的宽度能用示波器量出来吗?
有些驱动器可以做到0.5us,你自己看着办 这个代码,就是高低变化,脉冲就输出完成。根据你代码的效率而产生us级别的延时;
因为这个是写在最高优先级定时器里面的,所以不要随意增加延时;增加了延时,打印起来后。对整个CPU的占用就非常明显了
页:
[1]