找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助关于模拟舵机的连续转向问题

[复制链接]
跳转到指定楼层
楼主
ID:630001 发表于 2019-11-29 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前一直在搞舵机(stc89c52rc芯片),遇到了不少问题,还望大神相助
问题1,模拟舵机是不是只有0,45,90,135,180这几个角度可以定位,如果不是,如何通过控制pwm信号使得舵机转到某个角度(不要求精确)
       2,如何在仅使用一个定时器的情况下实现舵机在两不同角度内转动。
       3,不同舵机即使在相同程序测试情况下,转动稳定性并不一致,如何对于舵机进行参数调整
       4,一直有看到对于双舵机同角度转动程序,那么若使用两个舵机实现不同角度转动,51单片机的输出能力是否足够。
问题不是太难,但希望大神们能给一些具体一点的回答,我虽然在百度等处搜索了一些资料,但仍觉不能太清楚地理解。无他物相与,唯有谢谢二字奉上,谢谢。
注:舵机型号mg996r,sg90.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:638524 发表于 2019-11-29 12:48 | 只看该作者
1.舵机不是只有那几个角度。可以通过pwm给舵机周期20ms的高电平时间为1ms到2ms的范围来控制。我在网上看到说是1ms的占空比,往左边极限位置转动,1.5ms时保持不动,2ms时往右边位置转动。但是我也不太清楚如何具体精确控制转动多少,但是你可以在论坛看看,我记得我看到过的
2.额,具体我也不太懂,我没控制过。
3.
4.输出能力不用太考虑,因为只是给信号,不是像电机需要很大的电流一直驱动,只要供上电源,给pwm信号就行了吧我觉得

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:638524 发表于 2019-11-29 13:00 | 只看该作者
3.我看了网上几个舵机,好像他的占空比范围不一样,就是一个周期内高电平最低持续时间有0.5ms的,,只是这个范围不一样,对应的都是0到180度,所以可以在程序里加个中间变量自动转换,pwm变量里面是角度,里面自动按照比例转换成相应占空比。我想大概就是这样。
我室友有个舵机,我下午可以做做实验,贴上代码

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:630001 发表于 2019-11-29 15:01 来自手机 | 只看该作者
liaojiaao 发表于 2019-11-29 13:00
3.我看了网上几个舵机,好像他的占空比范围不一样,就是一个周期内高电平最低持续时间有0.5ms的,,只是这 ...

感谢大佬
回复

使用道具 举报

5#
ID:638524 发表于 2019-11-29 15:03 | 只看该作者
不好意思,我也没搞懂。我看了这位的51单片机控制MG996R舵机源程序
  1. #include<reg52.h>
  2. sbit pwm = P0^0;
  3. unsigned char jd;
  4. unsigned char count = 0;
  5. void t0_init()
  6. {
  7.         TMOD = 0x01;
  8.         TH0 = (65536 - 500)/256;  //我是12m的晶振500us
  9.         TL0 = (65536 - 500)%256;
  10.         EA = 1;
  11.         ET0 = 1;
  12.         TR0 = 1;       
  13. }

  14. void t0_interrupt() interrupt 1
  15. {
  16.         TH0 = (65536 - 500)/256;
  17.         TL0 = (65536 - 500)%256;
  18.        
  19.         if(count < jd)
  20.                 pwm = 1;
  21.         else
  22.                 pwm = 0;
  23.         count++;
  24.         count = count%40;
  25. }
  26. void delay()
  27. {
  28.         unsigned char tt=100;
  29.         unsigned char dd=250;
  30.         while(tt--)
  31.         {
  32.                 dd = 250;
  33.                 while(dd--);
  34.         }
  35. }
  36. void main()
  37. {
  38.         jd = 2;
  39.         t0_init();
  40.         delay();
  41.         jd = 3;
  42.         delay();
  43.         jd = 4;
  44.         while(1);
  45.        
  46. }
复制代码

我也迷惑了
回复

使用道具 举报

6#
ID:630001 发表于 2019-11-30 08:37 来自手机 | 只看该作者
liaojiaao 发表于 2019-11-29 15:03
不好意思,我也没搞懂。我看了这位的51单片机控制MG996R舵机源程序。

我也迷惑了

中断函数应该控制的是pwm信号,延时函数写的是为了延长对应时间,保证舵机在此时间内可以转到某个位置,jd(角度)变量则是控制转动角度的变量。按照一定占空比算出来的。这样看来,只需要控制jd count的比例即可转动不同角度。前提就是定时器的赋值问题了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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