Arduino控制16路PWM舵机驱动板(PCA9685)

最近买了块16路PWM舵机驱动板,测试后做个总结。

舵机原理网上资料很多就不详细介绍了,一般以9g舵机为例,一个20ms的周期内通过0.5ms到2.5ms的脉冲宽度控制舵机角度。

板子为16通道12bit PWM舵机驱动,用2个引脚通过I2C就可以驱动16个舵机。

修改例子为可以通过串口设置舵机角度

1 1 #include <Wire.h> 2 2 #include <Adafruit_PWMServoDriver.h> 3 3 4 4 //默认地址 0x40 5 5 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); 6 6 7 7 //9g舵机 高电平宽度在20ms内通过控制脉冲宽度范围0.5ms~2.5ms 8 8 #define SERVOMIN 102 // this is the 'minimum' pulse length count (out of 4096) 0度 9 9 #define SERVOMAX 512 // this is the 'maximum' pulse length count (out of 4096) 180度 1010 1111 void setup() { 1212 Serial.begin(9600); 1313 Serial.println("16 channel Servo test!"); 1414 pwm.begin(); 1515 pwm.setPWMFreq(50); //频率 50Hz,最高60Hz 1616 } 1717 1818 void setServoPulse(uint8_t n, double pulse) { 1919 double pulselength; 2020 pulselength = 1000000; // 1,000,000 us per second 2121 pulselength /= 50; // 50 Hz 2222 Serial.print(pulselength); Serial.println(" us per period"); 2323 pulselength /= 4096; // 12 bits of resolution 2424 Serial.print(pulselength); Serial.println(" us per bit"); 2525 pulse *= 1000; 2626 pulse /= pulselength; 2727 Serial.println(pulse); 2828 pwm.setPWM(n, 0, pulse); 2929 } 3030 //设置9g舵机角度 3131 void servo_9g_write(uint8_t n,int Angle) 3232 { 3333 double pulse = Angle; 3434 pulse = pulse/90 + 0.5; 3535 setServoPulse(n,pulse);//0到180度映射为0.5到2.5ms 3636 } 3737 void loop() 3838 { 3939 unsigned char serialRead; 4040 if (Serial.available() > 0) 4141 { 4242 serialRead = Serial.read(); 4343 servo_9g_write(0,serialRead);//控制第一路度数 4444 } 4545 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

stm32F4 控制舵机

正点原子stm32f407开发板对于一般的舵机来说,所对应的PWM波的周期为20ms,即舵机接收的PWM信号频率为50HZ。其空占比与转动角度的关系。普通舵机的舵量是0~180°。脉冲宽度范围0.5ms~2.5ms0.5ms/20ms0度1.0ms/20ms45度

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )