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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言
+ t, z8 v6 l( i' q5 r5 j相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。
- L4 O9 x* W( |; R6 _) x9 z8 Y) X. `, n+ w5 L( v

- o0 D5 ]: H( \, \! Q 20210723215043908.png
3 B* P' K' v1 N* c1 V+ K
2 a) O# e; Y( I5 v: ?
: q6 h' g$ Y; @3 a& n0 g
一、继电器的使用" n6 _2 }2 r$ O! L
其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端
2 z* }4 w; G* i1 G" Y5 a: n0 w
* W) `/ A) a8 r' k% e9 Q" |
; `2 ?" _8 P. F( Z+ [
一般情况下是常闭状态: B+ d9 U) H: j' D
  s' {8 V9 p) t( ~& m
5 _9 K3 `0 J8 R( N
这里简单地描述一下大部分的继电器模块:
/ ^+ i5 E7 r2 F% `2 N
' z! ~6 p  P  t" s: [
( K% E: i9 H5 I% H
Vcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。
: O+ Y: w' O, \$ e1 O. ^9 T" ]- g, x% ^0 w4 T3 A4 ~5 I% K
0 [" `: X1 d3 P& Z" w' w, z
20210723215814833.png 8 r  n! t2 W  F
' m8 v5 }2 P/ Q. S% o
+ k9 k4 T5 V# ?
In脚输入高电平,COM连着NC
( E3 t& O* ?8 l3 h: V
7 o) [  P. M0 S 20210723220549702.png
9 e5 d" s  t. _/ c5 T: l0 u" H8 O0 d5 Q, i; R* n: \
1 ^- X/ A) Y, H0 i3 ]
In脚输入低电平,COM连着NO
% w" J. F/ E# G$ m3 ]1 `7 [相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接
7 P2 m! \4 [7 ~+ r% h- M  X) k5 \4 [6 |7 C4 f9 j7 m

) }: o# A- q8 q6 d
% ~+ y$ O$ k3 ~  a( `% U
二、写个代码检验3 A/ F3 D' K+ m( N
下面我就简单的实现以下它的开关功能吧
1 r) o* r" ~5 Z% h
  1. #include "jdq.h"7 P; k2 Q# v' U4 M; n. M( v# {

  2. 5 O  E/ Q5 ?* I

  3. : C8 t9 ]' d4 h7 S: H" ~
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化
    $ ^1 p5 i0 J6 J- e0 g
  5. {3 g- A) C2 k# t
  6.   GPIO_InitTypeDef     GPIO_InitStructure;
    - Z( |* K: }7 b  e5 P, w$ i' Z. H
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);* X' L0 P6 L) d) _
  8.         ( V3 H3 D. \; k
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;: ?/ |1 y) r' C# F% {
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//$ e: V; H" F7 {
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;" v" _* x& T, r% K0 U% S3 j
  12.         8 L, ^" U$ Y$ Z
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);5 l. j! E" v% H
  14.         + u3 F0 U0 b& e6 _# A# M0 ^
  15. }         
    " C: N/ q) \. G

  16. 6 q' @  q: E6 c) B4 t& t7 d
  17. void relay_on(void)//PB7置1
    : j0 J' n1 w9 i% I# w4 \+ B2 y
  18. {' o6 T7 u# A, ~' L5 A& d; x
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);: k& X+ E5 u' ]3 s/ \3 n6 I% }
  20. }
    $ s& @# j7 H: o; H3 D4 J
  21. 1 X/ c4 ^* g. ^* ^: Y
  22. void relay_off(void)//PB7置0
    / V1 L3 B( V, A
  23. {
    % G5 b( c4 v" y6 e
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);
    % C; u5 [# U( o" W9 p' L
  25. }
复制代码

& L9 ?5 t- c. J3 W) X

& E: W9 u1 z. S0 u9 t9 y( Z 主函数:
. ?6 G: Y. z# A$ m8 Y4 N# o9 B
  1. #include "sys.h"
    2 z1 ~( B4 R( R! n
  2. #include "delay.h"8 C& G- \3 g! |/ ?( K. K
  3. #include "led.h"
    8 R9 \# l- K7 n( ?* M) F  O9 o. g
  4. #include "jdq.h"
    " H7 l" d: y! H& n8 {

  5. ! s* L3 S  x5 m& `
  6. int main(void)
    1 L, p6 A! {; N: v8 i
  7. {       
    2 {$ O1 d0 a$ R, v: L
  8.         delay_init();                  0 K" e2 o' W1 n1 s- f" f, ^
  9.         LED_Init();                  4 T% I5 E" U9 m6 c, B6 f
  10.         relay_init();//继电器初始化
    : _7 L6 [; g. n# _
  11.         while(1)
    . l' u. M+ O/ L# O7 R
  12.         {) p; g3 L. x5 w% A: t5 i6 V9 {3 I
  13.   
    , b5 }/ u0 O/ V, |
  14.                 relay_off();//置0,即开关置NO,连常开+ Q0 x# X: A: _* B# _9 h( U
  15.                 LED0=0;
    ' ?% j3 E- `( [+ ^5 K7 `0 G
  16.                 delay_ms(2000);//延时4s左右6 i' G6 E3 c" ^
  17.                 delay_ms(2000);
    / l" {, V) x$ ?% g
  18.                 delay_ms(2000);; v, o+ H! x4 n( `+ z
  19.                 delay_ms(5000);- N1 }' S7 A" ]# S  r( f
  20.                 delay_ms(5000);0 Z& Q- }' H* f2 [- L% X
  21. & w9 ]+ i1 N" i
  22.                 relay_on();//置1,即开关置NC,连常闭% z1 i1 N1 d! _! n* m
  23.                 LED0=1;
    , ]$ m  g% o& c: D( N7 x: p" d  S
  24.                 delay_ms(2000);//延时4s左右+ @/ L# O9 k1 @1 D9 `1 I
  25.                 delay_ms(2000);; ^# D  x8 d8 C6 I" k8 h
  26.                 delay_ms(2000);
    $ J. Q: |- |! I) I3 H7 D" p3 O2 V
  27.                 delay_ms(5000);$ r# }6 ]6 `3 o5 y3 U' x& m
  28.                 delay_ms(5000);
    - h. s* I3 b7 G+ k' F+ v
  29.         }
    1 a" x; e0 j+ r
  30. }
复制代码
5 `  k4 R. v( e2 `) |
" ?2 t, i" o. I: Z/ d( \1 E
效果图如下:
" v5 o1 y& o, a! [* o4 ?6 j
( p$ s3 {" {$ \4 o

* z2 A* S) E5 ^& ^5 \7 ^ 20210723230049551.png
' i6 I7 B- m, r- d
% @, K; f( i; M: a6 r! }; X

5 R/ E* w; B# J$ \, F 20210723230021589.png ! E" [# l  g3 T. I) @8 N5 J" {  B

7 N5 S$ ~2 q$ C& k& @
+ ~1 ~3 y' ~' Z% a. B
上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。' d8 s" k9 K3 P, J  w

' M: U) i+ W' X1 A# s

4 E3 d; X7 p5 C0 N继电器就是小电控制大电电路8 j& L8 V* X3 o* D# [6 T% z- t
————————————————
/ z3 A7 A/ C9 |, A; H0 O版权声明:不说二话的自家人3 j) v1 B' b8 }9 U! l
如有侵权请联系删除; _4 h  I8 O: J
* z8 W4 ^* c5 W, {. t) f  H* ]2 K
% u5 _4 `- {  t1 P) O
收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似分享

官网相关资源

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