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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言+ u. |9 Y8 V+ h( z/ u$ n
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。
9 O* m& O2 H, \7 d' d
$ C+ l9 i. a  h7 j
. S" H7 z$ H8 O( u- v2 T. z6 R
20210723215043908.png
  X6 C# g2 A$ m' \* {
% g: i1 }9 f3 `: J, D5 }& B6 [

+ a# f8 j/ `( e6 v& Z( a 一、继电器的使用
) d( U' G4 ^7 G8 o0 l1 S) k- g, Z其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端8 {. \* B: z& o8 q6 e4 b

) _  _0 V7 B( T6 ~6 J
; e6 s& l+ j) ]1 C3 T+ [' h7 p" x
一般情况下是常闭状态# S$ _, Q/ V& d' ]* ?# N6 \6 C
/ Z6 m3 o" ^" ~  O

2 B+ R' I, k  B7 v) }6 L这里简单地描述一下大部分的继电器模块:. N: l7 ^* [: q- M

- n$ p0 t, v* ?

: }1 C" p7 s7 {: qVcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。
& C( W& P* V, k! V% `3 |+ r/ _
% E2 v3 ]# w2 n
6 ~  R, C+ ?9 r, t4 o( ~( R7 A4 T
20210723215814833.png - Y7 {) `0 Y5 A+ P) ~  t& y
% l& k7 {4 {6 z* s- A2 J. I: z  w/ b+ e
+ F" p% J! h  L; e! o
In脚输入高电平,COM连着NC
$ t  z4 `0 \  c# ~
+ A; ~+ e' {/ u7 t" a 20210723220549702.png
) H9 m" X  x0 B) B2 ^
+ U4 O$ @4 W3 L" s
, G( j7 Z: n4 E0 P/ u
In脚输入低电平,COM连着NO
! z- ~2 ?0 y, k" X4 O/ y4 r相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接( V' `+ b9 V" t  x8 ]  h$ D! q; F
5 |3 Y( W1 h4 x) G
9 m. B6 Q' D; L' s
& g: b% \9 J6 E( X, V
二、写个代码检验  ~: j+ }) O% h& L% ?
下面我就简单的实现以下它的开关功能吧
0 i7 x8 u' V4 o
  1. #include "jdq.h"* p$ X/ X6 b! a8 ?5 a
  2. " Q+ v4 |) g/ O0 p- A! b

  3. ) v/ ^% z6 ]  r
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化4 n1 g: P0 Z. ^# j
  5. {
    + q2 `* ?  ~; {* C$ g0 N; ?/ L$ M
  6.   GPIO_InitTypeDef     GPIO_InitStructure;. j' G8 ?! n. @& k3 e) C
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    4 e- p+ r7 M% v; R  x# f
  8.        
    $ l9 r* R. I; B
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    + V- F1 i- c# r  R4 j& W8 ?
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//: P6 s' Z) z, v3 d7 K. E
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    - [' x$ u$ F) \6 o% M, q( p8 a
  12.        
    ( ~: _1 ~7 e5 z3 a: c
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    % u. x6 A* {9 F& t( T9 H, N
  14.         4 T& S3 @5 g0 K9 D+ o: r
  15. }          . \' G8 S. V, K( y$ K# z3 w* o: K# e
  16. , E6 ~, U7 \7 g* ]# Q
  17. void relay_on(void)//PB7置1
    2 m1 u& j8 e- n# a% D
  18. {5 W; K+ L9 ^- l' f; e( \
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    ; l$ q6 q( S3 S3 l* x3 F
  20. }
    * V( ~  n1 m# T( [8 O2 I$ n* |( a$ m

  21. " C& c4 \6 @( q; [- ~4 @7 \
  22. void relay_off(void)//PB7置0/ ?) h8 v2 y* o; a. w' a% q( |
  23. {
    5 L# k3 h. j" y, p4 |
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);2 c# {/ Z: `) c( O* _
  25. }
复制代码

; {$ D% Y0 o' Z7 W& {! c
% G# J' y% c0 P/ L1 b" a- r
主函数:
; z) o7 y( \- |. M
  1. #include "sys.h"
    # u: C0 u, S- m% V$ A
  2. #include "delay.h"
      Q" S: Q: f* D+ S# T
  3. #include "led.h"1 m# z: [+ L& s; n
  4. #include "jdq.h"0 V' D3 e+ {5 B7 E* D
  5. 4 O! W9 C; E2 J! ]" [0 f  N
  6. int main(void)
    - H3 C: A. p) T% e2 V* |3 `
  7. {       
    ' K$ W  A8 [! N. \
  8.         delay_init();                  
    ! Q3 P3 i, ~6 V: |9 m
  9.         LED_Init();                  
    2 u- W% V: |  p4 u
  10.         relay_init();//继电器初始化6 }. T0 v2 B) G; }0 F3 m5 y
  11.         while(1)
    " K7 x/ m$ A0 [
  12.         {8 E! c3 H5 j3 t5 |; j' E( D
  13.   
      e* y' U4 ^( l
  14.                 relay_off();//置0,即开关置NO,连常开# h6 }6 L0 Z  L0 p# y  u; M. y0 j3 v  c
  15.                 LED0=0;4 T8 C: o5 @# x' f5 S- g$ G
  16.                 delay_ms(2000);//延时4s左右& H* Z% r5 k* L$ p# `
  17.                 delay_ms(2000);4 q5 e3 b8 h( b) Y8 y
  18.                 delay_ms(2000);( D; \. e0 |7 _6 a7 }! P
  19.                 delay_ms(5000);; T4 M0 V! c4 f' d" n
  20.                 delay_ms(5000);/ w( q: ?) T3 k: r- t
  21. 2 y3 R* T6 \& }' F! w
  22.                 relay_on();//置1,即开关置NC,连常闭* r1 p$ s4 }# k% {
  23.                 LED0=1;; R7 m( ?) x; v
  24.                 delay_ms(2000);//延时4s左右
    9 K2 ~' s6 `$ W) R/ ~& H1 H
  25.                 delay_ms(2000);, d) m1 q( t( B. W% L) r
  26.                 delay_ms(2000);
      ]# ?& G; Z* f; _/ I5 E9 v
  27.                 delay_ms(5000);, n9 D" F1 m4 M0 t0 h, i3 ?- p
  28.                 delay_ms(5000);
    3 ~# F' R5 N! H+ h
  29.         }
    ; `5 [" M( n; @! P
  30. }
复制代码

  _) H0 u7 x; k% E  J

" D7 T5 ?- V/ ~! W( D" |' ` 效果图如下:
  _* B) J$ I3 F4 H8 N  F. f, G3 x& R, Z9 |/ P, C# f

$ e0 \6 H# |4 M9 | 20210723230049551.png # q6 s5 L4 u" v+ V
/ k5 X+ B9 J& i) z( P2 N
7 x7 F, l5 w; b5 l
20210723230021589.png
; z4 Y3 w4 }5 s: z
4 r" g2 w4 ~+ r, {+ `
  D3 a% Z9 h3 t8 A+ k1 Q4 L
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。, g0 n4 m1 h4 a3 K" `7 w( G1 p: Z
8 D3 l: f/ d% c1 }2 Z6 }

' M: {0 t3 E/ U" t: o; V' U继电器就是小电控制大电电路
* r% W% ^( H9 }2 L————————————————
+ p* q; q+ `; ?版权声明:不说二话的自家人# T+ @0 \- n4 e- \# T7 j
如有侵权请联系删除
, e: f1 [. ^; c" r8 h5 @" w& B& h* e. J; w; L+ w/ \, ?

3 m4 V2 d- `% l  \5 E2 C& n
收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似分享

官网相关资源

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