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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
舵机不能控制速度吗?转的太快了,一按不到1秒时间就转到位了。能不能慢慢的转?转它割10秒钟到位 , f7 \4 a( I; `& E
0 H' H/ _! d% I5 D
' y" U2 a( `; Q$ C; _3 i3 h

% ^4 E+ C+ T0 O" b$ K1 R4 j3 h1 B# u1 X: y) i
我的舵机是
3 J5 K* s- r/ k, ]) W5 ]MG996R按一个按钮旋转180度,按另一个按钮反转回来,
$ s3 b0 ?3 Y9 g. Z感觉速度太快了。能不能慢慢的旋转?7 M5 ^( d: P2 r8 S+ Y( |0 M
我用的8脚单片机型号是STC15W204S,其实用89C52单片机测试也是一样的效果,换下头文件即可,
2 V9 T7 y/ j% {: Y) X
9 E7 I# M% W3 q/ f' _* ?5 q
下面是单片机代码,
3 j$ h2 u" u) s- `网上资料说改定时器中断初始时间,我也改过不同时间(0.1MS至5ms),都没有效果。
+ @7 O+ H' U" L' I  TH0=0Xfe;; b+ u4 s6 s2 z# t, @
  TL0=0X33; //计数初值设置为0.5ms  J! c* s& |& g2 P* }- b0 U

  ^9 H* g4 H7 B, k( Z3 \! h* a  z7 S( r
又说改PWM时间,下面40我改为10至500也还是改变不了速度,还是老样子
/ c3 d6 U. N: J. F1 ]  count++;; h9 u1 ~/ @& K0 e
  if(count>=40)//原始是=40
7 S9 K/ P2 n& F  i' i7 S& Q  {
$ H7 i! D. s7 O    count=0;/ N9 |  k( N$ V! L$ o9 }
  }2 Y' R4 Z6 g2 F9 S) u' [+ P
1 v, E$ i- Y. E  h. |4 ^

! J: T- t9 i; [0 a4 e' {4 ~/ S% ]老师们,到底要怎么改,才能控制舵机速度?谢谢指导,,
, L# K/ _2 s, ~5 M
  • #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);
  •    }
  •   }
  • }
    ' j0 T) o: \0 |" K# @1 P. u9 b

+ k% b/ V! d- g7 x' J[color=rgb(51, 102, 153) !important]复制代码

' b' T5 u  a+ A+ ^" \) E( W) c4 N[color=rgb(51, 102, 153) !important] EDA365论坛_996舵机按键控制正反转.rar (24.96 KB, 下载次数: 0) ; J8 L2 R4 ]3 P6 \  l

' H/ q, x6 f5 k5 W. e$ V* M2 L

该用户从未签到

2#
发表于 2021-8-19 10:33 | 只看该作者
* `8 S6 |7 J' ^* V$ N# u  @
计数初值设置为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-10-9 20:37 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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