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

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

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

* N! O. J7 M9 Z/ T& T/ [/ g+ y  a
640 (1).png

/ _) F" ~7 a5 J2 M# z& D
源程序(提供源文件):
640.png

$ r3 H9 \, ]' M, ]+ x: F
以下为部分程序:

  1. 9 X  @/ L- T+ G; {, q
  2. int main(void)# Z, B% ]( M) |! p( Z. K
  3. {
    2 T0 Y4 j( G9 V( C/ g6 h! [
  4.     delay_init();            //延时函数初始化0 Q+ s5 N0 d/ k* M$ ?+ |
  5. //    uart_init(9600);        //串口初始化为115200
    3 w) n, S: A% }0 R, e& Q
  6.     //  uart2_init(9600)    ;0 C6 U  ]/ h' \" N4 R1 a. M
  7.     TIM3_Int_Init(10, 7199); //定时器
    + o  ^$ T+ u0 \& o( X
  8.     LED_Init();             //初始化与LED连接的硬件接口
    ; y0 X. _$ b3 ~) Y. j5 k7 J8 C* H
  9.     KEY_Init();
    . I4 q! H+ ]: o2 _" H
  10.     Lcd_GPIO_init();- `  W2 [, t" @6 a" ?
  11.     Lcd_Init();; k& _1 n$ C: ~$ C; G
  12.     IN1 = 1;        //方向控制
    ) u% h% I% D: w- D& L
  13.     IN2 = 0;
    1 l' e7 {, S( d$ s' p
  14.     pwmRigh = 0;    //pwm调整,电机转速调整
    7 _) F4 m* }0 ?& n( ~
  15.     Lcd_Puts(0, 0, (unsigned char *)dis0);5 s! g# S: F, l* f
  16.     sprintf(dis2,"SPEED:%d",pwmRigh);7 J! U$ P3 |# U: A4 D
  17.     Lcd_Puts(0, 1, (unsigned char *)dis2);
    6 i6 R4 t- b3 V9 A5 W$ Z6 c
  18.      Lcd_Puts(8, 0, (unsigned char *)dis3);
    # k- G* J+ r; @6 X7 z, }% T
  19.     while(1)
    ' B1 v- |) }3 _7 \
  20.     {
    4 x" N/ N2 F8 l! N
  21.         if((key1 == 0) || (key2 == 0) || (key3 == 0) || (key4 == 0) || (key5 == 0))      //检测到按键按下9 P0 j5 R# V4 r! I+ w9 r0 x% s  A
  22.         {
      ?( C( O. \, N) |# s
  23. //            delay_ms(1);   //小抖动仿真不需要加( E4 Q4 {. |5 W. m+ s' T) z
  24.             if(rekey == 0)
    2 ]8 f1 ~! s2 x: ~
  25.             {
    " z0 g3 @5 E* z! J- `6 g, m
  26.                 if(key1 == 0)  //检测是否按下5 f* Q- C0 P7 e, r% X6 [
  27.                 {
    . ^( {% z! O5 d3 X, y
  28.                     rekey = 1;9 e( E! @+ {* t
  29.                     IN1 = 1;        //方向控制$ T, v' K1 h) ?2 L
  30.                     IN2 = 0;                   * N2 \" J  _7 {4 a0 L
  31.                     Lcd_Puts(0, 0, (unsigned char *)dis0);7 ~9 Y( e, a3 a
  32.                      Lcd_Puts(8, 0, (unsigned char *)dis3);
    ! n* l9 w1 q+ ?( r
  33.                 }; H7 W8 a. t  ~: @3 h
  34.                 else if(key2 == 0) //设置值键' t4 O5 ^9 B: ^" }1 _
  35.                 {! T* o8 j* ~. H# O
  36.                     rekey = 1;: o3 U' ~4 V: x/ d1 ~1 c
  37.                     IN1 = 0;        //方向控制& M# r! H( G" y+ Q
  38.                     IN2 = 1;3 `. Q9 Z9 W7 w
  39.                     Lcd_Puts(0, 0, (unsigned char *)dis1);3 }- ~- g5 _6 c) w
  40.                      Lcd_Puts(8, 0, (unsigned char *)dis3);
    . P( c& E4 L, z4 n8 Z: I! I& C
  41.                 }' B" L+ [, ]+ ~, Q" f8 k* ^
  42.                 else if(key3 == 0) //设置值键
    9 Q/ H- L. s( ~. V9 n2 l/ H( q
  43.                 {
    7 \  K7 {" F5 j( t: n8 f5 @
  44.                     rekey = 1;
    % w  t4 |3 H* R4 Q' W4 D
  45.                     if(pwmRigh < 8)pwmRigh = pwmRigh + 2; //pwm 调速" N& H+ X. ~- _& h  t
  46.                     sprintf(dis2,"SPEED:%d",pwmRigh/2);- Z* p+ `) `& I3 i# x
  47.                     Lcd_Puts(0, 1, (unsigned char *)dis2);
    $ I' }& Y- j: p4 L) s
  48.                 }6 }2 a9 z6 @. z- `! P
  49.                 else if(key4 == 0) //设置值键
    * }. F$ S; N# v
  50.                 {; p  I* {# G  V9 J. i( H8 O
  51.                     rekey = 1;
    / K  V/ r1 A$ j  H# u
  52.                     if(pwmRigh >= 2)pwmRigh = pwmRigh - 1; //pwm 调速
    % b2 M. @' L1 x% H" ~
  53.                     sprintf(dis2,"SPEED:%d",pwmRigh/2);) A2 Y& @  i; G3 B  G4 t" p
  54.                     Lcd_Puts(0, 1, (unsigned char *)dis2);
    ' U+ B* T3 k% U7 i3 k6 ^4 e
  55.                 }: j1 U) w: `3 w, z! a
  56.                 else if(key5 == 0) //设置值键
    $ A) U% I- U, G1 A2 P) ^& ]
  57.                 {1 k$ |9 F. k# j
  58.                     rekey = 1;) D6 Q8 s" T! B* p4 x+ N
  59.                     IN1 = 0;        //方向控制, G0 v+ V+ d, w
  60.                     IN2 = 0;
    + p; e* ~. p+ c. H' _8 ]! _5 O0 {
  61.                     Lcd_Puts(8, 0, (unsigned char *)dis4);
    5 w; ^0 O4 }) F
  62.                 }
    ) {9 l$ b0 E( J3 H+ L4 A5 P
  63.             }
    - }  `! s' z4 H4 q
  64.         }8 y: o. ?& c# ^* x6 j0 [
  65.         else
    , X# V# v9 \) D! y: d0 k4 x& D% k
  66.         {  S  \. A! S; _& E+ D
  67.             rekey = 0;  //防止重复检测到按键
    * z4 w9 M& ?1 b2 \$ m
  68.         }
    , E& A( r$ j9 F' W
  69.         delay_ms(10);6 o$ O: d7 b1 K+ y. |( {
  70.     }
    9 H  T, k& S8 W2 D4 _6 ?
  71. }
复制代码
5 O5 n) v% O- n4 ~" o6 Q* _4 Z
0 R: |5 D) O/ d6 D
赞 收藏 评论0 发布时间:2022-5-31 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版