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

【经验分享】STM32f1之简单控制继电器模块

[复制链接]
STMCU小助手 发布时间:2022-5-14 20:38
前言
. D) I% ^$ I9 a% ?5 }+ ~( [4 u. B' \; v7 q! f
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。
3 I6 b5 z" k6 ]/ M% V, E( ?
4 l8 H$ r4 j5 K0 m) Z O7}]~6HB_35UY3E`TOBAU.png
7 P; g) w' w) z3 u( c+ u5 p4 K4 p: r& E: K
一、继电器的使用(重要!!!)
. q0 e+ {' f4 c其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端6 s0 G8 t! ]* I* J, f, E

- `: _- G6 Z. U% d一般情况下是常闭状态; \0 s: I+ h, [( C+ Z
) J6 z/ V5 @( C+ A& F) B
这里简单地描述一下大部分的继电器模块:
* t  Z* n8 c8 l2 f
4 |( P# @( B, zVcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。  `8 X2 k+ w' U7 g" {# C9 b. I& K

/ P. C0 o  u' n/ s G4$)<]C1YNKLZHCF[3S2V.png
& T( `2 X% w$ o& }8 }9 I  M" |) y5 R4 ?  u2 ^' P
相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接8 ?6 l1 l) _# d2 m3 P  U, o# \+ W$ V
) @' X6 k4 O! j
二、写个代码检验

$ N* p5 d$ T# }5 d下面我就简单的实现以下它的开关功能吧
  {2 B$ K$ R( B3 r
' P' p% Q$ M! d  `/ K# \
  1. #include "jdq.h"
    ( i2 I. W% k' V( u( B6 O) ]- w
  2. 9 I! j$ }' U  x
  3.   @$ {8 U  n. ?. D1 v3 v- e, T8 M0 ]3 }
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化7 ^& B# t: v: f* f* m( f
  5. {
    ' T. m7 ~$ |1 H  ^& k1 ]2 c6 J
  6.   GPIO_InitTypeDef     GPIO_InitStructure;" s: M8 n! e3 h- K* y& {- h, N
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    8 G+ T/ T" M1 E# V) X
  8.         
    1 L% ?8 y9 u! d9 ^4 \
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    - J) |" H1 ?* F! g# N6 r
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
    * \' D+ }/ }( o
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  U) K7 J0 j' c& s
  12.         5 \. y  `7 X% D: Z
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    " r7 i( L5 ^9 M8 U$ F
  14.         
    # Z4 K1 g" j+ M  o4 r6 p
  15. }         
    7 c. B- t! e3 [, r% |% J
  16. + h6 X2 S5 p4 A6 p3 V( l, m
  17. void relay_on(void)//PB7置11 ^6 ~3 r- E" T3 K3 v
  18. {3 C5 P) T& k/ D
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    % b* b3 B* [4 d: g: w0 J2 ?. N
  20. }4 o, Y, m/ Q. B' l3 m- G

  21. 3 |6 A8 m8 M( l8 C9 N, C/ d  ?
  22. void relay_off(void)//PB7置0. x$ x+ ]8 d8 B) j' V2 _! x) y
  23. { / E. @- j& ]# _( O& N; n
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);/ y9 q' W' _% p2 T: _4 v5 k
  25. }
复制代码
& I4 B5 T1 L: y' g; C( w: t/ Y
主函数:
  K( y; q" {5 \( V' Q9 h8 x8 _; g- t) O
  1. #include "sys.h"
    3 P+ n0 g2 \/ k) G  b% d: T/ L9 d
  2. #include "delay.h"
    : Z% |4 q$ V. O- p9 K
  3. #include "led.h"8 i7 k& q4 [" ?, |8 q3 e; ]6 U& n
  4. #include "jdq.h"* G  x% b/ X3 H+ y6 a

  5. , ]9 I* W0 \0 D
  6. int main(void)
    : ~+ M" X8 {3 ]1 L
  7. {        8 c5 W% f  g" Z! Z, S$ f& Y5 s% g4 o
  8.         delay_init();                  ! a3 `- p5 E# K$ ?2 c
  9.         LED_Init();                  
    ( t& A( ]9 Q0 ?: I
  10.          relay_init();//继电器初始化2 c5 T; q/ v' j7 }
  11.         while(1)! s! k# U2 N0 ^9 U3 t
  12.         {
      F7 X4 N) X8 Z' A! o  }+ i; \) y

  13. * U( U+ W- s& z: c8 V' u0 U& `
  14.                 relay_off();//置0,即开关置NO,连常开" t! m0 h1 O5 Z1 t' C4 U
  15.                 LED0=0;
    % q+ n. A" d8 ?: \
  16.                 delay_ms(2000);//延时4s左右
    . n) v. I' s7 V0 d3 b
  17.                 delay_ms(2000);
    ! L1 L$ ~  o; z/ R; U
  18.                 delay_ms(2000);
    # f4 g. H3 @" K, |1 i
  19.                 delay_ms(5000);; s1 O) ~6 ^8 Y* m  l+ l
  20.                 delay_ms(5000);' \6 b' g- X$ u. p3 o8 e3 V
  21. - p7 f& G2 @( Y, s' o6 `
  22.                 relay_on();//置1,即开关置NC,连常闭
    ' L% X: F& d% \! p9 U
  23.                 LED0=1;: R) X7 J4 r# Q* a6 g9 l
  24.                 delay_ms(2000);//延时4s左右
    - |  \+ o7 h$ R& i
  25.                 delay_ms(2000);( x7 Z$ J+ P  a# X
  26.                 delay_ms(2000);% D2 @6 {4 w& u$ `! f4 Q' G
  27.                 delay_ms(5000);
    / @9 @5 s4 I7 r$ `. l
  28.                 delay_ms(5000);
    * t$ {7 h  f% v* D
  29.         }4 r. J% f3 w, N
  30. }
复制代码

4 p) \+ l- m- i9 v3 a 效果图如下:2 f, l7 ~! H# ]
; D4 c1 V2 z* m3 `5 E
Y$AM4R22{$M6D[AS]X0}FP9.png
' }% [% Z3 c  K6 c4 t ~PI}8~NHZEH{{%T5S@6D)F4.png
( K4 j7 E! ?% r5 r. J3 {8 S* x9 H) U3 E5 c# w

0 w& c( {: s/ F) p% Q 上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。
  B7 B, z4 V% S; `* y- z/ F
3 U+ V" i! H" ]) W8 y继电器就是小电控制大电电路,切记!
, ^' R/ n" \$ o: P' V& b9 ]0 z
. \- L* m8 ~% ^5 V7 z0 d) p注意继电器大部分都是高电平下连接常闭,低电平连接常开,有部分产家会是反过来,大家买回来如果不确定,可以像我这样做个小实验证一下。
5 _0 k" \& B$ G2 t: i0 g' l' _9 p0 O& U6 y4 F2 E

4 x* z! l2 v) {
  p  o9 [) i2 R0 |- H, q" X
3 o& u- r8 y: F5 X  [  r4 o& T8 V, ~% u& C5 {- D' h
收藏 评论0 发布时间:2022-5-14 20:38

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版