找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1293|回复: 3
打印 上一主题 下一主题
收起左侧

请教用51单片机编程的舵机如何实现循环运动

[复制链接]
跳转到指定楼层
楼主
ID:404268 发表于 2018-10-29 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  通过采用51单片机设置定时和中断输出PWM波来控制舵机,能实现单次到指定位置,但要在循环之中实现持续来回运动重复动作却会在第一个位置就卡住不动了。希望能够解决这个问题,谢谢,程序如下:
#include <reg52.h>
unsigned char i=0,a,b,c;
sbit P17=P1^7;//舵机 1
sbit P16=P1^6;//舵机 2
sbit P15=P1^5;//舵机 3
unsigned char c1[]={77,75,77,75,77};
unsigned char c2[]={77,76,77,74,77};
unsigned char c3[]={77,74,77,76,77};

void delay(unsigned int j)
{
unsigned int x,y;
for(x=0;x<j;x++);
for(y=0;y<101;y++);
}

void main(void)
{
EA=1;
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
ET0=1;
TR0=1;
while(1)
{         a=c1[0];
          b=c2[0];
          c=c3[0];//通过数组就可以改变舵机的转角度
          delay(5000);//延时5s
          a=c1[1];
          b=c2[1];
          c=c3[1];
          delay(5000);
          a=c1[2];
          b=c2[2];
          c=c3[2];
          delay(5000);
          a=c1[3];
          b=c2[3];
          c=c3[3];
          delay(5000);
    }
}

void timer0_int() interrupt 1
{
   i++;
if(i==a) {P17=1;}//70--78
if(i==b) {P16=1;}//72--78
if(i==c) {P15=1;}//72--78
if(i==80) {P17=0;P16=0;P15=0;i=0; }//1=0.25ms
TH0=(65536-250)/256;
TL0=(65536-250)%256;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:404268 发表于 2018-10-31 15:29 | 只看该作者
顶一下!
回复

使用道具 举报

板凳
ID:418826 发表于 2018-10-31 22:46 | 只看该作者
你的高低电平弄反了吧??从i=a开始到i=80都是高电平??
回复

使用道具 举报

地板
ID:418826 发表于 2018-10-31 22:48 | 只看该作者
高低电平弄反了,i=设定值时将电平拉低,i=80时将电平拉高就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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