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

51单片机直流电机与舵机冲突怎么办? 是电压不够吗?

[复制链接]
  • TA的每日心情
    开心
    2020-7-28 15:35
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-2-3 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    不连接直流电机,舵机可以正常工作。只要连接舵机就不能正常工作。(是电压不够吗?)#include <REGX52.H>
    5 T5 c8 v4 X* r* F) M% Xtypedef unsigned int u16;          //对数据类型进行声明定义
    0 }$ z% ~0 j3 R+ G8 r, gtypedef unsigned char u8;
    $ B- p$ Y7 s0 F7 ^- Dsbit IRIN=P3^2;
    $ I! b* f2 Q1 J+ P4 J' b  H. Tu8 IrValue[6];
    & m8 m2 y3 L$ o: gu8 time,s1,s2,aa,bb,cc,dd,v,z=1;% {+ t6 |, B9 Y/ t  h
    u16 aaa,bbb;
    4 h+ p- G# s6 Cvoid delay(u16 i)
    , X/ W9 E: U+ r{) A$ B! `9 X# ?* B' h9 {6 H" @
            while(i--);        
    * G5 d  @1 G. u9 k5 j% I}8 k! x; s1 k2 O9 o# Z
    void IrInit()' v1 o9 p# V9 i. D3 ]+ {  d
    {
    & L2 [  l% t4 l/ ]        IT0=1;//下降沿触发8 p) d9 M7 @* y* c! t  n
            EX0=1;//打开中断0允许
    3 P! N+ a  s4 E7 F7 E2 B! o        EA=1;        //打开总中断
    : m9 X. D! s' ~2 Q% @0 ~2 d8 T
    , z9 m7 @6 d2 d; Z+ W% l

    7 ~" \0 b1 p- [' I8 X        IRIN=1;//初始化端口
    3 j% C. M. ]* h& R3 n}
    ( m: R3 _% l  M. k# l  Evoid ReadIr() interrupt 0
    1 R: d/ ^+ Y6 v/ @2 z1 L{
    $ H( B  }! N! @6 j* u+ O) g8 C        u8 j,k;
    & Y% O3 {; r, P        u16 err;
    - p; _' P# Q2 i: K5 a        Time=0;                                         . o# m$ k5 g$ ?0 w2 f
            delay(700);        //7ms# ]) }3 ?. A# R+ a
            IF(IRIN==0)                //确认是否真的接收到正确的信号8 |6 ^- u0 @1 j: b
            {         ; a/ i' Z2 J6 b; X
                    9 O! Z4 n* [- P9 L% w- X1 O
                    err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
    4 n$ C& B5 K8 _! ~                /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时: `: `+ \( A/ A, B& T
                    侯,程序死在这里*/        
    6 u6 w$ k! _3 {; c+ r. x+ D( v                while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                  / V0 S% O" k$ r/ K3 D/ }% R
                    {                        0 W% i' L8 D2 L4 U$ \3 H
                            delay(1);
    ' b% N; K7 r0 m  m0 i                        err--;4 D. Z& k5 g7 `% m& ]% t
                    }
      _, _) A; E" O$ W- v$ N                if(IRIN==1)                        //如果正确等到9ms低电平
    " b2 r2 A& X# ^% X5 y' q" \                {
    1 G; @0 U2 _: C. B                        err=500;$ u6 r1 \8 q6 K2 m
                            while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去
    6 |; V8 t! C$ e: P0 U; p1 `                        {+ m5 K( `+ \- Q& Z
                                    delay(1);
    - F3 N1 G9 M' l0 r3 G4 h8 [' @                                err--;
    + K+ B& p/ O, l9 q9 J+ P                        }4 x7 X- y! v2 a  ~
                            for(k=0;k<4;k++)                //共有4组数据
    8 k$ A$ V6 k+ ~& m- ?                        {                                
    / H1 V) b5 K/ ~; \0 N                                for(j=0;j<8;j++)        //接收一组数据
    # g3 y/ C5 u% J+ M6 F                                {1 b8 t7 b5 r' U2 C/ A* s  }4 N
    ! H! L; U' _7 n: h+ c) q2 V' x

    2 U* Q( V) `: r9 u" z$ K                                        err=60;               
    ' V( D9 q( n' @4 _' Z! `1 \3 r8 D% n                                        while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
    5 ?- \8 {) f/ t                                        {4 c: q/ o& o. q) g8 L: X, w
                                                    delay(1);1 C1 h; n: B: T" i
                                                    err--;7 O+ \3 `% j  F3 A# G
                                            }, l( w) H9 @" z7 i) B
                                            err=500;
    , P6 n( @/ `. V- f                                        while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
    " Y- @* f: D$ \) j                                        {$ x! {+ p' _# z- C/ c
                                                    delay(10);         //0.1ms" R3 m, w+ k4 [: s! N
                                                    Time++;
    0 o# T! y* H+ K& b                                                err--;
    " M) U) u/ [* N0 _3 s                                                if(Time>30)2 n; f& _+ W  a: O/ Y
                                                    {: \9 B7 u6 {  m4 u+ e9 Z. C
                                                            return;
    2 E0 k  Q' g% [8 [                                                }" p! [) u: Z- a! Z" p
                                            }  o8 B7 k  ]. Q* ^' Q6 F
                                            IrValue[k]>>=1;         //k表示第几组数据, L( p9 ^  }. [5 p, X! ^7 ^
                                            if(Time>=8)                        //如果高电平出现大于565us,那么是1! b3 Q+ d; C0 b5 y  \3 n1 c7 s
                                            {" K) }4 W2 A' B& w3 h6 j& q
                                                    IrValue[k]|=0x80;
    # P/ l/ {2 k" U! {& r) L                                        }
    + c( L' }* M" _                                        Time=0;                //用完时间要重新赋值                                                        
    1 }& g& F7 r$ B6 {7 x3 c6 e9 Q                                }/ O) J0 ]: c6 F7 T
                            }( {4 B( g% n0 n* E0 F$ i7 [  U
                    }
    4 k) C/ k( a: y- @; v0 M3 r                if(IrValue[2]!=~IrValue[3])7 U7 Z; Z' V8 L3 d, F9 d
                    {" l  `( r/ h7 m8 p
                            return;% P# E6 ^2 W+ x1 c4 g
                    }; n1 Q& K- q9 K$ n4 M
            }                        
    ' [) S& E& i. F}3 }  ?( G( J4 M
    void dinit()9 O0 ^0 J. M- w* Z2 y0 ?+ i
    {5 n7 O% P& v9 O, B8 V& T% L
    TMOD=0x11;' j7 `2 X- d' l; }: R( H
    EA=1;
      p# H; ~" f3 m4 p' BET0=1;# \3 |. c/ b2 m+ ]
    ET1=1;1 o: [0 q* M# i9 o3 _. m' n
    TL0 = 0x30;
    & y7 R% |( ^( L$ L9 ?TH0 = 0xfe;
    : y. x( O; |/ G4 DTL1 = 0x87;
    + ?, u* g2 x/ B4 i2 ]3 P+ O; |TH1 = 0xD6;
    4 [) A# _  L' `. dTR1=1;
    + w2 o+ W% h! b) }TR0=1;" _: p% T6 b: P: K! H
    dd=0;+ V3 s1 k, h* t4 m0 G
    cc=0;! ~: l, B& X0 `2 B$ L5 n# H
    aa=3;6 a4 q* p8 u5 L9 r! Z# o! @# d6 X
    bb=0;
    ) b, ~: F! d  U( I: f4 iPT0=1;; P$ i( ^2 E. A* K6 z* N- K
    v=10;
    & P- O9 ^5 K) P7 B  N7 n}2 d1 ^* A2 {# _* _4 e+ P
    void qwer()interrupt 18 O- v- x' g8 @! W" g- r
    {+ H' D. B0 C; V( P' L) @
            TR0=0;
    0 m! o$ b3 ?9 v$ W9 H        TL0 = 0x00;                ' p1 d* w5 Y/ _5 h: D
            TH0 = 0xfe;
    . B* z# l0 |5 s. j# f5 |0 k. ~        if(bb<aa)
    9 ~7 L9 A5 Y7 W& V9 ?        P0_1=1;; I! H9 U' d3 ~2 P8 p3 X9 q8 \9 Y
            else# t  d. g; ^: x' M
            P0_1=0;
    5 \8 {# \  Q, i3 A; `/ v* b2 K1 Z        bb++;; ?/ g0 M8 E' {0 o1 t/ V. }4 i4 V
            bb=bb%40;
    " m' }+ D; j0 @% ~! C6 a9 f        if(s1==1)- j2 Z: S( ~! {8 b3 M3 e+ j
            {
    1 H# j6 j3 P  _. t6 l2 _                aaa++;! {% ~2 r# q0 T% N* L/ D& S6 q1 @
                    if(aaa==1000)
    $ V8 T- p: d* o                {aa=3;6 J  n1 T' T3 L( `8 M
                     s1=0;
    ' a9 a( e9 n9 W0 I! W                 aaa=0;}        ) W* o2 Z2 H; A2 m3 f1 k
            }7 o: C$ \$ Q' l% r' U
            TR0=1;$ \; d; L; G3 n
    }1 T9 p; s9 Z  V8 R) P
    void ert()interrupt 3
    * y/ t4 m2 D" h+ P, u+ b2 ~5 g0 w{
    2 m* O# G: K: E! i  M% D        TR1=0;
    ' a8 |) p) h+ [        TL1 = 0x87;0 |/ ?4 B7 F0 V* Q  Q3 T0 j
            TH1 = 0xD6;        ; ~! L7 K6 j6 ]; E* }+ v9 V
            if(dd<cc)8 O4 Q3 ^/ r& q0 _, K
               P1_0=1;
    & i4 E+ C, Q' ?( [+ I          else: |: g3 D1 e% N9 n
               P1_0=0 ;
    ! W7 B: r( c* U8 t& C% \/ Q& q        dd++;4 ~3 J3 X" y; U' ]
            dd=dd%40;
    2 m  G% L6 J5 ?/ z        if(s2==1)
    6 H9 l8 \: _' h! \. a5 j        {
    % c2 R0 v( O7 \$ D# y. L                bbb++;* m% g; d% M) N/ R0 S
                    if(bbb==50)
    ) ^* F* H- F4 j! [& y                {s2=0;cc=0;bbb=0;}
    3 z1 D8 K5 V0 q/ G, \9 e" p        }1 Z! R! y$ m2 T( W# `5 Z! Y
            TR1=1;" M% V' k& `8 ?2 B9 {* |& U
    }
    ! B7 d% ]- S+ m/ u7 Y* E+ W. Fvoid main(); d. O" k2 g5 o2 R! {
    {/ t1 Y& i* j$ K7 l' e' W. g2 p
    dinit();! O& M) K* [% ^' u$ C  @
    IrInit();" j/ x( ?: D7 t; x  v
    P1_0=0;1 }( R; H7 Y( X1 ]8 K$ X
    while(1)& G( x9 x( i) _; c. {  F  Q2 l
    {5 \" w8 p# E/ E" ]1 o: N
      if(IrValue[2]==0x08)
    ; u# b' z+ p- u" c( D( `) s4 |  {s1=1;
    4 X* }0 Y8 D9 U/ U- p4 c: `# m* ^5 j" Y  aa=2;0 M0 p" o! V8 A: a% B6 U
      IrValue[2]=0;
    ( K0 O0 H/ z8 u" P3 b6 j& j' ?  }+ {8 ?% j% a) ~, }
      if(IrValue[2]==0x5a)3 t! d3 {" Q0 t$ g
      {s1=1;
    4 V3 t5 |1 z! M0 x- ^   aa=4;
    0 d" C/ x, O$ M2 f4 V   IrValue[2]=0;3 m+ `8 B) g. y" Q$ c# q3 _
      }
    6 X* s) t& z- p8 ^# y, R  if(IrValue[2]==0x18)# F4 j: x1 O. X: d5 F" L& n
      {. N% w- F! `$ Y" l6 I! g* G( H1 d
             cc=v;
    1 X0 ?0 e0 Z) _- }1 K: {         s2=1;" Y+ u* e# O- p
              IrValue[2]=0;
    6 a8 Y: v( H' u( F: `# C  }0 d2 |: r- _' c3 {# |1 X
      if(IrValue[2]==0x1c)
    ) r, ~0 E3 h/ d0 Q( Q  {1 a3 [/ N" Q: m6 R
               v=v+10;
    0 Z. p; I8 {& I" k# A         if(v>40)- W' G' k/ m  {* s/ e* Y
             v=v-40;
    2 X1 M7 f9 f) C2 Y. T5 _' K, W         IrValue[2]=0;
    : f# ~6 K! O) O# x  R  }% @4 d0 J; Q, f$ R1 q) w7 x
    }' U2 j; p; i( f4 F1 ]" F
    }2 j1 i: Z% X; V: B
  • TA的每日心情

    2019-11-19 15:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-2-3 17:16 | 只看该作者
    电压不够是一个可能,另外舵机需要持续稳定的PWM进行控制,如果使用定时器之类的模拟PWM进行控制,当模拟的PWM被打断时,舵机就会动作错误,所以舵机最好用硬件PWM进行控制
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 15:11 , Processed in 0.187500 second(s), 23 queries , Gzip On.

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

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

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