一.前言

最近在公司学习Arduino uno ,用它实现小车超声波避障功能。实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯。但是碰到了这样一个问题,舵机库和pwm输出冲突,当舵机旋转时,pwm输出函数analogWrite()不管用了。

二.解决

先分析一下问题产生的原因,我们之前如果想控制舵机,比较常见的方法就是调用舵机库:

#include

Servo myservo;  // create servo

object to control a

servo

// a maximum of eight servo objects can be created

int pos =

0;    // variable to store the servo position

void

setup()

{

myservo.attach(9);  // attaches the servo on pin 9

to the servo object

}

void loop()

{

for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180

degrees

{

// in steps of 1 degree

myservo.write(pos);

// tell servo to go to position in variable 'pos'

delay(15);

// waits 15ms for the servo to reach the position

}

for(pos

= 180; pos>=1; pos-=1)     // goes from 180 degrees to 0

degrees

{

myservo.write(pos);

// tell servo to go to position in variable 'pos'

delay(15);

// waits 15ms for the servo to reach the position

}

}

这种做法非常方便,但是为什么会跟pwm冲突呢,因为在Arduino里的库封装里,它们都是用了同一个定时器1,T/C1: Pin9(OC1A)和Pin10(OC1B),所以会导致冲突,如何解决呢,可以在硬件上修改引脚。不费事的办法就是通过修改代码来解决冲突。我们可以换一种方法来实现舵机的控制:

int servopin = 7;    //定义舵机接口数字接口7 也就是舵机的橙色信号线。

void servopulse(int angle)//定义一个脉冲函数

{

int pulsewidth=(angle*11)+500;  //将角度转化为500-2480的脉宽值

digitalWrite(servopin,HIGH);    //将舵机接口电平至高

delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数

digitalWrite(servopin,LOW);     //将舵机接口电平至低

delayMicroseconds(20000-pulsewidth);

}

void setup()

{

pinMode(servopin,OUTPUT);//设定舵机接口为输出接口

}

void loop()

{

//把值的范围映射到0到165左右

for( int angle = 0;angle<180;angle+=10){

for(int i=0;i<50;i++)  //发送50个脉冲

{

servopulse(angle);   //引用脉冲函数

}   delay(1000);  } }

直接通过延时函数来给舵机脉冲,达到控制的效果,因为Arduino里延时函数delay()用的是定时器0,所以就不会冲突了。

arduino定时器控制舵机_Arduino学习经验(一)之解决舵机库和pwm输出冲突相关推荐

  1. arduino温湿度计库文件_arduino学习笔记八 温湿度计

    DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术 和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性.传感器包括一个电阻式感湿元件和一 ...

  2. esp8266舵机驱动_使用Arduino和ESP8266通过网页控制舵机

    在本文中,我们将尝试通过网页来控制舵机,通过滑动网页上对应的滑块,促使舵机做相应地运动.这样的尝试在做一些远程开关或者远程控制的小设备时非常有用,比如把 宠物定时喂食器 改造成网页控制的也是可以实现的 ...

  3. STM32 同一定时器四路不同占空比PWM输出+舵机角度精准控制

    2019.3.25更新 pwm使用较为简单,但是对于精准控制,比如用于步进电机的控制和舵机控制,则要准确计算它的脉宽和占空比. 脉冲周期计算: PWM所使用的时钟频率f = 相应定时器频率 / (TI ...

  4. STM32 PWM控制舵机

    目录 舵机简介 舵机工作原理 什么是PWM 硬件连线 代码 实现结果 总结 舵机简介 舵机是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件.分有:①电动舵机,由电动机.传动部件和离合器组成. ...

  5. php控制舵机,分享一个关于SG90舵机的实验(+串口控制)

    新手第一次做实验,如果有写的不对的地方,还希望各位大佬多多指导. --------第一次做实验,也发现了自己学习过的东西掌握的不是很好,大佬们有啥入门级别的模块也可以推荐一下,分享当然更好了. --- ...

  6. DSP28035控制舵机

    1.舵机教程和参考例程 硬石舵机教程和参考例程(密码:o5zh) 2.使用到的舵机MG90S 使用的舵机MG90S 信号线(黄线)红线(电源线)棕色(地线) 舵机的控制一般需要一个20ms(50HZ) ...

  7. Python 控制舵机

    原理: UNO R3中写入控制舵机转动度数的程序,该程序一直检测:serial是否又数据,有则操作舵机. python程序负责向 serial 写入数据,并可以通过serial读取 舵机角度的信息. ...

  8. Arduino------红外控制舵机风扇

    本篇文章,主要介绍如何使用 "红外遥控器.接收头" . "ULN2003驱动模块" 和 "继电器" 等制作一款Arduino红外控制舵机风扇 ...

  9. 树莓派python控制舵机_使用树莓派控制16路舵机驱动板(pca9685)

    使用树莓派控制16路舵机驱动板(pca9685) 在树莓派上,可以通过RPI.GPIO方便地输出PWM进行舵机控制. 使用RPI.GPIO 创建一个 PWM 实例: 1 p =GPIO.PWM(cha ...

最新文章

  1. 完全平方数(打表+二分)
  2. 尚硅谷李老师笔记3DQL
  3. boost库下的deadline_timer和steady_timer 区别
  4. php 三种传递函数,php – 是否可以将传递函数传递给包含的文件?
  5. 实战 | Python批量提取Win10锁屏壁纸
  6. T4 Templates and the Entity Framework
  7. Android开发笔记(五十四)数据共享接口ContentProvider
  8. C/C++ 变参函数
  9. python有关urllib,urllib2和requests应用记录
  10. 英语思维导图大全 名词(三)
  11. pytroch、tensorflow对比学习—功能组件(数据管道、回调函数、特征列处理)
  12. 《数据安全法》实施一周年,企业和个人发生哪些转变?|上云那些事
  13. 使用TIMESTAMPDIFF计算两个时间戳之间的时间间隔需要注意的细节
  14. AnimationEvent 'XXX' has no receiver!
  15. 您的首个 App 内购买项目必须以新的 App 版本提交
  16. vue使用ajax提交数据,vue中使用ajax请求 data的数据问题
  17. 管理科学与工程和计算机哪个难考,考研管理科学与工程 管理学和工学哪个好考?...
  18. 利用Office365进行个税改革员工信息收集
  19. 生成在线图片地址,用于测试
  20. 数据分析中,到底什么是特征 feature

热门文章

  1. Spring实战(第3版)
  2. 11.13. Highslide
  3. 你以为A10 Networks只做应用交付?
  4. Android应用程序窗口(Activity)的视图对象(View)的创建过程分析
  5. 实验一HSRP与STP结合
  6. bugfree3.0.2版本升级--更新版
  7. 讲解Linux服务器被黑解决方法
  8. 编译乱序(Compiler Reordering)
  9. 由小游戏跳一跳想到的
  10. 分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版)