找回密码
 注册
关于网站域名变更的通知
查看: 854|回复: 2
打印 上一主题 下一主题

单片机+舵机不能控制速度吗?转的太快了,能不能慢慢的转?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-8-19 10:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
舵机不能控制速度吗?转的太快了,一按不到1秒时间就转到位了。能不能慢慢的转?转它割10秒钟到位
0 F- s5 Q6 _8 r- ]3 p) R) M: {( ~, |# b. Q5 C: f

+ R9 Z  b( _) ]% ?. x; o; k
: b1 Q0 V& q  [% N8 Y6 K. B
3 F8 H, i% M$ X7 p9 `7 {我的舵机是
0 i8 i$ ~5 j5 q  Y; _MG996R按一个按钮旋转180度,按另一个按钮反转回来,
) F) v; p0 d; z; n2 D感觉速度太快了。能不能慢慢的旋转?0 f7 R, a8 L) _  W
我用的8脚单片机型号是STC15W204S,其实用89C52单片机测试也是一样的效果,换下头文件即可,
. O6 p  {; q3 y- ], h3 b) Z
. F. C5 A- x% {1 J2 b
下面是单片机代码,7 i' d! D" ~& z( `/ z5 m
网上资料说改定时器中断初始时间,我也改过不同时间(0.1MS至5ms),都没有效果。# K" [5 e  D1 ^$ x* c$ C2 m
  TH0=0Xfe;  B& _$ J* t' h+ T1 u6 @3 X
  TL0=0X33; //计数初值设置为0.5ms
( Y3 T& N2 Z3 r, D* ~* c( I3 E" V$ _! p' W2 M5 V
6 v/ O5 n8 |* M$ ~% ^  E4 n
又说改PWM时间,下面40我改为10至500也还是改变不了速度,还是老样子/ ^0 [' T! x  w9 Y" @
  count++;. w( V8 W+ B7 F) {
  if(count>=40)//原始是=40
8 f4 Q  ^: [) N" U* K6 `  {
8 ]) b5 k6 R. ~& [( y; \% R    count=0;
+ j2 s# F  k/ V* l, c1 j  }; b* C5 U6 ]' M( ^6 |$ w4 A) H

  x1 w1 ^9 F: A3 r/ h- j0 A, F5 u7 L  q  O+ h9 p" G) Q
老师们,到底要怎么改,才能控制舵机速度?谢谢指导,,# N. M7 U5 T! V! a* B8 `
  • #include        "STC15Fxxxx.H"
  • //#include <intrins.h>
  • #define uint  unsigned int            //定义一下方便后面使用
  • //#define uchar unsigned char     //定义一下方便后面使用
  • #define MAIN_Fosc 11059200L//定义主时钟
  • sbit SG_PWM=P3^2;
  • sbit Key_1=P5^4;
  • sbit Key_2=P5^5;
  • unsigned char count=0;
  • unsigned char PWM_count=1;             //1--0度,2--45度,3--90度,4--135度,5--180度
  • void delay(unsigned char i)          //延时
  • {
  •   unsigned char j,k;
  •   for(j=i;j>0;j--)
  •     for(k=125;k>0;k--);
  • }
  • void Timer_Init()
  • {
  •   TMOD=0X01;      //T0定时方式1
  •   TH0=0Xfe;
  •   TL0=0X33;       //计数初值设置为0.5ms          每0.5ms进入一次中断,晶振频率:11.0592MHZ
  •   ET0=1;          //打开定时器0的中断
  •   TR0=1;          //打开定时器0
  •   EA=1;           //开总中断
  • }
  • void Timer() interrupt 1   //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1
  • {
  •   TR0=0;
  •   TH0=0Xfe;
  •   TL0=0X33;       //重新赋计数初值为0.5ms
  •   if(count<=PWM_count)
  •   {
  •     SG_PWM=1;
  •   }
  •   else
  •   {
  •     SG_PWM=0;
  •   }
  •   count++;
  •   if(count>=40)//原始是=40
  •   {
  •     count=0;
  •   }
  •   TR0=1;
  • }
  • void main()
  • {
  •   Timer_Init();
  •   while(1)
  •   {
  •    if(Key_1==0)
  •    {
  •      delay(10);
  •      EA=0;
  •      if(Key_1==0)
  •      {
  •       PWM_count=1;//1--0度
  •       count=0;
  •       EA=1;
  •      }
  •      while(!Key_1);
  •    }
  •    if(Key_2==0)
  •    {
  •      delay(10);
  •      EA=0;
  •      if(Key_2==0)
  •      {
  •       PWM_count=5;//4--135度  转动角度
  •       count=0;
  •       EA=1;
  •      }
  •      while(!Key_2);
  •    }
  •   }
  • }
    8 z7 e. e0 x: t' `# L
% q* A6 a% J( n( P, K/ R' G! L
[color=rgb(51, 102, 153) !important]复制代码
9 A  K) N; L# ~5 X
[color=rgb(51, 102, 153) !important] EDA365论坛_996舵机按键控制正反转.rar (24.96 KB, 下载次数: 0) * z) J4 B8 m3 d3 \" c
/ M' P+ l( R, b" X' E0 x

该用户从未签到

2#
发表于 2021-8-19 10:33 | 只看该作者
3 G, F: \1 K; }3 b& l" y2 V- |' D
计数初值设置为0.5ms每次步进0.1ms暂停?直到2.5ms试试看

该用户从未签到

3#
发表于 2021-8-19 11:12 | 只看该作者
你在开始的时候EA=0; 都不进中断了,一直到 EA=1; 之前,这段时间都没有进中断,舵机都没有操作,直到EA=1; 开中断后,舵机才开始操作,这时候你的角度已经是直接到最后的角度了,中间的操作根本没有起到作用。你先把EA=0 改成 EA=1; 简单点看看效果,再自己细调吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-24 12:26 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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