电位器控制数字舵机和模拟舵机的尝试-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13759|回复: 4

电位器控制数字舵机和模拟舵机的尝试

[复制链接]
发表于 2016-10-7 10:27 | 显示全部楼层 |阅读模式
本人小白一个,年纪不小,专业机械类,工作做产品结构设计,负责公司产品开发,主要是小家电类的,低端制造业;前段时间突然对单片机有点兴趣,找了简单的ARDUINO入手,买了一堆配件,主板,驱动板,以及一些元件,万能板之类的;废话少说,在学习过程中,自己摸索舵机的控制,用串口输入控制到用电位器控制舵机转动角度,用电位器控制角度时,模拟舵机在两个端点有抖动,估计是器件的误差导致的,数字舵机不会有问题;另外,在尝试给舵机加载时,数字舵机要好很多,位置定位准确,无抖动,模拟舵机即使用大扭力的,在一定负载时,都会出现比较严重的抖动;抖动估计都是舵机在调整姿态来适应预设的位置;从串口监视器可以看到,模拟舵机的角度在接近0度和180度两个极限时,舵机表现出抖动;所以数字舵机贵的还是有道理的;测试多个双轴数字舵机 单轴舵机以及单轴模拟舵机,包括MG996 MG90S等大小不等舵机;程序内容如下:

int servopin=7;//定义数字接口7
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;// 暂存来自传感器的变量数值

const int aInPin=A0;// 定义电位器的输入端
void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);//将舵机接口电平置低
delay(20-pulsewidth/1000);
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//连接到串行端口,波特率为9600
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()//
{
  val=analogRead(aInPin);   //读取A0端电位器模拟量转为数字量

  val=map(val,0,1023,0,180);//将电位器的数字量转化成角度的量
Serial.println(val);

if(val>'0'&&val<='180');

{
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
{
servopulse(servopin,val);//引用脉冲函数
}
}
}

照片如下,扩展板自己用万能板焊的,舵机供电是用单独的2596供电,电位器用的是普通的2K可调。

控制照片

控制照片

发表于 2016-10-7 14:25 | 显示全部楼层
喜欢这样的经验之谈,希望以后多分享,谢谢!
发表于 2016-10-15 22:05 | 显示全部楼层
一定要外接电源是吧,用了楼主的代码,舵机只是抖动,我是直接在芯片上取电的
 楼主| 发表于 2016-10-17 15:29 | 显示全部楼层
、韩不寒 发表于 2016-10-15 22:05
一定要外接电源是吧,用了楼主的代码,舵机只是抖动,我是直接在芯片上取电的 ...

我用了2596的电源供电板供电,舵机消耗比较大,USB供电一定不够
发表于 2016-10-17 17:33 | 显示全部楼层
看起来很好玩的样子哦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 03:43 , Processed in 0.081590 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表