标题: 求助关于模拟舵机的连续转向问题 [打印本页]

作者: 大克汐    时间: 2019-11-29 08:37
标题: 求助关于模拟舵机的连续转向问题
之前一直在搞舵机(stc89c52rc芯片),遇到了不少问题,还望大神相助
问题1,模拟舵机是不是只有0,45,90,135,180这几个角度可以定位,如果不是,如何通过控制pwm信号使得舵机转到某个角度(不要求精确)
       2,如何在仅使用一个定时器的情况下实现舵机在两不同角度内转动。
       3,不同舵机即使在相同程序测试情况下,转动稳定性并不一致,如何对于舵机进行参数调整
       4,一直有看到对于双舵机同角度转动程序,那么若使用两个舵机实现不同角度转动,51单片机的输出能力是否足够。
问题不是太难,但希望大神们能给一些具体一点的回答,我虽然在百度等处搜索了一些资料,但仍觉不能太清楚地理解。无他物相与,唯有谢谢二字奉上,谢谢。
注:舵机型号mg996r,sg90.

作者: liaojiaao    时间: 2019-11-29 12:48
1.舵机不是只有那几个角度。可以通过pwm给舵机周期20ms的高电平时间为1ms到2ms的范围来控制。我在网上看到说是1ms的占空比,往左边极限位置转动,1.5ms时保持不动,2ms时往右边位置转动。但是我也不太清楚如何具体精确控制转动多少,但是你可以在论坛看看,我记得我看到过的
2.额,具体我也不太懂,我没控制过。
3.
4.输出能力不用太考虑,因为只是给信号,不是像电机需要很大的电流一直驱动,只要供上电源,给pwm信号就行了吧我觉得
作者: liaojiaao    时间: 2019-11-29 13:00
3.我看了网上几个舵机,好像他的占空比范围不一样,就是一个周期内高电平最低持续时间有0.5ms的,,只是这个范围不一样,对应的都是0到180度,所以可以在程序里加个中间变量自动转换,pwm变量里面是角度,里面自动按照比例转换成相应占空比。我想大概就是这样。
我室友有个舵机,我下午可以做做实验,贴上代码
作者: 大克汐    时间: 2019-11-29 15:01
liaojiaao 发表于 2019-11-29 13:00
3.我看了网上几个舵机,好像他的占空比范围不一样,就是一个周期内高电平最低持续时间有0.5ms的,,只是这 ...

感谢大佬
作者: liaojiaao    时间: 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. }
复制代码

我也迷惑了
作者: 大克汐    时间: 2019-11-30 08:37
liaojiaao 发表于 2019-11-29 15:03
不好意思,我也没搞懂。我看了这位的51单片机控制MG996R舵机源程序。

我也迷惑了

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1