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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
舵机不能控制速度吗?转的太快了,一按不到1秒时间就转到位了。能不能慢慢的转?转它割10秒钟到位
. b- }  S8 p; P4 g+ W( v
. l+ T) I* o3 d

" W/ C5 E. _+ e; S7 E
: t! z2 w6 v9 z' ]+ k. ?
) X0 g4 _$ G: |我的舵机是
( m% ~4 A  {: m( j! n/ _& VMG996R按一个按钮旋转180度,按另一个按钮反转回来,
1 L7 h0 y% S7 X1 A' I2 n* ^感觉速度太快了。能不能慢慢的旋转?5 h# [7 V2 W2 c2 ~1 S: |
我用的8脚单片机型号是STC15W204S,其实用89C52单片机测试也是一样的效果,换下头文件即可,
( H' K; j! ~4 [9 x1 ?4 L' T( |$ Y
3 ^. D4 u. n' b
下面是单片机代码,
. s- P5 s; u- R) y7 B; N3 @+ a网上资料说改定时器中断初始时间,我也改过不同时间(0.1MS至5ms),都没有效果。
. I! n/ P+ \! w% b+ X4 w( C3 K  TH0=0Xfe;
8 g6 P: A0 O8 _  TL0=0X33; //计数初值设置为0.5ms' @5 b2 q4 [5 c3 t7 ^6 u, b# M

9 i1 }5 v+ a3 x  x5 g3 F2 n
6 D: b3 T# X# I2 `/ x3 \$ b' x又说改PWM时间,下面40我改为10至500也还是改变不了速度,还是老样子3 m- b; V& J6 F7 ^
  count++;; y, L+ o: X+ i' ?0 \
  if(count>=40)//原始是=40
. w: N! ?1 {, m( v  T; @  {
/ j0 a$ T9 {3 i' h1 c' L1 S    count=0;. Y* u: a8 ^' Y& g/ P9 o
  }. H* ]. e: u. m) L7 J6 S6 E

2 d$ |% b# H0 h3 B% D( ?$ ^9 V- L% [3 D+ S
老师们,到底要怎么改,才能控制舵机速度?谢谢指导,,
5 P" g, w5 I, w  D/ ~
  • #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);
  •    }
  •   }
  • }
    / B' e! ~5 R1 [* P4 P1 d7 c" @

0 }, Q6 i' @/ o- g; o[color=rgb(51, 102, 153) !important]复制代码
/ ~; Q1 |5 {9 h9 o
[color=rgb(51, 102, 153) !important] EDA365论坛_996舵机按键控制正反转.rar (24.96 KB, 下载次数: 0) 8 r7 I: W! @3 \3 _
; S  b# U7 j1 K/ R" N+ t$ o

该用户从未签到

2#
发表于 2021-8-19 10:33 | 只看该作者
3 _5 |$ c. y$ S' Z4 u% V, q
计数初值设置为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-8-24 16:48 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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