打印
[ARM入门]

【STM8入门】12讲 STM8 光耦隔离继电器

[复制链接]
1016|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘洋讲单片机|  楼主 | 2016-11-17 15:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘洋讲单片机 于 2017-1-11 15:39 编辑

光耦隔离继电器.pdf (339.64 KB)

众拳【剑齿虎】STM8开发板学习笔记分享
点击此处查看全部资料
第12讲   光耦隔离继电器

目 录
12.1继电器原理        2
12.2剑齿虎开发板集成光耦隔离继电器        3
12.2.1反向二极管的作用        4
12.3程序文件设计        4
12.3.1  lib文件中内容分析        4
12.3.2  main.c文件中的程序        5
12.3.3  jdq.c文件中的程序        7
12.3.4  jdq.h文件中的程序        7


12.1继电器原理
    电磁继电器的构造:如图所示,A是电磁铁,B是衔铁,C是弹簧,D是动触点,E是静触点。电磁继电器工作电路可分为低压控制电路和高压工作电路组成。控制电路是由电磁铁A、衔铁B、低压电源E1和开关组成;工作电路是由小灯泡L、电源E2和相当于开关的静触点、动触点组成。连接好工作电路,在常态时,D、E间未连通,工作电路断开。用手指将动触点压下,则D、E间因动触点与静触点接触而将工作电路接通,小灯泡L发光。闭合开关S,衔铁被电磁铁吸下来,动触点同时与两个静触点接触,使D、E间连通。这时弹簧被拉长,观察到工作电路被接通,小灯泡L发光。断开开关S,电磁铁失去磁性,对衔铁无吸引力。衔铁在弹簧的拉力作用下回到原来的位置,动触点与静触点分开,工作电路被切断,小灯泡L不发光。

继电器工作原理
  继电器工作时,电磁铁通电,把衔铁吸下来使D和E接触,工作电路闭合。电磁铁断电时失去磁性,弹簧把衔铁拉起来,切断工作电路。因此,继电器就是利用电磁铁控制工作电路通断的开关。
  用继电器控制电路的好处:用低电压控制高电压;远距离控制;自动控制。
12.2剑齿虎开发板集成光耦隔离继电器
    剑齿虎开发板集成了光耦隔离的继电器功能。原理如“图12.1光耦隔离继电器原理图”。为了方便在实验中观察继电器状态,我们在一组常开触点上集成发光二极管,在继电器吸合时,LED4发光。另一组触点接入端子对外。

图12.1光耦隔离继电器原理图
12.2.1反向二极管的作用
从原理图上可以看到反向二极管D3。在设计中加入反向二极管的作用是:电感线圈通电时会产生磁场使继电器吸合,而在断电的瞬间由于这个磁场的作用,线圈两端会产生很高的反向电压,这个反向电压可能高于数倍的供电电压,很有可能造成控制电路的器件工作不正常甚至击穿损坏(如烧坏驱动继电器的三极管)。在继电器线圈两端并联反向二极管,就会使这个反向电压有一个泄放回路,这样可以避免损坏其他器件。
12.3程序文件设计
12.3.1  lib文件中内容分析
我们建立一个“Lib”文件夹,把引用系统本身定义好的库函数发在其中,我们使用到哪个外设功能,直接引用到此文件夹中即可。一般情况下下面这三个文件都得引用。   

图12.4  stm8s_conf.h头文件内部选择
本节实验及以后的实验我们都是用到库文件,其中 stm8s_conf.h头文件包含了所有外设的声明头文件,在本试验中我们使用到时钟外设和GPIO端口外设。所以#include "stm8s_clk.h"和#include "stm8s_gpio.h"需要“打开”(就是把语句前面的双斜线注释符号删除即可,参考图12.4)。Stm8s_gpio.c库函数包含了所有管脚初始化功能和具体的执行操作;Stm8s_clk.c库函数主要包含了内部时钟和外部时钟设置,在主函数中规定了具体的执行方法,在这个函数中就有具体相关的执行步骤。
12.3.2  main.c文件中的程序
主程序就实现初始化和调用驱动程序,这样主程序控制思路清晰,流程简单。在以后的课节中我们就不再描述主程序的书写过程,留出主要思路讲述驱动部分的编写过程。详情请大家参考光盘(网盘)中程序及程序注释。
/***********************************************************************
*   说    明: 继电器实验
*   开发平台: 剑齿虎STM8开发板        


*   作    者: 刘洋 张殿东
*   版    本: V1.0
*   日    期: 2016-05-03   
*
*   IAR开发环境    版本 V2.20.1
*   ST库函数       版本 V2.2.0
***********************************************************************/
#include "pbdata.h"//引入自定义公共头文件
void BSP_Configuration(void);//硬件初始化函数声明
/***********************************************************************
*   函 数 名: main
*   功能说明: c程序入口
*   形    参:无
*   返 回 值: 错误代码(无需处理)
***********************************************************************/
int main(void)
{
  BSP_Configuration();//硬件驱动初始化函数
    while(1)//主程序循环,反复执行循环体里的语句
  {
    JDQ_Demo();//在主程序中调用JDQ_Demo()函数
  }
}
/***********************************************************************
*   函 数 名: BSP_Configuration
*   功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
*   形    参:无
*   返 回 值: 无
***********************************************************************/
void BSP_Configuration(void)
{  
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);//时钟速度为内部16M,2分频,
  LED_Init();//调用LED初始化函数
  JDQ_Init();//调用JDQ初始化函数
}
/*断言函数:它的作用是在编程的过程中为程序提供参数检查*/
#ifdef USE_FULL_ASSERT
void assert_failed(u8* file,u32 line)
{
  while(1)
  {
  }
}
#endif
12.3.3  jdq.c文件中的程序
#include "pbdata.h"
/**************************************************************************
*   函 数 名: JDQ_Init
*   功能说明: JDQ的GPIO管脚初始化
*   形    参:无
*   返 回 值: 无
**************************************************************************/
void LED_Init(void)
{
{
  GPIO_Init(JDQ_PORT, JDQ_PIN, GPIO_MODE_OUT_OD_HIZ_SLOW);//初始化JDQ管脚为低速开漏输出高阻态
  }
}
/**************************************************************************
*   函 数 名: JDQ_Demo1
*   功能说明: 闪烁例程,间隔时间为3秒。
*   形    参:无
*   返 回 值: 无
***************************************************************************/
void JDQ_Demo(void)
{
    JDQ_L;
    delay_ms(3000);   
    JDQ_H;
    delay_ms(3000);
}
12.3.4  jdq.h文件中的程序
/***********************************************************************
*    剑齿虎STM8开发板硬件连接
*    JDQ-PG7                  
************************************************************************/
#ifndef _JDQ_H
#define _JDQ_H
#include "stm8s.h"

#define JDQ_PIN GPIO_PIN_7//定义GPIO_PIN_7引脚为JDQ_PIN,相当于重新命名。
#define JDQ_PORT GPIOG//定义GPIOG端口为JDQ_PORT,相当于重新命名。
//如果想用其他管脚控制LED,那么只需更改上面对应的端口与引脚编号即可
#define JDQ_L GPIO_WriteLow(JDQ_PORT,JDQ_PIN);//定义JDQ_L,调用JDQ_L命令,PG7引脚输出低电平
#define JDQ_H GPIO_WriteHigh(JDQ_PORT,JDQ_PIN);//定义JDQ_H,调用JDQ_H命令,PG7引脚输出高电平
#define JDQ_R GPIO_WriteReverse(JDQ_PORT,JDQ_PIN);//定义JDQ_R,调用JDQ_R命令,PG7引脚输出电平状态取反
/*---------------------------函数声明-----------------------------------*/
void JDQ_Init(void);  //JDQ初始化函数
void JDQ_Demo(void); //继电器吸合例程,间隔时间为3秒
#endif //定义文件名称结束

在这里我们对程序的主要部分做了详细的说明,如果想了解全部程序,请使用IAR软件打开我们的第12讲继电器试验程序(位置以光盘内容为主)。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

499

帖子

64

粉丝