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

基于STM32f1之简单控制继电器经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言0 b' K! W" }  [: b- R2 ?5 r. t
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。5 t1 ?6 y/ p) x. N

8 l$ p( k* h* `0 A9 |

1 ~' Z% S, `; Z& d* O+ i# s( g( ~ 20210723215043908.png
% F& Q- ^* o4 F6 H! Z) b
: ], ^% ]' h9 l2 i: s' [
) s# L' Z1 X! K7 u; C
一、继电器的使用1 z2 l2 Z: N8 i- M! N* ~. Z
其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端/ B" W. u  f3 G0 {8 U5 R3 F
- |0 z$ Q; k% C4 K2 e' d4 j$ t

4 M. G8 U+ E5 U: J& \2 Z6 I+ Y一般情况下是常闭状态
0 Y9 M* k+ D$ F5 Y; V- J2 A+ @  ?7 `' o/ p! v
$ B: o- g: A  j& Z- p  u
这里简单地描述一下大部分的继电器模块:
& L$ L5 l& G1 T: R$ R# z
' Q- l9 }- m4 ]

7 ~4 O' j2 r; r6 T! g) C7 Z% vVcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。
! o5 L' i: e0 H8 [+ T! i$ ]4 `2 W" R& G/ E. b, S& _7 g
! `. _! n; {: B- C$ k( O! D
20210723215814833.png
# o8 {. C4 _+ C1 j( w/ y4 @: L
! v# _. q1 r# p

7 L  g/ N' [- P2 U! N- K  A1 c9 q& p8 W  bIn脚输入高电平,COM连着NC: X8 d+ |6 _% L+ S& ?

) s4 Q- n: i. S2 T6 n 20210723220549702.png 7 G3 K% Q/ P) A( y/ e
+ `- W. r1 O' X' Y& R

0 G- Y6 P( ~4 m: n+ u) ?In脚输入低电平,COM连着NO; o2 {8 m6 O; i% v3 s1 `6 b
相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接
6 Y- b7 A4 t* E+ v0 c! H
/ I- r3 H: ^( p7 y/ Y6 u  e5 K
- v# n3 W7 Z9 j% X/ f: o. ^' I
: @! i# l; x! _) q- d
二、写个代码检验
% n  T0 r% Q! d. I% X4 [" Y下面我就简单的实现以下它的开关功能吧& _: |% y* K8 A% P6 w, r: U2 N" `: C
  1. #include "jdq.h"
    2 c- v# K+ |8 `
  2. + f$ d: [; G- W+ J
  3. . {. T7 k3 k1 C' u0 z
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化% a# R# p8 _! D( Y, n$ L- N- K% W
  5. {, u( G/ A) u, \; }
  6.   GPIO_InitTypeDef     GPIO_InitStructure;
    / n" [" ~: d* U2 X
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);' W5 y! u8 F2 N. A
  8.         4 A8 B5 c6 a; H" I! \8 P" g  |8 y8 v
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;5 p) t# {4 N* [/ S6 v$ X9 F$ w
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//5 w5 R2 R- {  c
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    4 O, l6 g4 @9 E# M. A
  12.         % m7 X" s1 @. f' j
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    8 C) P$ g- y6 [% q
  14.         ( `: O% F( h' t5 x4 ~
  15. }          4 P5 Z# N  ^* ]2 [+ L

  16. 1 M/ K: z8 g- N& M" s4 t- `  ^0 H" O
  17. void relay_on(void)//PB7置1
    0 ?9 N* `3 S: Y+ B& D2 v, y, V
  18. {3 x1 v, V) F- W) |
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    8 P, O- i1 Y; L. L. d; B* C
  20. }
    , a/ b* @4 Y! O# u6 v& [
  21. 4 T5 ^9 {1 o; v8 r6 k; P
  22. void relay_off(void)//PB7置0( ~, Z; O2 C& i- v
  23. { ! _7 u  k4 S2 ^  Z: q
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);3 b* L2 I' G! B! [. B
  25. }
复制代码

- f' X( G; o5 g
( ~$ d% N, H* z- r; d
主函数:8 C* a0 }- |8 c0 z* A" G
  1. #include "sys.h"+ X& Q5 ~: a6 S) `% W# o
  2. #include "delay.h": X1 y" g/ {" R. g6 M
  3. #include "led.h"
    - I& p, _! Q7 G* y: v; |
  4. #include "jdq.h"
    ( g+ Z" S; r& |& l

  5. ; C- G1 }, T: T2 R0 Z
  6. int main(void)
    8 G9 H8 l, Z7 O% M: J5 }
  7. {       
    7 {0 n* t$ }, f9 o$ W1 W$ \
  8.         delay_init();                  
    ; b  A4 K3 P0 c  ?
  9.         LED_Init();                  
      ~; K7 y, D% t9 `3 `' q
  10.         relay_init();//继电器初始化
    . {+ x; s4 q8 i. I! Q
  11.         while(1)) e2 E( Y+ c) X4 H. A: w. _
  12.         {$ A$ Z/ A; x% q; ^) I% U4 L: }  C
  13.   ) A) [) _5 A: S( M4 j
  14.                 relay_off();//置0,即开关置NO,连常开5 x4 H6 r+ }$ X; q7 J
  15.                 LED0=0;( Y- n9 }, d4 U) R! z6 p% t+ O. m
  16.                 delay_ms(2000);//延时4s左右7 a$ T/ _) t6 {  V* g
  17.                 delay_ms(2000);0 p# n$ i7 Q) Z7 }4 ^6 ?5 x) v
  18.                 delay_ms(2000);# b' z0 I: j3 O( R
  19.                 delay_ms(5000);
    ' r2 n0 E5 q# D( e( Y% ]
  20.                 delay_ms(5000);
    : \! m* j, N: S) \5 W+ B# [  V

  21. 3 k5 j0 _5 z1 ^( _; p; f2 S9 L
  22.                 relay_on();//置1,即开关置NC,连常闭; I, v0 h4 u: s# L6 A/ W1 }+ F3 P
  23.                 LED0=1;( t1 A1 D9 Q/ l; @
  24.                 delay_ms(2000);//延时4s左右
    % k- A' [$ |! K5 R. m, X# {2 Z
  25.                 delay_ms(2000);
    ; _& Y: [7 O% a- e0 m
  26.                 delay_ms(2000);
    3 A' W0 ~' M! e& S; e2 H
  27.                 delay_ms(5000);% q3 k' u( \8 v, o7 T# ^( {
  28.                 delay_ms(5000);
    $ y% M3 S9 ?) Y
  29.         }3 U! i# N# v( d9 H1 B
  30. }
复制代码

6 G7 x9 w# b; E2 s

) ?: V: ?8 T6 O, K3 ~0 P/ h 效果图如下:6 x! q0 P) ]; ?0 J* d; k

" ]# V- f/ o3 P4 `
3 g& `0 W, f8 V$ B; w0 e' w7 ^
20210723230049551.png ) T  k7 Z) q% g' F1 U2 G
% w/ x! O' i  @
& V  m) ]! \9 V
20210723230021589.png
6 n% _$ ~) O; S2 ^  g* ]0 F/ e( l" K0 g2 [0 N8 a) Y# u6 p/ {
' U: y! H* w) ]5 g- A6 y
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。2 g3 n# M8 I7 k5 W6 M' N
& ]; s2 L/ D, D) [5 h2 z5 S

  F+ I) I  P5 }4 G: J4 u继电器就是小电控制大电电路6 N/ k; q7 W! M
————————————————. ?/ Z- H) B$ ~2 E
版权声明:不说二话的自家人
  V; U$ E# e1 U- A& A. y如有侵权请联系删除) L7 e' L- c: _9 V

8 S9 C4 G! E) L# |7 Z
6 a. h9 v* S# E+ M. j3 {: a
收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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