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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言3 S% o  c$ C' G) i6 t- }
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。
# Z7 h2 x  @. v9 \& `8 F  A* F# b: o. A/ [: M
3 Z) @% D: ?* z
20210723215043908.png # t+ {7 c. F) R! X5 H' S" r

/ q6 ^$ K' b4 k6 H: ^

( |9 z/ |0 w: N6 `: X) b 一、继电器的使用
: c$ [6 l$ n8 J$ p7 m其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端7 C* Z' O: {" e4 X% G  U7 T8 G  R

2 q! u/ M5 u9 |
; b# x" f8 x1 D6 y( ]0 O4 p  J: v% k
一般情况下是常闭状态# A2 ^3 E4 z0 q2 c' f: r/ n3 [

$ `- D1 t* G1 y$ a
. T  P. U7 h, V5 u5 ^* m
这里简单地描述一下大部分的继电器模块:
# O9 l/ W4 n7 k2 e' k
& D' @$ Y+ z" L# x' X+ K
9 k' ?+ D$ Q" {6 d! ?# c
Vcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。* B, M+ C1 `  ~. z2 W5 ^% H

4 n9 m: a1 L( X5 d, b) l+ j3 P  \

, w9 m) W0 l" ]3 r6 p 20210723215814833.png
) s7 w7 H7 ]1 K) V; G- H- V2 v7 H% b; k/ Z; `

- I% G$ z+ [$ Y5 ]4 A  |; ^In脚输入高电平,COM连着NC
. {9 R3 L4 K7 ~1 [$ o- I/ j' K8 K ) a4 v) U# A0 D6 n# |* w* _
20210723220549702.png ' b! [( O+ V. L7 G2 q' h1 y5 R5 q/ M
) f! X' ^" D9 ~) ^
+ S8 y- \, _2 _$ x% Y
In脚输入低电平,COM连着NO- v. p6 a& G$ C; e( j# A
相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接# P0 W/ f" }. t& Q

( {; o- T. D9 R% S, P5 i: k1 F( u3 v: @, c
: C3 `0 I: s( T$ [6 U1 ?
二、写个代码检验
! W2 C( \4 c% s下面我就简单的实现以下它的开关功能吧
5 @3 i4 `' R5 x* |1 e
  1. #include "jdq.h"4 N, U" k2 \1 |
  2. % _# B5 j$ M: R) N5 w3 X; u

  3. 6 G) }6 U6 Z+ w0 \
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化+ i$ _" v) K" _" ^8 L
  5. {$ p" L& T' S, D2 `# l0 [2 W
  6.   GPIO_InitTypeDef     GPIO_InitStructure;
    0 b) \1 J4 d# ]
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    3 n* k6 ~, D/ b1 T: ?( R' F. r) j$ X; e
  8.        
    - X8 M9 A+ ]9 m: ~
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;& d3 O# J. A" t
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//0 H; O9 Q. R5 ~, _9 k
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;9 q6 a; T0 g( d' N, n6 U! S
  12.        
    : C1 r9 x- _, n8 [: \
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);0 ^* t; M$ l* {) Y1 q1 h+ ]- D
  14.         + x2 e: K1 A9 ^6 \1 q
  15. }          . w: p6 ~( f/ x( [: F5 N

  16. / w3 X- {" u5 F, O) G0 ]  w" ]
  17. void relay_on(void)//PB7置1
    3 ~, t) |( m3 R: l7 ~' V, {' c
  18. {: G, j2 f9 m. P& q( Y
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    + c9 {% A3 [- v0 H% p( A, K
  20. }
    3 @- s! y4 C& W- N) w/ ?; l
  21. 8 T+ B# n$ e% d$ N7 ^) E1 i$ l) `
  22. void relay_off(void)//PB7置0
    ; ]- Z* ]0 R9 O4 m, `- j
  23. { % |3 J6 ]4 W9 |9 L% r/ J
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);
    " A: f$ a1 o4 i9 `) q
  25. }
复制代码

& F/ k6 v1 @& c" e
7 H) ~( J0 S! u: c& W
主函数:
, Q* J: x6 Z5 X% a
  1. #include "sys.h"8 N# p9 t" y) x
  2. #include "delay.h"
    2 @. g$ q5 W# `( ~# p
  3. #include "led.h"
    ( h# w% q& a$ K! B8 }
  4. #include "jdq.h", O' a( \/ U( K5 q" R4 G, B" I. n

  5. 3 l* J& T9 r8 k
  6. int main(void)
    ( Y& H1 z0 Z! _. G5 g" g
  7. {        % }+ @- r* Z) w6 S
  8.         delay_init();                  + q5 b6 ?* ^. C) k
  9.         LED_Init();                  , B  V: M% g, t9 `$ D% p: g
  10.         relay_init();//继电器初始化$ u  O, v8 p9 @3 P( C% c7 x
  11.         while(1)
    ! G7 V1 \- C, T% p/ d8 L
  12.         {# i/ `, a# J' {$ Y9 U3 V) R/ W
  13.   5 H# `: F$ j5 Z' N2 K
  14.                 relay_off();//置0,即开关置NO,连常开0 Y! J( ^) X" A) z, r4 g% z
  15.                 LED0=0;4 Z' ?; o9 h* O% y
  16.                 delay_ms(2000);//延时4s左右
    " E) X1 t% k7 ~5 o
  17.                 delay_ms(2000);4 V; T. a) {2 G, z1 u; W6 w# ^0 R
  18.                 delay_ms(2000);
    6 @! u1 Q" {/ L- e: K; Y
  19.                 delay_ms(5000);3 H6 m. c0 z; }* `
  20.                 delay_ms(5000);
    ( P. S2 @% S7 y- l9 g. h

  21. ' ?* @+ j3 E$ T+ P
  22.                 relay_on();//置1,即开关置NC,连常闭
    3 p- p) g$ x% m5 [7 L- ^8 @
  23.                 LED0=1;
    ; y' e# K2 v: u9 p+ ?
  24.                 delay_ms(2000);//延时4s左右2 S! D$ p1 O/ v( q; j  s
  25.                 delay_ms(2000);
    6 H7 {  ]) E4 K4 H% H5 s
  26.                 delay_ms(2000);
    + f& o  E: C4 Z2 R7 [1 i; K
  27.                 delay_ms(5000);
    % S3 l$ [% c+ y7 o
  28.                 delay_ms(5000);
    ' k9 G8 [! }. K( M5 P
  29.         }% h1 y! y6 y7 \' Q) P5 Z
  30. }
复制代码

# @9 Y5 W+ G  L, L- I+ o
9 g7 E; s$ X: G
效果图如下:  \" P0 e$ A2 K# x5 S; ?

2 A+ J2 W% ^9 l# j

8 G2 e* v8 |% m4 M- k. S 20210723230049551.png
, z1 j2 z! |* u3 r3 e! }' T4 g$ r% V5 B' P" H. g

- U( A7 u) K' r# E8 V" { 20210723230021589.png
+ n1 h! R3 b( {( U9 \" j$ w' W+ G4 Z3 M
& ]! `# w: @8 r4 u+ u! p
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。
8 S) \9 Z  M( {5 Z* Y9 r* C, ~$ o* f2 l/ t/ ^5 u
1 z6 o2 p/ `( x8 ?
继电器就是小电控制大电电路
$ I& d* m+ [9 d( _% M————————————————- }( }; ?; l( T! J# E- |3 z
版权声明:不说二话的自家人+ W( \' n9 {4 ]! Y
如有侵权请联系删除, B; x  K2 g, h$ ?

9 k! Z" [- ^2 q5 X! @
7 u& Q% M% }7 O1 D: C1 R1 G5 |) o
收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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