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

51单片机怎么驱动伺服电机?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机驱动伺服电机我这个程序思路可行吗?
3 {0 j+ u& |# U
用51单片机来驱动伺服电机,电机连接丝杠,带动丝杠转动。
( N% X0 e& d  D4 J: {$ A 0 V' i  p; k, Y* `9 ^! z% a
驱动伺服电机,跟步进电机差不多,都是输出脉冲。" O; N9 ]2 y6 _+ T9 `9 i9 u4 s  j

/ O) h) B9 k3 V1 r  g1 Z我想用一个程序同时实现几个功能。) S) B6 c4 E& d5 L$ E! [2 A

8 Q1 y  \) J; F* ~( f: {功能:点动(点一下,动一下)、正反转改变、加减速、停止
& E( _$ ?0 I. h我是这样想:5 w) e. U9 ]$ I4 F. B
简单的话,就多设几个按键,通过按键,按哪个就实现哪个功能。. F+ X( u" l  {" `% k% W, d

' Z9 L+ y# m3 _% Y$ j复杂的话,就设置3个模式,模式1,模式2,模式3。这样就能少用些按键。
. W: l. _3 l/ V) h9 R我想弄复杂点的。
. M  D1 _4 d5 Y6 d# a' w+ }9 f: v9 F4 |: ^
模式1:准备模式,led灯闪烁。- Q; l' M9 B. @6 Y: E/ P4 a+ h
模式2:自由模式,按键2——点动,按键3——只发送4000个脉冲,按键4——正反转改变
7 C" E; }/ z' q7 C3 S模式3:往复循环模式(用限位开关改变方向),按键2——加速,按键3——减速,按键4——停止/启动
( Q. d4 C9 S4 Q+ G4 m* n# J& I
% J' C: C4 J9 E' F$ k$ H通过按键1切换模式' ~, E; ]: P8 S* C  ~
8 S  x. j1 E, x& a) P3 f
想法是:
- B) S5 |6 l9 B, t: `1、用外部中断来做按键1设置,按一下按键1,就进行外部中断,外部中断程序里,标志mode++,回到程序,判断标志mode是否改变,改变了就跳出程序,回到主函数,找到相应的模式,进入相应的程序。
+ X- \9 A8 D2 y; ]6 {; X2、模式3,用内部中断,来不断发出脉冲,通过按键2、3改变频率,实现加减速。

8 q1 y! z& }' b+ i3 j) y, [3 E* D. Q9 b# g

该用户从未签到

2#
发表于 2020-5-11 10:02 | 只看该作者
程序:  h- I* f" o9 {; p7 ^9 q
#include <reg52.h>. S/ W$ ^+ R7 U7 k8 ^
#define uint unsigned int6 j0 Z* E8 I% B; E6 S: z: B
#define uchar unsigned char
! W" `" u2 k2 |/ s, F( @# w1 O1 _+ W/ V. W; T, p' G; E: T- {
//先省略内外部中断程序
7 G9 k& g3 \+ I" Wvoid main()1 ]6 d* E$ H* [2 V+ Q
{
0 ?* ~  F/ C1 g  V/ Y; @   while(1)
+ c2 A( c" @1 Z# i  {, f& x) I& Z" ^$ B8 h
     while(1)
% V7 q2 {+ }/ s! }+ v6 [        {/ T! w9 N$ H) w% R( f
               if(key1 == 0)  //这个就是按键1,切换模式。用1根杜邦线把P32和P37相接,每按下按键1就会进入一次中断。/ T: E6 R# h! Q
                        {
+ Q7 k1 O3 M! p                                delay(20);//按键消抖3 S5 b2 n2 p5 c
                                if(key1 == 0)
/ V3 K1 s) J, B! s+ _8 {                                {
3 {- y( S# W7 s                                        flag = 0;) f: m: P0 i, k& \
                                        flag = 0;//产生低电平
1 d' m$ D5 x) P1 E4 H4 y                                        flag = 1;//结束低电平* [; s3 c! k0 J" [# t
                                        while(!key1);//松手检测
( h6 N: v) F. F# S$ Y* T+ K                                }        ; E, e) O7 L$ M2 b6 y+ |, K, {2 F
                        }0 s/ C: Q3 y( V/ @: z
4 x8 G4 H6 ^& k( `9 l+ i* y
                if(1 == mode)1 a8 \" `- m; y2 i/ Y
                        mode_1();  //检测到mode等于1,就进入mode_1函数里面
/ v$ T+ ~+ U; i9 K& j1 A                if(2 == mode)1 w" \' c; p) v/ g) W9 j/ g' @
                        mode_2();  //检测到mode等于2,就进入mode_2函数里面, z, O- C. ?: \! s) p
                if3 == mode), ?; }! Y! H. n, N, b5 o0 s  P
                        mode_3();  //检测到mode等于3,就进入mode_3函数里面
! q1 p8 j/ \$ c5 ~2 K( o7 C7 y                                
5 ^  \$ ~! H9 i- w        }: e) a6 E3 o; r& f- G" r; j5 @1 i

" a/ o  O6 m( J$ V) g4 ?1 v  }  , \/ o7 M/ H& r& F' U- c9 o
}) k/ v7 \8 f: j7 x+ @$ p4 ~

1 A/ {6 ~$ ?/ D3 Z& o4 b+ [mode_1()  模式1
1 e5 O. q2 J8 ~9 u8 \- d& H+ n{( l' C7 J, j' j0 q# P: j
    led灯闪烁;4 C" R5 l- {2 @4 @. }% i( M' f9 p- J
    判断标志mode是否改;(若改变,return跳出mode_1函数,回到主函数,根据标志mode进入子函数)
& n+ b7 @  o& x- a  N- @}. z9 z: W- c. [, [; ^

, f# x. a" K8 N& G; Omode_2() 模式2& X  w3 H/ C! K- f/ J: R
{
: P7 t3 c% W( R2 d6 e    按键2,就实现点动;
5 G* g4 `" u. Y$ s: e& x% U$ }    按键3,发送4000个脉冲;
% ~4 \/ _" ^0 E: s    按键4,正反转改变;- ^" c5 V( \- Y1 x2 o2 h; j
    判断标志mode是否改;(若改变,return跳出mode_2函数,回到主函数,根据标志mode进入子函数)5 m2 t' _) D' x0 ]
}
1 O6 m1 M$ e- z4 U" r- p2 D2 s" z9 ^% X
mode_3() 模式3, U: s% D* ^2 i+ q# x' _
{0 @3 @% U( _/ f9 ?$ N6 t" P
    内部中断函数;$ d4 h: [! Q/ `( p* k0 Y4 [
    按键2,加速;
& s5 e- U' u' ?. Y" P4 k    按键3,减速;
5 ]% M- x4 t; W1 c( w$ V    按键4,停止发送脉冲/启动发送脉冲;8 `' a; P# q7 q2 y
    判断标志mode是否改;(若改变,return跳出mode_2函数,回到主函数,根据标志mode进入子函数)0 S; u, J% t" @5 y3 O
}
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2020-5-11 14:34 | 只看该作者
    应该没问题的,关键是控制发脉冲的个数。现实中用到很多的
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 07:20 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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