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

【经验分享】STM32f1之简单控制继电器模块

[复制链接]
STMCU小助手 发布时间:2022-5-14 20:38
前言7 ~0 s% E9 {6 P* @! n' k
7 c$ j5 u2 R9 `$ C
相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。
( w# n9 F0 D) A( ?% V, N  y3 U, B( j( W8 {* |: a3 Y+ X7 q
O7}]~6HB_35UY3E`TOBAU.png 9 z' o* \- l3 S* {- {
$ G6 P+ x$ W( @8 q* C, [, g" T
一、继电器的使用(重要!!!)' y$ C; y; C5 q, l8 Z: z
其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端
3 r: N& F& J; |6 F. S9 m- ?
" g0 d. X" K+ ~' [7 B一般情况下是常闭状态" a* r0 A* o  `3 @. |. Q8 Y5 E
( r, K! @. Q/ U! V- a4 s$ }; `/ K9 I/ p
这里简单地描述一下大部分的继电器模块:! ?& r$ p* `, ^1 m0 U" C
1 H; Z/ M7 F! \' v/ Q+ f) m
Vcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。
7 Y0 y* c. L7 Q7 y/ ^7 u1 Q8 X3 V7 s# K- R) S6 }
G4$)<]C1YNKLZHCF[3S2V.png
% K0 ]& j5 r: v& x6 s) ?
' F- b8 N* u/ C0 Z相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接
# h6 F, Y9 c$ x7 I  w
$ _$ |# p' }7 H+ Q# |% M! R二、写个代码检验

/ K7 h! [' l# Q6 x- v! a下面我就简单的实现以下它的开关功能吧/ n* I1 x% r  V1 I) t* @! @
: U7 m+ D6 R# u# d4 e3 h
  1. #include "jdq.h"' s' Z6 C: [6 |
  2. 4 t) s; C4 i9 u, K4 L1 V9 q

  3. 2 ~. D; `, M( w! r3 _# ^
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化4 m+ X# V1 g/ Y/ r5 y7 e
  5. {( c' {% r# I2 @( {  }3 r
  6.   GPIO_InitTypeDef     GPIO_InitStructure;3 O9 [7 j) {& W3 _# r& ?* d+ x
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    2 [# M; G% s. I1 O" M+ v
  8.         * |! Z* x: g% }! w; w
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;2 S2 x9 u; g5 _( K3 t# i9 X. o
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//# ~" D- m& F. ]
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;$ w/ w3 N* a9 B4 K1 Q) [% e
  12.         * U- ^6 O* P7 r* C/ |( X
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    $ N: f* W# w* f- o8 H
  14.         
    - B3 h/ P: C7 o1 S
  15. }         
    0 V- V, l" j4 W( f" \' q

  16. , ?& ]  Y6 k# ]0 d! M& q
  17. void relay_on(void)//PB7置1
    8 \' U' m7 @1 T) d9 S9 u
  18. {9 W. p' K. L' D2 I# s7 N
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);6 n2 R/ Y$ z3 Z9 ~7 H
  20. }
    ; h% o  W3 E" l: ]
  21. ) R" j7 R! Q! z3 K
  22. void relay_off(void)//PB7置0/ [2 q; E& m9 N6 \: {/ @2 F6 h. j$ C
  23. {
    9 q3 l$ B; H6 U& n
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);& @! X7 C- Q& }8 j+ m
  25. }
复制代码

1 [) [& f; v) c! w, p* H 主函数:
7 W+ h& `: }1 x+ w3 U9 I) v3 Q1 k* ~
  1. #include "sys.h"$ c% F* g% y7 ~6 n4 c2 r
  2. #include "delay.h"$ s# y% I0 }* e, P) m, K
  3. #include "led.h"
    ( N" N/ F- K6 ]6 y5 p2 W
  4. #include "jdq.h"3 n4 U3 ]% b* M* @) F- I
  5. 2 {# y# z# w# i
  6. int main(void)
    8 I. [' P7 T- a& ]* M7 S
  7. {        7 p$ I. D4 |. L2 p8 f9 [
  8.         delay_init();                  - \: h0 f) b  S, r% ~: @+ ?, I
  9.         LED_Init();                  
    ( l3 ^- f8 O9 A2 C4 i$ t, [
  10.          relay_init();//继电器初始化
    4 |, N* G+ B9 B2 ~
  11.         while(1)
    - Y$ P  n9 q* \$ ~0 x2 E
  12.         {
    ' G+ `9 a1 [5 L5 `2 h* ~
  13. 3 Y/ ^& Q/ [7 H: X9 v
  14.                 relay_off();//置0,即开关置NO,连常开% F, q- b: k( e- U
  15.                 LED0=0;
    # N+ F) c$ a0 b# p) X0 J! _6 m
  16.                 delay_ms(2000);//延时4s左右
    ) x1 n) _/ l6 G" F0 s3 N  F7 z
  17.                 delay_ms(2000);
    " @: s9 W0 a5 L
  18.                 delay_ms(2000);
    : S+ y4 O! t: r3 p* p
  19.                 delay_ms(5000);
    ( ^9 Z- U( H% i+ ?8 I3 h
  20.                 delay_ms(5000);2 k: F5 p7 B( [5 Z2 {9 k

  21. ( }: l' \# p3 v6 O5 q: K; N% B6 b
  22.                 relay_on();//置1,即开关置NC,连常闭' x0 q9 i/ W! G; k1 A. Z4 v
  23.                 LED0=1;
    : L1 i. B1 ^! l, ]9 x2 r  K3 D
  24.                 delay_ms(2000);//延时4s左右# a" {- ]( \& O" c
  25.                 delay_ms(2000);2 c; q& h7 R% v- q( `5 A( a
  26.                 delay_ms(2000);
    # {  e' X& r# M8 q/ i( ~) h# D
  27.                 delay_ms(5000);# G, X+ \  |0 m0 s/ Q/ ]
  28.                 delay_ms(5000);
    ! w- j4 o; h5 d( B; \  ~$ \$ z
  29.         }
    7 L( Z* z1 q) y
  30. }
复制代码

- F$ V2 {, R  l# J. H 效果图如下:
+ Y* A' M' e! V9 Z$ r5 g. Z" v6 p1 R1 v* n
Y$AM4R22{$M6D[AS]X0}FP9.png : a1 Z$ i$ ~: V# q8 g  }# r3 ^" L
~PI}8~NHZEH{{%T5S@6D)F4.png ' O- A2 `' F# r2 ?
1 S, _( Y8 x; q8 n# {9 Q

8 P/ V$ @( D+ g$ {4 z/ R1 } 上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。  [' F7 m& w# A' k* N
) Z% [" v( s- I
继电器就是小电控制大电电路,切记!
: K9 q- K: \6 m2 }5 z$ j
* @+ r6 p5 |3 @  u( O" b注意继电器大部分都是高电平下连接常闭,低电平连接常开,有部分产家会是反过来,大家买回来如果不确定,可以像我这样做个小实验证一下。7 t/ Q) w& {# Q0 K
: p1 c- t6 r/ a2 ~& i

, m' W: W8 c+ `6 Q8 I- l0 t* g, g  Z5 `! t
, C! A% v& P, e4 u
1 d6 g4 M9 o# F( u, N) _. X
收藏 评论0 发布时间:2022-5-14 20:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

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