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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 18:16
前言
7 L) b5 o" A. r# B' M相信很多志同道合的小伙伴们已经找到了学习STM32的好途经(灵光一闪刷到我的博客)了,接下来的时光里,我会讲到一些我对一些模块的使用,同时附上源码还有我的心得。没错,今天我讲的就是继电器的使用。/ i& y, q: S2 f
* G4 }0 {1 Y) `( q$ S- l) Y

$ v& B' i7 ~# W' Z0 W1 C 20210723215043908.png
+ Q$ `  @# [+ w4 q( J& s9 E. D! l. B( _' D
7 ~2 R$ K: [  J6 n
一、继电器的使用
# E* T$ D6 F6 b& S* s* A$ W5 C) @0 }其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端" F5 e, c" O% @2 _

! q: H2 S2 h+ h' K" U# r' p

  s: i' ^0 T# {- S4 X一般情况下是常闭状态4 P' _+ h, f- f- z& G4 ]) H
% T4 ?) {1 l7 M, K+ s' ~
8 t: W- `7 q) j- q7 Y
这里简单地描述一下大部分的继电器模块:
- L) ]1 `* C& {1 U# z% r8 p
. o% Z$ t% X+ u7 u; F

8 M  x& L/ l: ?* }" T6 LVcc接电源正极,Gnd接电源负极,In接STM32上的输出脚(输入高电平公共端连常闭,输入低电平公共端连常开),如下图所示,你就可以明白了,当IN脚输入高电平时,NC与COM相连(左图);当输入低电平时,NO与COM相连(右图)。3 D( y/ t+ Z( t. ~% e/ F2 c) C
6 e4 B- J  e4 g1 c
; C9 W1 j7 X3 M3 y: T
20210723215814833.png
7 n2 t( c8 q  o" Q1 n4 }
9 h7 F7 |2 w& b7 U) X& L9 R# G

! j* Z- J6 S- V7 p0 WIn脚输入高电平,COM连着NC3 |( Q) Z4 L8 W5 ]2 ^! ?7 B

" F, P' g% J( V! ^% h+ k# M; | 20210723220549702.png
+ O' f+ Q# C* ^
+ `) Y% ~1 |! |

9 `* u4 z8 v2 O% W- GIn脚输入低电平,COM连着NO
+ u' m  Z1 r1 v7 A* @2 j相信这样子你就对继电器有了基本的使用了解,下面我就不讲解其内部的结构原理了,可以到其他文章上学习具体原理,附上链接* P& q- b* }' I  ^& L, _

* B  F0 h- J' T! u) Z% R7 z+ d/ }, z' h! P1 a- h
' h) I8 g  l- O1 X$ u0 Z
二、写个代码检验, x/ ]* a! w& l: U
下面我就简单的实现以下它的开关功能吧, K/ v6 G/ S! H4 y( V* k
  1. #include "jdq.h"+ J( ], P/ Y2 K8 W
  2. + X% _, |. G! N* d8 b6 Q
  3. 8 E! D! u0 T* `5 K4 Z/ n1 H
  4. void relay_init(void)//对继电器初始化,即对PB7口初始化* H: q# m/ Z6 t
  5. {2 n. N+ M1 E3 h  s" [7 Y6 k! r
  6.   GPIO_InitTypeDef     GPIO_InitStructure;2 {9 G9 D* s5 {! ]
  7.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);7 y+ E/ q# d& o6 k
  8.        
    $ e0 [9 a: Q: K& q* t% E
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
      {- _; v5 E% D$ V+ X3 V% |
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/// M+ m! A9 _, |
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;- b/ \/ m8 z4 B
  12.        
    ; H' \! Z* g' K4 u
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    5 ~) K; E& a& \
  14.         % U7 [/ g+ _3 ~0 d6 G
  15. }         
    % _4 [. H# j4 J9 M

  16. " b* y/ X" Y" l6 B
  17. void relay_on(void)//PB7置17 g1 [: t% P& f7 t: {% E. ]
  18. {3 x& R# h3 O* T- d2 a* y6 K
  19.   GPIO_SetBits(GPIOB,GPIO_Pin_7);
    5 G# N; h( W1 V3 C  x" F! ^4 C
  20. }
    ( S+ V/ P  R8 g" u1 b. g& x% J1 N
  21. 5 T' g( Q" T5 V/ u- B
  22. void relay_off(void)//PB7置0
    7 K9 B/ x) h# u  c8 i6 N' d
  23. { 4 W* V& T# R9 z- b. F3 ]6 y) h
  24.   GPIO_ResetBits(GPIOB,GPIO_Pin_7);
    8 }5 |9 \& I% T" |# Y: m
  25. }
复制代码

5 p3 R: J4 }$ E& ?4 `8 v- A

0 K+ @; f" l; F* [6 l+ o; l 主函数:
7 e+ E  X- E# S
  1. #include "sys.h"# ]- D; D4 S( w. Q! Z) }, J
  2. #include "delay.h"
    : P/ o9 T% K9 e, x) a
  3. #include "led.h"; }6 u8 Q$ r. i
  4. #include "jdq.h"4 }  R( E$ a" S. r6 a
  5. # g! a) v- w( n
  6. int main(void), d' L6 ]6 l: F* |3 t6 m& a7 [5 G
  7. {       
    $ o2 ^+ H# v. e8 e2 u2 I
  8.         delay_init();                  
    , i  e4 L% f1 J+ Z" h6 \  t. A
  9.         LED_Init();                  1 l. }1 U1 l" D+ [. N+ l8 v
  10.         relay_init();//继电器初始化6 w% [. U7 W; ?3 a8 a1 g  p. @
  11.         while(1)
    $ F* L4 a$ A6 s5 K3 @1 ]% k% ~
  12.         {  p/ l) [$ e  ~. h) v1 U
  13.   4 n! l* l' h1 r
  14.                 relay_off();//置0,即开关置NO,连常开) H+ {- t9 A1 s5 E: p0 R+ [8 C
  15.                 LED0=0;
    3 U0 {+ W/ a! g8 g: Q- x/ _  m
  16.                 delay_ms(2000);//延时4s左右
    . y' U) a0 }7 n6 T  p
  17.                 delay_ms(2000);
    ) r1 W, p  o, j6 s: y) E6 m: G
  18.                 delay_ms(2000);
    $ T5 {2 w6 o8 I2 y
  19.                 delay_ms(5000);
    ' [' H3 `: N+ J& \$ j3 u
  20.                 delay_ms(5000);
    7 [5 n/ c/ E+ B9 k/ \; t5 S

  21. - m- t8 C( Y7 C% Y
  22.                 relay_on();//置1,即开关置NC,连常闭
    , N/ x- R% D/ O0 Z5 e& t+ S! D$ E* o
  23.                 LED0=1;
    " E( }1 G! a3 J+ J" Z
  24.                 delay_ms(2000);//延时4s左右
    5 Q4 I: ?8 P) d& E( `
  25.                 delay_ms(2000);* D$ [& a7 o7 J& f
  26.                 delay_ms(2000);, e/ O: ?9 q: e
  27.                 delay_ms(5000);  _4 J) U- E& i* |5 j' I4 y$ `" M
  28.                 delay_ms(5000);; M6 u/ s8 e. R1 l! k0 _
  29.         }
    8 t4 V# N; G7 v
  30. }
复制代码
: W$ e0 {1 {  T4 l9 T. K

, T+ o  A5 r/ u3 F2 o8 k 效果图如下:6 X, w! L- K* a& U3 p$ E& |4 I

/ d' y* v7 K1 c* Q
3 d# V* c: X6 E* N4 R$ O8 F2 L- T
20210723230049551.png
5 r& B9 w3 J% H, f# a/ Y, n  y7 l- ~7 u' L2 Q3 E( s$ W+ e8 ^; P, u
% N( _5 Z9 G1 @8 E" q4 t) a
20210723230021589.png ) X+ @* l8 g; ~" u8 V. m4 n  U, B

" y' {  H; I: P) d- B

( n) \/ p% R* \3 U) D: b 上面我只用了STM32F1的最小系统板测试了一下,光敏传感器检验了一下,注意我这里用的是一节3.7V的锂电池给光敏传感器供电,所以你在给继电器模块上的Vcc口接电源时记得接3.3V的,不能接5V的,不然没法驱动开关,因为这个的原理就是弱电控制强电,你如果比另外一端电压还大那就无法达到效果。7 E2 \" c( v1 I" V  D5 X( h. c% m9 p- T

% x3 T- G( b$ Z. a6 I

! |! J! g- L: {0 R- O9 [! Q继电器就是小电控制大电电路
" k- U) ]& ^5 }+ q1 Z" s, X( h————————————————
! R2 o! n8 Z+ ?6 j9 _4 V版权声明:不说二话的自家人
! ~! `; ]+ K) K. @如有侵权请联系删除, b* j7 i4 m/ f1 Z9 K7 U- k

, i9 p* L/ U/ V* L  S. x8 ]
5 B3 r% o) k9 K
赞 收藏 评论0 发布时间:2023-5-14 18:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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