你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32控制直流电机加减速正反转(程序+仿真)

[复制链接]
STMCU小助手 发布时间:2022-5-31 19:00
本设计:
基于STM32控制直流电机加减速正反转设计(程序+仿真+论文)
仿真:proteus8.9
程序编译器:keil 5
编程语言:C语言
编号C0011
$ s+ q8 l. ?- x% }, n% ]$ A& S
功能说明:
本设计由STM32F103、L298N电机驱动电路、按键电路组成。
1.通过按键可以控制电机,正转、反转、加速、减速、停止。
2.档位分4档,并且可以通过按键顺序正转、反转、加速、减速、停止。
3.档位可以自定义。
附赠相关论文,根据实物写的,与仿真功能基本一致。

0 `  Y0 M% e# S3 W
仿真图(提供源文件):
640 (2).png
2 H4 F, n3 V6 d  L/ n6 X
640 (1).png

( G8 y8 W' V: [8 K
源程序(提供源文件):
640.png

0 J; a$ o- R( R( i& u- Y1 u
以下为部分程序:
  1. ! s. G/ a. _. J  a4 q& |3 t5 v
  2. int main(void)( E9 e0 o, `. K! ~) A+ ^" {, g( t
  3. {% m: x6 z% w9 i8 |! j6 g% L
  4.     delay_init();            //延时函数初始化+ @4 o. H1 Y5 _% w% O! }
  5. //    uart_init(9600);        //串口初始化为1152004 S$ h. G, W5 w3 Z
  6.     //  uart2_init(9600)    ;1 o. o1 O# X; D
  7.     TIM3_Int_Init(10, 7199); //定时器3 \; ]$ W  h0 {9 z
  8.     LED_Init();             //初始化与LED连接的硬件接口- P& X2 T4 ]1 _4 B# [! Q/ }2 R+ W# r
  9.     KEY_Init();
    8 o2 K3 A, J2 E
  10.     Lcd_GPIO_init();  `3 N2 q4 b0 A2 c
  11.     Lcd_Init();
    8 ~; q8 g* W6 W% z  W# G2 \% ?, P0 P
  12.     IN1 = 1;        //方向控制: H8 o  g: Y7 h* B  m( h
  13.     IN2 = 0;
    1 [! p2 F; }6 p9 _( T
  14.     pwmRigh = 0;    //pwm调整,电机转速调整
    * b9 O* Q1 J4 ]6 o5 }( ^, l0 ]
  15.     Lcd_Puts(0, 0, (unsigned char *)dis0);
    # l2 l( L4 g6 x; ?  X
  16.     sprintf(dis2,"SPEED:%d",pwmRigh);
    8 ]! S! t1 s0 a4 e) @& g9 y
  17.     Lcd_Puts(0, 1, (unsigned char *)dis2);
    2 i1 D& u+ G0 m6 W& U5 R: L# b
  18.      Lcd_Puts(8, 0, (unsigned char *)dis3);. x2 v4 z5 T5 T/ t7 z9 A6 L
  19.     while(1)% l" m3 k5 ]8 p: Q$ Y
  20.     {8 U) U9 Q4 Y5 g% g+ R: u
  21.         if((key1 == 0) || (key2 == 0) || (key3 == 0) || (key4 == 0) || (key5 == 0))      //检测到按键按下
    3 }1 ^" U8 O" o8 Q
  22.         {
    4 s7 T5 ]* n  d1 \- q: e
  23. //            delay_ms(1);   //小抖动仿真不需要加
    : o9 Y- k7 s, K4 I+ ]# s; P
  24.             if(rekey == 0)
    / g4 g+ f1 n# n) n, I1 o
  25.             {
    ! }- r, X5 q+ V) m1 m. Q
  26.                 if(key1 == 0)  //检测是否按下: f* U5 e) l+ x9 Q1 e  G
  27.                 {
    ! V8 {' v3 _  ~6 L4 n. _
  28.                     rekey = 1;
    $ `" z6 `, R9 i+ f4 u& t) z) E0 D
  29.                     IN1 = 1;        //方向控制1 w/ X# p3 E# Z
  30.                     IN2 = 0;                   ! Y, B3 Y# c! \
  31.                     Lcd_Puts(0, 0, (unsigned char *)dis0);
    & L  z6 [0 S( t0 t
  32.                      Lcd_Puts(8, 0, (unsigned char *)dis3);0 n# o% Z9 _9 L! E! i9 E; ~% Y
  33.                 }  E) ~1 D, _& q; R& [
  34.                 else if(key2 == 0) //设置值键
    : }, a. l" F0 M) Z) ?4 n. o
  35.                 {) E6 \- G  t- H/ O  B! q2 q
  36.                     rekey = 1;+ W% A8 V1 H$ n% e7 a* R  q2 r* g
  37.                     IN1 = 0;        //方向控制
    % G$ J' j. K! M- N5 E" ^: f' P3 o/ v
  38.                     IN2 = 1;
    4 y" F0 T, p2 I0 t, I" |
  39.                     Lcd_Puts(0, 0, (unsigned char *)dis1);
    ' ?$ b# o9 N3 f! U8 S
  40.                      Lcd_Puts(8, 0, (unsigned char *)dis3);
    9 x8 s* y$ S, V0 Q: ?  p
  41.                 }  T% y0 U" q4 b4 Y/ ?* o
  42.                 else if(key3 == 0) //设置值键' ?- ?  X# U+ b- L- U; o% ~
  43.                 {# t  T4 R1 B, F" X
  44.                     rekey = 1;% \6 W3 |+ ]# V+ j& l$ U
  45.                     if(pwmRigh < 8)pwmRigh = pwmRigh + 2; //pwm 调速3 J5 Z9 g0 [' n! }: d2 ^
  46.                     sprintf(dis2,"SPEED:%d",pwmRigh/2);
    7 ?6 ?, O0 w: A5 |" e
  47.                     Lcd_Puts(0, 1, (unsigned char *)dis2);' h$ V7 T, d1 S. H) r; \1 F' W
  48.                 }
    2 }: r- j4 t1 w# W1 Q5 `
  49.                 else if(key4 == 0) //设置值键
    6 k2 X: ^6 H  j
  50.                 {
    6 h- b( I. J9 y  j$ z) U0 }
  51.                     rekey = 1;0 m% v0 N% l* m! z* V( M' |
  52.                     if(pwmRigh >= 2)pwmRigh = pwmRigh - 1; //pwm 调速
    , x+ i+ D# H, i# w
  53.                     sprintf(dis2,"SPEED:%d",pwmRigh/2);
    & b2 K# E" @5 K0 ~2 P6 C
  54.                     Lcd_Puts(0, 1, (unsigned char *)dis2);
    " h, @! m) n" K2 }! e6 |' {
  55.                 }
    6 l% W, Y' h& n8 N& R
  56.                 else if(key5 == 0) //设置值键
    " ]0 [9 B3 |. g8 p2 d( E3 _* R' y
  57.                 {
    & G, k" l% I9 X
  58.                     rekey = 1;
    9 U7 M/ k! k7 t+ q  S  b
  59.                     IN1 = 0;        //方向控制# g$ {9 N6 {) ^: M
  60.                     IN2 = 0;; D+ K6 d: C0 U1 t
  61.                     Lcd_Puts(8, 0, (unsigned char *)dis4);
    " }0 b9 W9 L8 V5 n2 Q/ h$ e' _
  62.                 }2 @7 X/ \! v9 }. d) w' y* a  }
  63.             }
    2 j5 k- |& E; K" G% [' D- x
  64.         }7 l+ O# G( L7 m' v  c
  65.         else
    . T6 q) t) o; i6 {! l' X
  66.         {
    - y( S3 u  v1 p" w! {8 b
  67.             rekey = 0;  //防止重复检测到按键# P) |: X! k9 [. r5 p- g) h
  68.         }: i. x$ d+ j) i. e* Y
  69.         delay_ms(10);+ r) n6 z/ w6 f
  70.     }. `6 O' _# R7 q! w9 R" t; T
  71. }
复制代码
' ~7 s  S. }& g3 U% q6 w" L
+ S( j( E' E) s7 O
收藏 评论0 发布时间:2022-5-31 19:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版