微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 玩转蓝牙4.0系列教程(第一季)-第六课 CC2540的继电器的控制

玩转蓝牙4.0系列教程(第一季)-第六课 CC2540的继电器的控制

时间:10-02 整理:3721RD 点击:

今天我为大家讲讲如何操作继电器,继电器一般用在隔离电器场所,项目中很多体现,尤其PLC输出引脚,如何操作好继电器,需要从软件和硬件两方面去考虑;它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

1)电磁继电器:利用输入电路内电路在电磁铁铁芯与衔铁间产生的吸力作用而工作的一种电气继电器。

2)固体继电器:指电子元件履行其功能而无机械运动构件的,输入和输出隔离的一种继电器。

3)温度继电器:当外界温度达到给定值时而动作的继电器。

4)舌簧继电器:利用密封在管内,具有触电簧片和衔铁磁路双重作用的舌簧动作来开,闭或转换线路的继电器

5)时间继电器:当加上或除去输入信号时,输出部分需延时或限时到规定时间才闭合或断开其被控线路继电器。

6)高频继电器:用于切换高频,射频线路而具有最小损耗的继电器。

7)极化继电器:有极化磁场与控制电流通过控制线圈所产生的磁场综合作用而动作的继电器。继电器的动作方向取决于控制线圈中流过的的电流方向。

8)其他类型的继电器:如光继电器,声继电器,热继电器,仪表式继电器,霍尔效应继电器,差动继电器等。





电路如下图:



利用S8050(NPN)驱动继电器,那个二极管叫“续流二极管”由于在电路中起到续流的作用而得名,一般选择快速恢复二极管或者肖特基二极管来作为“续流二极管”,它在电路中一般用来保护元件不被感应电压击穿或烧坏,以并联的方式接到产生感应电动势的元件两端,并与其形成回路,使其产生的高电动势在回路以续电流方式消耗,从而起到保护电路中的元件不被损坏。


我们利用一个按键P1_2上一节已经说过了,下面配置P2_4为输出引脚即可






P2SEL &= ~0x04;//设置P2_4为普通IO口  

P2DIR |= 0x10; //设置P2_4为输出口


源代码如下:

/**************************************************

** 本程序只供学习使用,未经作者许可,不得用于其它任何用途

** 蓝牙4.0底板开发板

** 作者: shizhe

** 创始时间:2014-05-08

** 修改人:shizhe

** 修改时间:2014-05-08

** 修改人:shizhe

** 修改时间:2014-05-08

** 描述:  

**  继电器控制…

** 版权所有,盗版必究。

** Copyright(C) 联控智能 2014-2020

** All rights reserved

*************************************************/


#include<ioCC2540.h>


#define uint unsigned int

#define uchar unsigned char

#define RELAY    P2_4

#define SWITCH1  P1_2

uchar back_relay;

/****************************

延时函数

*****************************/

void Delayms(uint xms)   //i=xms

{

  uint i,j;

  for(i=xms;i>0;i--)

    for(j=600;j>0;j--);

}

/****************************

     继电器初始化函数

*****************************/

void InitRelay(void)

{

   P2SEL &= ~0x04;//设置P2_4为普通IO口  

   P2DIR |= 0x10; //设置P2_4为输出口  


}


/****************************

     按键初始化函数

*****************************/

void InitKey(void)

{

  P1SEL &= ~0X04;    //设置P1_2为普通IO口  

  P1DIR &= ~0X04;    //按键在P1_2 口,设置为输入模式

  P1INP &= ~0x04;    //配置P1_2为输入模式

  P2INP &= ~0x40;   //p配置P1_2为上拉输入

}


void main(void)

{

  InitRelay();

  InitKey();

  while(1)

  {

    if(back_relay){ //查询状态位

    if(!SWITCH1){

      Delayms(100);

      if(!SWITCH1){

      back_relay = 0;

      RELAY = ~RELAY;

      }

     }

    }

    if(SWITCH1 )back_relay = 1;//查询状态位

  }

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top