找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8112|回复: 24
收起左侧

51单片机控制舵机尝试

  [复制链接]
ID:424317 发表于 2020-2-21 10:14 | 显示全部楼层 |阅读模式
本来想要写一篇关于如何用STC89C52来控制舵机的帖子,结果发现舵机一般有三根线
白色的是信号线,接单片机的一个IO口,
红色的是电源线,接单片机的vcc,
黑色的也是电源线,接单片机的GND,
但是这三根线是并在一起的,因为是大创项目有不好破坏性的拆开。
现在在家因为疫情又不方便出去,出去也没有杜邦线买,现在物流也不是很方便。
所以想要控制舵机请务必准备三根公对母的杜邦线,否则就会像我一样尝尝失败的滋味。
回复

使用道具 举报

ID:679411 发表于 2020-2-24 22:01 | 显示全部楼层
舵机怎么控制呀,能分享一下程序吗?
回复

使用道具 举报

ID:679411 发表于 2020-2-24 22:02 | 显示全部楼层
舵机怎么控制,能分享一下程序吗?
回复

使用道具 举报

ID:155507 发表于 2020-2-29 07:28 | 显示全部楼层
单片机源程序如下:

  1. #include <reg52.h>
  2. sbit SG_PWM=P0^0;
  3. unsigned char count=0;
  4. unsigned char PWM_count=3;                  //1--0度,2--45度,3--90度,4--135度,5--180度
  5. unsigned char a=0;
  6. void Timer_Init()
  7. {
  8.         TMOD|=0X01;      //T0定时方式1
  9.         TH0=0Xfe;
  10.         TL0=0X33;       //计数初值设置为0.5ms
  11.         ET0=1;          //打开定时器0的中断
  12.         TR0=1;          //打开定时器0
  13.         EA=1;           //开总中断
  14. }
  15. void Timer() interrupt 1      //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1
  16. {
  17.         TR0=0;
  18.         TH0=0Xfe;
  19.         TL0=0X33;       //重新赋计数初值为0.5ms
  20.         if(count<=PWM_count)
  21.         {
  22.                 SG_PWM=1;
  23.         }
  24.         else
  25.         {
  26.                 SG_PWM=0;
  27.         }
  28.         count++;
  29.         if(count>=40)
  30.         {
  31.                 count=0;
  32.                 a++;
  33.         }
  34.         TR0=1;
  35. }
  36. void main()
  37. {
  38.         Timer_Init();
  39.         while(1)
  40.         {
  41.                 if(a==16)                             //20是比较舒服的连贯动作,20以上动作些许不连贯  10的时候出现打架情况,15的时候打架几乎没有,16比较完美
  42.                 {
  43.                         PWM_count=1;
  44.                 }
  45.                 if(a==32)
  46.                 {
  47.                         PWM_count=3;
  48.                         a=0;
  49.                 }
  50.         }
  51. }

复制代码


这是51黑论坛里面别人分享类似程序参考
http://www.51hei.com/bbs/dpj-156595-1.html

回复

使用道具 举报

ID:700124 发表于 2020-2-29 14:40 | 显示全部楼层
支持,来学习了!
回复

使用道具 举报

ID:321942 发表于 2020-3-1 15:43 | 显示全部楼层
舵机怎么控制呀,能分享一下程序吗?
回复

使用道具 举报

ID:703826 发表于 2020-3-6 23:23 来自手机 | 显示全部楼层
有教程吗?分享下
回复

使用道具 举报

ID:704119 发表于 2020-3-7 16:39 | 显示全部楼层
舵机怎么控制呀,能分享一下程序吗?
回复

使用道具 举报

ID:703745 发表于 2020-3-7 20:03 来自手机 | 显示全部楼层
请问楼主晶振是11.0592吗
回复

使用道具 举报

ID:303735 发表于 2020-3-10 10:01 | 显示全部楼层
经过我的测试舵机0度位置送信号50HZ1.5MS,向右转45度送50HZ2MS,向左转45度送信号50HZ1MS,准备做个遥控船放长线钓大鱼。
回复

使用道具 举报

ID:298522 发表于 2020-3-12 23:50 | 显示全部楼层
可以的
回复

使用道具 举报

ID:708044 发表于 2020-3-14 07:29 | 显示全部楼层
能分享一下程序吗?
回复

使用道具 举报

ID:284107 发表于 2020-3-15 21:12 来自手机 | 显示全部楼层
中断过程中为何丅R0关闭
回复

使用道具 举报

ID:716353 发表于 2020-3-26 17:25 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:717002 发表于 2020-3-27 16:14 | 显示全部楼层
能分享一下程序吗
回复

使用道具 举报

ID:719302 发表于 2020-3-31 09:55 | 显示全部楼层
舵机怎么控制呀,能分享一下程序吗?
回复

使用道具 举报

ID:639290 发表于 2020-4-14 09:05 | 显示全部楼层
Mr韩先森 发表于 2020-3-1 15:43
舵机怎么控制呀,能分享一下程序吗?

51单片机舵机控制原理+程序(单个和多个的舵机控制都有)
http://www.51hei.com/bbs/dpj-184738-1.html
(出处: 单片机论坛)
回复

使用道具 举报

ID:639290 发表于 2020-4-14 09:06 | 显示全部楼层
tang1140461770 发表于 2020-3-31 09:55
舵机怎么控制呀,能分享一下程序吗?

51单片机舵机控制原理+程序(单个和多个的舵机控制都有)
http://www.51hei.com/bbs/dpj-184738-1.html
(出处: 单片机论坛)
回复

使用道具 举报

ID:639290 发表于 2020-4-14 09:06 | 显示全部楼层
2409297096 发表于 2020-2-24 22:02
舵机怎么控制,能分享一下程序吗?

51单片机舵机控制原理+程序(单个和多个的舵机控制都有)
http://www.51hei.com/bbs/dpj-184738-1.html
(出处: 单片机论坛)
回复

使用道具 举报

ID:333080 发表于 2020-4-14 09:30 | 显示全部楼层
点赞,漂亮
回复

使用道具 举报

ID:157113 发表于 2020-4-17 08:48 | 显示全部楼层
支持,谢谢分享
回复

使用道具 举报

ID:680646 发表于 2020-4-21 17:08 | 显示全部楼层
#include <reg52.h>
unsigned char count;      //0.5ms次数标识
sbit pwm =P3^5;          //PWM信号输出
sbit jia =P1^2;           //角度增加按键检测IO口
sbit jan =P1^3;           //角度减少按键检测IO口
unsigned char jd;         //角度标识
void delay(unsigned char i)//延时
{
  unsigned char j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void Time0_Init()          //定时器初始化
{
TMOD = 0x01;           //定时器0工作在方式1   
IE   = 0x82;
TH0  = 0xfe;
TL0  = 0x33;     //11.0592MZ晶振,0.5ms
    TR0=1;                 //定时器开始
}
void Time0_Int() interrupt 1 //中断程序
{
TH0  = 0xfe;             //重新赋值
TL0  = 0x33;
    if(count< jd)              //判断0.5ms次数是否小于角度标识
      pwm=1;                  //确实小于,PWM输出高电平
    else
      pwm=0;                  //大于则输出低电平
    count+=1;          //0.5ms次数加1
    count=count%40;     //次数始终保持为40 即保持周期为20ms
}
void keyscan()              //按键扫描
{
   if(jia==0)               //角度增加按键是否按下
  {
    delay(10);              //按下延时,消抖
    if(jia==0)              //确实按下
     {
      jd++;                 //角度标识加1
      count=0;              //按键按下 则20ms周期从新开始
      if(jd==6)
        jd=5;               //已经是180度,则保持
      while(jia==0);        //等待按键放开
     }
  }
  if(jan==0)                //角度减小按键是否按下
  {
    delay(10);
    if(jan==0)
     {
      jd--;                 //角度标识减1
      count=0;
      if(jd==0)
        jd=1;               //已经是0度,则保持
      while(jan==0);
     }
  }
}
void main()
{
jd=1;
count=0;
Time0_Init();            
while(1)
{
  keyscan();               //按键扫描
  
}
}
这是我昨天 能控制舵机的代码,其他网站拿的,用按键控制它转,有点舒服
回复

使用道具 举报

ID:739176 发表于 2020-4-27 11:45 | 显示全部楼层
没看明白
回复

使用道具 举报

ID:818060 发表于 2020-9-11 23:30 | 显示全部楼层
wuzufeng 发表于 2020-4-21 17:08
#include
unsigned char count;      //0.5ms次数标识
sbit pwm =P3^5;          //PWM信号输出

有接线教程吗,正极可直接接在芯片右上角的VCC管脚?
回复

使用道具 举报

ID:818060 发表于 2020-9-11 23:32 | 显示全部楼层
数字和模拟舵机都通用的代码么?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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