salon 发表于 2016-6-11 10:16:58

关于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的代码处理速度,这个低电平的宽度能用示波器量出来吗?
                  

hmd420304805 发表于 2017-3-16 18:11:27

有些驱动器可以做到0.5us,你自己看着办

honami520 发表于 2017-3-16 18:28:54

这个代码,就是高低变化,脉冲就输出完成。根据你代码的效率而产生us级别的延时;
因为这个是写在最高优先级定时器里面的,所以不要随意增加延时;增加了延时,打印起来后。对整个CPU的占用就非常明显了
页: [1]
查看完整版本: 关于Marlin驱动电机脉冲长度的疑问