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

【经验分享】STM32控制舵机

[复制链接]
STMCU小助手 发布时间:2022-6-21 13:26
( Q" I- R$ ]/ w% K
b6b361444887c2e3a7e4aa422530dbde.png
5 y# G' {+ e" i5 ?; {! Y3 {6 j5 |% l
在电子领域,舵机主要用于机器人项目,因为它们的准确性和易于操作性。舵机体积更小,而且非常有效和节能。它们提供高扭矩,根据电机规格可用于提升或推动重物。在本文中,我们将了解舵机以及如何将舵机与 STM32F103C8 板连接。还连接了一个电位器来改变舵机轴的位置,并连接了一个 LCD 来显示角度值。
. n: M* k7 Y  r/ j+ e2 {; q. O* G# \" k) B# m4 l' p' T7 E
电路图和连接

' H1 @  l: W' H6 G6 |' m) J; l$ ~% R5 P7 q; @, K5 ^; l
5be9b9310848b45a6e2494919f62f471.png ' }# V6 W  k$ h5 R8 y1 W) Y0 i, b

4 z  e) S; h! h3 q$ r* S( x# B- ~: K. D  E$ _) B$ D$ Q
SMT32F103C8 引脚详细信息
( J. o( [1 X+ o: E! `$ O- C% ?+ R# _: m/ `6 A
在STM32F103C8 中,我们有 10 个ADC 引脚(PA0-PB1),这里我们使用其中一个(PA3),去读取模拟信号。通过电位器设置舵机的轴位置。2 V" X1 I; y  v/ [' I) O/ N
, W. k4 Q  e0 E8 V) g; n# a
此外,STM32 有 15 个PWM 引脚(PA0、PA1、PA2、PA3、PA6、PA7、PA8、PA9、PA10、PB0、PB1、PB6、PB7、PB8、PB9),我们同样只用其中一个引脚向舵机的PWM引脚提供脉冲(通常为橙色)。# ]: [6 \' @% S! T3 q
' k& ]' ^0 O  {1 X
: c& Q+ o6 V' w& D* J- C
STM32F103C8与LCD的连接
6 z  o3 w$ V( H% L; K$ E- [" Z+ y
8 J; g. ~7 D* {5 d" w$ [$ K
c9a9a992c706b9ecb8ee405c5567a99c.jpg
  S( T( b0 Y7 _# ?$ R4 |
( y. o" I  d4 K4 e+ r9 H舵机与STM32F103C8的连接
/ q/ a! q" t+ G5 m7 C, W% t3 m) f) E" K6 B2 Z; J, z
014009ef44dd3a1c0b27b3d929d4e2fd.jpg
1 `  p1 {" P8 D- B, e9 F* F+ S6 y6 |7 e! K/ P' n. r$ w0 D& N0 m
电位器连接

. x6 R& h' C. R0 j) Z
- G; Z; W! I) Q9 s  {/ _6 b我们在这里使用了两个电位器( Z8 N: g% ^; k: X4 o0 p
! ~5 D; Z; p/ Q1 p) `; F5 w4 n
1.其中一个与LCD连接的用来改变 LCD 的对比度。它有 3 个引脚,中间引脚连接到 LCD 的 V0,两端分别接+5V,GND。
1 p) v6 n8 n8 M# I3 \- K/ n. N5 A, g
2 b+ [0 e( h4 {$ n5 o$ Y& [- a2.另一个用来控制模拟电压输入来改变舵机的轴位,中间输出接STM32的(PA3),两端分别接+3.3V,GND。
, f- e  y. f8 d! F4 r6 w, [9 |: A. W# r

" }/ T* Y6 F" {9 o* U; h2 d& |- C程序
) h/ ^; o* q$ S  r& G+ i0 ]还是在Arduino IDE 中编程。) c' S+ A1 Y6 T' `* @4 ?

% E4 t" K" l- Q# x' o7 p) z
  1. #include<Servo.h> //舵机库
    ' a9 ^7 j& e6 r+ N; {5 D
  2. #include<LiquidCrystal.h> //LCD 库
    0 M8 m  q* b1 ]4 O$ a! o4 i
  3. //声明LCD 引脚连接到STM32 的哪个引脚
    " @! C. |* F/ g4 ~$ l
  4. const int rs = PB0, en = PB1, d4 = PB10 , d5 = PB11 , d6 = PC13, d7 = PC14;
    9 Z+ f) r/ I$ d2 f0 J3 c) l8 d
  5. LiquidCrystal lcd(rs,en,d4,d5,d6,d7); //初始化 LCD
    ' M: b6 P$ B/ D+ L& L% ^1 b5 t" k1 t
  6. int servoPin = PA0; //舵机PWM
    $ P, k% W7 J7 H
  7. int potPin = PA3; //电位器ADC输入3 J! x' J0 U" Z: p
  8. Servo servo; // Servo类型# G( g- e" |% K, X5 X
  9. void setup()
    6 y$ t7 x) h5 m& |

  10. 9 U3 x9 ?  @8 q$ Q  u
  11. {
    , P! B! h9 I2 @# W! g

  12. 2 g/ m( _- ^) o3 \
  13.   lcd.begin(16,2); //16*2类型LCD
    ) E0 T( \) ^8 ~8 q, ?& }! \; l+ b6 b
  14.   lcd.setCursor(0,0); //设置光标在第一行第一列7 d- I7 n7 C* ~+ w
  15.   lcd.print("Hello World"); //LCD显示Hello World
    " K/ u4 l, o% t5 N
  16.   lcd.setCursor(0,1); //将光标设置在第二行第一列
    & d) ?  U+ ^) O+ |" @
  17.   lcd.print("SERVO WITH STM32"); // SERVO WITH STM32. y5 Y9 b+ e0 K9 g
  18.   delay(3000); //延时3秒
    2 o' W7 u4 f' G2 X# \( {
  19.   lcd.clear(); //清屏! a( l8 @  |* t( V: X- e1 U
  20.   servo.attach(servoPin); // servoPin (即 PA0)作为舵机控制) g4 Z: Y0 l; K; B# j9 _+ A4 [
  21. }
    # |) B  W- G3 V' q$ ]2 u
  22. 3 ?' `4 h  C  l/ |2 W; o
  23. void loop()( z6 w- w" n  h' w
  24. {  V; P. J3 W) B* Z# o
  25.   lcd.clear();
    0 k! f! H1 y3 v, f1 c9 _2 q; @( W, g# F
  26.   int angle; //声明舵机位置变量
    , K: f) |( g! {% U
  27.   int reading;//声明读取的ACD值
    6 q7 E2 e' h. d
  28.   reading = analogRead(potPin); //STM32 PA3将模拟电压 (0-3.3) 转换为数字形式
    7 ~% |. p) ?) x7 x1 K0 c. |9 X( o
  29.   angle = map(reading, 0, 4096, 0, 170);// reading在0-4096中的映射重新映射到0-170; q) {: q8 r+ ~4 U% x7 k' d* e; h
  30.   servo.write(angle); //设置舵机位置
    % C$ U& R1 M& ^9 p. T' O: Q
  31.   lcd.setCursor(0,0); //设置LCD光标在第一行第一列3 v; o7 H/ o& [7 c* f
  32.   lcd.print("ANGLE:"); //LCD 显示 ANGLE:8 d3 x" U/ e* [3 U% o6 o6 t5 X
  33.   lcd.print(angle); //LCD 显示舵机位置+ Y; V1 l0 a, e8 C$ t+ _' y
  34.   delay(100); //延时100ms
    ) u! R+ S  x  }  b2 G' B
  35. }
    / Z5 S+ q  w0 M- D0 }5 k# g

  36. / x; K% E( I- w+ M5 |3 M$ O( b+ t
复制代码
1 {' |& p* k9 I

" y' Z0 ?. d$ X* Z" O
赞 收藏 评论0 发布时间:2022-6-21 13:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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