Arduino mega 2560 pwm计时器控件

时间:2013-08-08 04:47:42

标签: timer arduino pwm

我正在尝试使用由巨型2560控制的镜子振镜来引导激光。作为第一次测试,我希望激光器通过跳跃相等的间隔沿一个轴移动,但我遇到了麻烦。我想知道我的代码中是否有任何明显的问题(我怀疑可能是这种情况,因为我是计时器和中断的新手)?

void setup()
{
  TCCR3B = _BV(CS30); //high freq ~50khz
  pinMode(5, OUTPUT);
}    

void loop() {
 int output1= 5;
 while(output1<255){
  analogWrite(5,output1);
  output1+=40;
  delay(500);
 }
 output1=5;
}

当我运行此代码时,镜子确实可以实现完整的5度移动范围。问题是镜子旋转相等的间隔而不是移动等于.8度相当于我认为是while循环的前两次迭代,然后镜子跳转大约3.5度的旋转。然后镜子在while循环的最后几次迭代中再次以小的增量再次旋转0.75度。

我最初尝试将自己的设置用于所有定时器和PWM设置,但这些设置都不起作用:

void setup()
{           
   TCCR3A = TCCR3B = 0;
   TCCR3A =  _BV(COM3A1) | _BV(WGM31); //non-inverting
   TCCR3B = _BV(CS30) | _BV(WGM32) | _BV(WGM33); //prescalar=1, fast pwm
   ICR3= 500;
   OCR3A= 6;
   pinMode(5, OUTPUT);
}

void loop() {
  while(OCR3A<500){
    OCR3A+=80;
    delay(500);
  }
  OCR3A=6;
}

使用第二个代码,镜子旋转一个恒定的1度并保持在那里。

编辑:我在arduino和镜子之间有一个电流增益电路,但我用功能发生器测试了电路和镜子。关闭函数发生器,它们工作正常。

0 个答案:

没有答案