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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言# y* ^" f) g/ ?$ _8 M
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。4 o4 R# _0 h8 }5 @& s" B

4 N4 `6 }# M  H1 [3 Q5 I% l
" d7 J% @$ B, F* N" Q4 l  }* U
20210723215043908.png ; O: }  K: H2 y

+ X3 Z' Q* p/ ^" h, r* V/ ?) H
% ]. F# O# N% F* B% h
一、继电器的使用3 O! [# h# D6 M  _
其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端
7 ^+ G# N% m: y  _) P/ h) r0 s/ u1 v
  j3 r9 X* h" f; f5 ^5 I
一般情况下是常闭状态
; o( ]9 A* P# p5 z
$ c# h1 ?: b8 B' b2 @3 e5 _

% T! i" Y+ r; F: r/ k这里简单地描述一下大部分的继电器模块:
6 r, C6 j3 {* b' ^* L/ g% C( p7 ?) ~
" H% C3 L& _- X" e, v
Vcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。" ?1 e/ e- l9 A* Z1 G5 S
7 X3 q$ d" f# m5 x, ^" |9 f1 `
. m. h& _2 m$ _
20210723215814833.png ( A# D5 n3 _) x5 w, v$ |9 n
( }; i! L3 x$ b% G3 Y) l, N/ G
' y/ Y# ^5 [# O3 E# q
In脚输入高电平,COM连着NC( ~! D3 a5 M' ?& }) T" _
5 A+ H" A5 ]9 g
20210723220549702.png
3 y1 Y$ B8 X, J$ b# C7 t3 h9 `% S( d2 Y
8 d- O. {3 \) D7 q
In脚输入低电平,COM连着NO
! f: l; l) [' ^. Z6 r1 l7 [相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接) w' E  b* O3 |8 C4 z
$ W) h8 N% {( _' f
. i& T$ v; y3 E) _, D: `" @" C/ S

  p9 u% u, k0 `- l1 m2 p二、写个代码检验; }( {) r, j6 D: i8 M
下面我就简单的实现以下它的开关功能吧) i( @! N+ t4 Q) z# y  f7 b  s; H
  1. #include "jdq.h"
    : M  q2 n/ k, ~% @( O7 W7 e! R

  2. , K8 D+ l5 T' I2 N8 f

  3. ( X- x* g' y9 G# ~
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化# t  ]; d* n; l3 r4 E
  5. {, {: b8 b$ R+ q0 |% u4 R7 }, h7 l
  6.   GPIO_InitTypeDef     GPIO_InitStructure;$ `/ v# C4 V- W" Y
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    ) i* V+ K; ^. n% Y4 r, |
  8.         " w; y' o1 w) J% P) V& Z4 V( J
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    * ]* H( [2 v' s7 ~  u8 n) x4 c
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
    ) A' U3 R9 G9 I. e% K! p* [% Z
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    . s, `4 W& B& N. t4 F' h: _
  12.         0 w1 X- R/ h0 @- O8 n6 ~7 K
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);% o8 X  {8 V/ P" R( {
  14.         2 b1 n4 }0 K: s
  15. }          " ~9 I0 H6 X9 g) ]
  16. , k7 s( ?7 D5 p* L; ]$ n1 K& U5 X; E
  17. void relay_on(void)//PB7置1' Z, e9 T# v" I8 u1 s% G4 B9 }0 [
  18. {0 b! ?9 u1 c: u1 R
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    ! v# m4 I8 D( F: |" y
  20. }
    8 }7 T) ?+ @5 N+ D

  21. : s% s- X( L9 s% ^  g
  22. void relay_off(void)//PB7置07 Z' J. x6 W. }! ~1 o1 s
  23. {
    ! p1 @- ~% K& e- `& w8 d! U! E. y
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);
    3 K' f% a7 }1 U0 _5 ?% H, V
  25. }
复制代码

0 V; q2 |7 C' w# U! Y
, W! R( p" {5 K/ A4 k" ?: g
主函数:7 z9 K) N4 V) x% n7 v( r2 P2 t
  1. #include "sys.h"5 k9 s7 f: k# x% h6 e, p9 z- V% t
  2. #include "delay.h"2 n* W  }1 m- Y' E) w
  3. #include "led.h"
      }! V5 j6 S3 z; t7 o) Y8 _5 M4 F6 N
  4. #include "jdq.h"# N9 q4 n" ]) r8 ]1 G7 `1 b* d/ G

  5. " e1 Z% h3 x5 u$ q' ?8 P
  6. int main(void)
    : _- ^6 J+ n3 x5 [# |0 H
  7. {       
    8 D2 c8 d" F, s) j+ U" r5 ?
  8.         delay_init();                  1 p' r- I% D9 t' k
  9.         LED_Init();                  * ?+ d& w1 e+ l% V5 M
  10.         relay_init();//继电器初始化2 s) i& H4 s- q1 r: v) T6 D
  11.         while(1)5 \& r) ~, ]/ U  f) Q
  12.         {' _! U1 C  j% U( }
  13.   6 u8 m; G. G1 U
  14.                 relay_off();//置0,即开关置NO,连常开+ B: u% P9 I  ~8 v1 U9 M4 Z. L; u
  15.                 LED0=0;
    ! O# {  q% i' l) K
  16.                 delay_ms(2000);//延时4s左右
    : w* x9 F; @" v! W9 I
  17.                 delay_ms(2000);
    & H$ H+ [1 J$ y) ^4 ]7 m
  18.                 delay_ms(2000);
    3 U  Z. b" Z/ [+ g  @; d
  19.                 delay_ms(5000);7 v: D# ?9 l, D7 \) p
  20.                 delay_ms(5000);
    / S$ e4 J% o8 m; |+ F' _) k

  21. 7 W, p7 U8 ~( n, \" `
  22.                 relay_on();//置1,即开关置NC,连常闭
    4 c$ K# K' a" M' y  x9 O# n
  23.                 LED0=1;
    ( {; y' }% y" v: S
  24.                 delay_ms(2000);//延时4s左右
    . u; a) q/ \8 _4 l1 C2 z
  25.                 delay_ms(2000);# y6 ~+ \0 J: b4 r
  26.                 delay_ms(2000);
      U8 y/ Q' i7 G7 ^0 f
  27.                 delay_ms(5000);# s* G' H8 r+ ?* ?
  28.                 delay_ms(5000);' h5 R2 u7 q2 A2 e8 U9 k
  29.         }
    2 R. x) Z8 Y) ]# _
  30. }
复制代码

! N( G: R4 `6 x) K! v# g
3 t; o! N! V7 W. j
效果图如下:" H5 ~$ i' @8 p3 E7 X, X
5 z5 P0 L+ Y1 r+ o4 n3 K3 K6 F

. _( n$ w# }, C) T3 x 20210723230049551.png
, y, j5 k* W1 _  [" y5 N: ?8 n/ O" F7 O7 m
0 ^1 ?! N% I+ n3 V; f/ Q* O
20210723230021589.png & E5 }, C6 |9 x3 e0 w9 `, }
6 P+ j1 _2 d8 G: L8 `3 v
' S+ ~/ e& D! r9 d4 E' n
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。7 q, {2 e; Y4 C: x" q, D
' D  ^, l) O* l$ ]7 {

- c6 F+ i, M8 J0 a继电器就是小电控制大电电路
" ^' N7 E$ m  n' a————————————————
/ v& A. F/ n! C$ f4 M1 B, v  Q8 T版权声明:不说二话的自家人2 b3 H, k' z% Q' z
如有侵权请联系删除
9 k4 L% @$ O7 q' u, ^! j
7 x! N* }7 T  q/ \& d7 e6 L' h: c
5 }4 r" Y9 p2 v
收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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