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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言
+ s8 O1 w7 t, V  \3 i$ y相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。6 y( k2 T; q/ ?5 O

1 v7 X. r3 U* l6 K/ f
2 S: F4 p& ?( u& ~! N
20210723215043908.png
" f, I$ B% r  l: J7 m% S
2 i; i% t8 E0 R

% H9 z2 I9 _6 X  I6 M3 O) P 一、继电器的使用
( r. d" r8 }& ~5 c% `3 y其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端
* d6 b- y5 M& a0 n; ]" p
0 R2 r  R: t* p) f% s+ ~: J
3 O$ Z/ \! a( Q/ G! ]; ]" h' F
一般情况下是常闭状态1 e( f( B8 f1 Z; p
/ E) I8 [) ^4 `+ g
8 S$ S  @) B& ^7 ~; C( s: k1 \
这里简单地描述一下大部分的继电器模块:
5 Y8 i: x1 A; ~# D& j) W. O% w. B( x, E5 ]- K
  i  e' @" d; f1 \
Vcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。+ R- }$ t" o( _& M" b# N

" m% Z; z7 _7 z( M9 J

  ~/ ^2 N5 A+ ^1 j) O  S% \7 ~ 20210723215814833.png
- J! X+ C$ q. J& V2 N  J$ X6 d  |! s  d  S
& ~% V7 E2 p( M9 t& A! r
In脚输入高电平,COM连着NC
6 r& |( E* M3 P! g4 p( R4 k
% K  _: m+ N2 g 20210723220549702.png 1 H1 c( h. \+ G. S' I

9 {( A5 {* y* b0 A8 ~) n
, |$ X; E9 M7 n  c, f4 G
In脚输入低电平,COM连着NO$ x& z, i4 H- A' d& Q
相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接, N2 i( M& Z( t/ O8 f

' V* B2 d  c. A8 k8 H2 ]" Y# q: g+ w- Q+ m0 H9 G

" a* Y5 g* W$ S* v+ Z二、写个代码检验, d) m; s7 q& r  R- i' ?  b
下面我就简单的实现以下它的开关功能吧
/ s3 q- k/ p; n) L
  1. #include "jdq.h"
    2 _2 u8 u- I6 ?  }
  2. 5 @+ ?/ i$ A+ ^
  3. $ D0 I) k! k; A6 F) A& t# H
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化$ M5 T) y9 ]( ]$ y
  5. {
    # L& E) s+ Q9 X+ C
  6.   GPIO_InitTypeDef     GPIO_InitStructure;" ]! }) D- L* X3 ~% l' \# j
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);% ?% C& S0 y) [* x" K; S7 i
  8.        
    ' |5 k5 B, j" j1 n( f! V' D. d% t9 y
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    ( N% A/ B; ~4 H: w
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
    ) |0 L2 D5 X6 u+ y
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ) a: m5 j0 T, x4 f3 u. D
  12.        
    - r. z6 s- s  C* H: c4 q
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);3 ~! g' a% `8 q+ y
  14.         # ^# e* g& I) x! l* F6 E) Q1 w* D
  15. }         
      x# ~) [# u! V! S7 j# I7 _
  16. 9 w# i! T7 ]" z7 m2 p2 M
  17. void relay_on(void)//PB7置1
    & L3 \5 L# ]/ g9 W9 f4 P5 A  K' A
  18. {
    : |1 v' ]( ~0 v$ F# R' M
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);+ [- }9 c, k: I1 x( N
  20. }' X0 W$ g, X+ @  [- p3 F( E0 e; @

  21. ; s- T! \- j9 z1 B- y
  22. void relay_off(void)//PB7置0. N! [6 O. E% o$ ^1 ]
  23. {
    1 o6 ~& h0 ]7 B/ l( x0 z8 @  [0 d# @  u
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);9 G* t( Q6 k' Z; O% G; r
  25. }
复制代码
  X7 T' @& L3 t) T6 p

6 d1 Q& l& @/ G- t 主函数:4 t0 p9 @+ T" U2 \6 Z* ?5 v0 a+ u
  1. #include "sys.h"  {4 F  ~; g) i) D" f* s
  2. #include "delay.h"
    1 k# u" u8 ~% z0 `. q
  3. #include "led.h"
    1 H9 f( E- R' N1 N9 W2 O; g
  4. #include "jdq.h". ]" j5 e4 J, x$ H) J3 o: y) k

  5. : q! z. a$ @' ?- p: B
  6. int main(void)
    & |( L7 m, m* m  I/ T
  7. {       
    ! ?' d( a! u* y5 T$ c  r# V
  8.         delay_init();                  & E: ^1 I* X& {. l! c$ Z
  9.         LED_Init();                  
      `) O4 l% m: r- z. R, ~
  10.         relay_init();//继电器初始化
    ( i( A. R0 A( r+ y$ O5 x
  11.         while(1)3 A/ s& _0 ]. {. }% c7 Y2 ~: \
  12.         {4 P  _* V9 D) f- \1 @
  13.   
    - `8 k! j( I2 e* k- t
  14.                 relay_off();//置0,即开关置NO,连常开
    : b# S5 d) ~8 H/ w6 ?5 T
  15.                 LED0=0;$ y1 p4 d: P: P- u0 G
  16.                 delay_ms(2000);//延时4s左右
    ( e) i( N7 b+ V7 N- F% |5 L
  17.                 delay_ms(2000);- [2 ?, n: i3 `& i' i' ~
  18.                 delay_ms(2000);8 v- W0 d$ a6 b8 {' X3 M. }
  19.                 delay_ms(5000);) ?* n7 o) F' O/ Z) A: ^
  20.                 delay_ms(5000);
    - f; w/ k8 k# j+ F# }% D4 O0 R

  21. ( _- m, P4 A  j8 U9 ?) w
  22.                 relay_on();//置1,即开关置NC,连常闭
    * D: ]4 h; u! T  U
  23.                 LED0=1;, T8 w3 k7 Y! f1 a# \3 T5 e! Y
  24.                 delay_ms(2000);//延时4s左右7 q/ C" v, R! U/ ~4 ?
  25.                 delay_ms(2000);6 b2 ^9 h* r/ ~
  26.                 delay_ms(2000);
    1 I& f8 q$ t0 e: D- z8 i
  27.                 delay_ms(5000);$ w9 X. B- c7 |! n5 Y
  28.                 delay_ms(5000);! o1 G, Z, {. h# s0 i5 `
  29.         }! S$ U' H  }8 L* }+ G' D# C
  30. }
复制代码

$ D3 [  @4 c( q& p! H! ~7 F

& v3 x# ?) @1 H* ]5 W 效果图如下:5 x* }% h7 q3 c5 n
: _6 s: G- s+ `8 h9 t
/ K- t( w. X3 t2 f8 i4 O
20210723230049551.png
( K; k, L9 Y3 X+ `
" z* W* T* Z! `( t

- b) q1 t. s) F6 z, r7 T 20210723230021589.png
3 Y$ i' C' e0 v' I
8 I1 g- i5 ^  J5 r
; G, E2 V, y& g% A0 H
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。0 b$ s/ w2 t- V
; R, r" U' D  K% C& }' {' t0 ?

- ~& D8 H" M1 L# O; d继电器就是小电控制大电电路) C4 r7 M7 R1 r! O3 \2 E$ K
————————————————
- E+ n- @( N' T+ D% m版权声明:不说二话的自家人( L4 a2 M+ W5 \2 U3 m7 a
如有侵权请联系删除
- C' r0 F1 v% ~- T
: j% Z  d; I1 _3 b) J' g- K
: k; W# M) `0 M& T  f
赞 收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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