Blog

Blog

PHODAL

Arduino PWM小记

这些代码是写在之前参加电子设计竞赛的时候的,只是有些忘记过去的那些代码,加上最近需要用到,于是。。

Arduino定时器

让我们先看看百科上的说明:

看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。

简单的来说就是我们需要隔一段时间执行一段代码,所以我们需要用到定时器。

最后的代码

#include 
#include 
 void setup(){  
  Timer1.initialize(1000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
  MsTimer2::set(20, timeCnt); // 500ms period
  MsTimer2::start();     
}
float setHerz(float hr){
  hr=1048576/(hr/1000000*1048576);//1Mhz=1048576 Mhz to M
  Timer1.setPeriod(hr);
  return hr;
}
float getTimeHz(float hz,float degree){
  float hzTemp=setHerz(hz);
  float time=(200/hz)*(degree/360)*1000; 
  return time;
}

简要的对代码进行一下说明,因为我们需要用到timer1来当PWM调节用,以及timer2拿来当定时器。所以在这里我们需要两个定时器,我们需要在过程中不断修改Timer1的频率以便用来调整速度,因此有下面的函数,同时不要忘记注意pwm的倍数关系

使用PWM寄存器

ATmega168有三个时钟,名字分别叫Timer0, Timer1和Timer2。每个时钟都使用了两个寄存器,其中一个是设定值例如128,另一个则从0开始不断递增,到1024之后溢出回到0。那么当两个值相同的时候,Timer就会把某个管脚反相。不同的Timer之间频率是相同的,占空比则根据设置值不同。

定时器的精度取决于你的处理器速度和频率。定时器的时钟速度是通过设置预分频器,或除数定义。这个预分频可以被设置为1,8,64,256或1024。

Arduino定时器使用

TimerOne库

Timer1使用方法如下:

void initialize(long microseconds=1000000);
void start();
void stop();
void restart();
unsigned long read();
void setPeriod(long microseconds);
void pwm(char pin, int duty, long microseconds=-1);
void setPwmDuty(char pin, int duty);
void disablePwm(char pin);
void attachInterrupt(void (*isr)(), long microseconds=-1);
void detachInterrupt();

MsTimer2

代码示例

#include

void flash()
{
  static boolean output = HIGH;

  digitalWrite(led_pin, output);
  output = !output;
}

void setup()
{
  pinMode(led_pin, OUTPUT);

  MsTimer2::set(500, flash); // 500ms period
  MsTimer2::start();
}

void loop()
{
}

几个需要注意的问题

  • 不要在定时器里放延时
  • 与pwm一起使用的时候注意频率与其的关系
  • 必要的时候需要三个定时器一起工作

或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签