基于CC2530的光电传感器模块实验

实验内容

  • 了解光电开关工作原理;
  • 编写程序检测光电开关状态,有物体穿过U型槽时底座红色LED灯亮起。

实验目的

  • 认识光电传感器;
  • 了解光电传感器工作原理;
  • 掌握光电传感器配合其他模块使用技巧。

实验环境

实验所需硬件

序号 名称 数量 备注
1 电脑 1台 系统Windows7及以上
2 CC2530底座模块 1个 ·
3 光电传感器模块 1个 ·
4 OLED模块 1个 ·
5 CC Debugger 仿真器和连接线 1套 ·
6 USB线 1根 ·
7 光电传感器实验代码 1份 ·

实验所需软件

CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。

实验硬件

CC Debugger 仿真器和连接线

实验硬件

光电传感器模块

光电传感器模块

OLED模块

OLED模块

USB线

USB线

实验要求

  • 理解光电传感器工作原理;
  • 能够编写程序检测光电传感器输出信号。

实验原理

光电传感器工作原理

利用光学元件,在传播媒介中间使光束发生变化;利用光束来反射物体;使光束发射经过长距离后瞬间返回。光电开关是由发射器、接收器和检测电路三部分组成。发射器对准目标发射光束,发射的光束一般来源于发光二极管(LED)和激光二极管。光束不间断地发射,或者改变脉冲宽度。受脉冲调制的光束辐射强度在发射中经过多次选择,朝着目标不间接地运行。接收器有光电二极管或光电三极管组成。在接收器的前面,装有光学元件如透镜和光圈等。在其后面的是检测电路,它能滤出有效信号和应用该信号。

光电耦合器是以光为媒介传输电信号的一种电一光一电转换器件。它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,彼此间用透明绝缘体隔离。发光源的引脚为输入端,受光器的引脚为输出端,常见的发光源为发光二极管,受光器为光敏二极管、光敏三极管等等。光电耦合器的种类较多,常见有光电二极管型、光电三极管型、光敏电阻型、光控晶闸管型、光电达林顿型、集成电路型等。工作原理在光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流的大小,此光照射到封装在一起的受光器上后,因光电效应而产生了光电流,由受光器输出端引出,这样就实现了电一光一电的转换。

由振荡回路产生的调制脉冲经反射电路后,由发光管GL辐射出光脉冲。当被测物体进入受光器作用范围时,被反射回来的光脉冲进入光敏三极管DU。光电开关并在接收电路中将光脉冲解调为电脉冲信号,再经放大器放大和同步选通整形,然后用数字积分或RC积分方式排除干扰,最后经延时(或不延时)触发驱动器输出光电开关控制信号。 光电开关一般都具有良好的回差特性,因而即使被检测物在小范围内晃动也不会影响驱动器的输出状态,从而可使其保持在稳定工作区。同时,自诊断系统还可以显示受光状态和稳定工作区,以随时监视光电开关的工作。

硬件原理图

光电传感器原理图
光电传感器原理图

实验步骤

① 将光电传感器模块与OLED模块分别安装在底座上,用CC Debugger连接底座与电脑,如下图所示:

模块组装

② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:

![模块组装](/assets/CC2530/5.png)

③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:

操作步骤

④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):

$ cd workspace

⑤ 运行clone命令:

$ git clone https://github.com/aiotcom/eps.git 

下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code -> DownLoad ZIP 下载所有工程代码。如下图所示:
下载代码
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。

⑥ 打开 IAR Embedded Workbench 工程软件,点击工具栏: File -> Open -> Workspace,选择工程文件:基于CC2530的模块实验\4.光电传感器模块\Optocoupler.eww 并打开。

打开工程

选择文件

⑦ 点击Make按钮,重新编译文件,显示没有错误。

文件编译

⑧ 点击Download and Debug按钮,将程序下载到模块中。

下载程序

代码下载成功

⑨ 点击X退出仿真模式。

退出仿真

⑩ 移除CC Debugger仿真器,采用USB线供电。

采用USB线供电

⑪ 观察OLED屏显示:
未遮挡U型槽:
未遮挡U型槽
遮挡U型槽:
遮挡U型槽

代码讲解

① 程序目录结构,源代码文件如下图:
代码目录结构

② main.c代码,对OLED IIC 接口IO、OLED、光电开关初始化,初始化完成后,绘制开关界面,光电开关检测到有遮挡物OLED屏显示“OK”,无遮挡物显示“NULL”。

    void main(void)
    {
        Hal_Init_32M();//初始化32M时钟
        Optocoupler_Init();//初始化光电传感器
        OLED_IIC_Init();//初始化OLED  ICC接口
        OLED_Init();//初始化OLED屏
        OLED_Init_UI();//初始化显示界面

		/*显示一个开始界面*/
		OLED_P16x16Ch(30,2,1);//阶
		OLED_P16x16Ch(50,2,2);//石
		OLED_P16x16Ch(70,2,3);//物
		OLED_P16x16Ch(90,2,4);//联
		OLED_P8x16Str(3,4,"www.stepiot.com");
    while(1)
        {
			if(Optocoupler_State_Read()){//读取光电状态
				OLED_P8x16Str(20,6,"OK  ");//显示OK,表示检测有遮挡物
			}
			else{
				OLED_P8x16Str(20,6,"NULL");//显示NULL,表示i没有检测有遮挡物
			}
        }
    }

通过调用Optocoupler_State_Read (),光电开关反馈的值,当返回1,表明有检测遮挡物,返回0,没有遮挡物。

    if(Optocoupler_State_Read()){//读取光电状态
		OLED_P8x16Str(20,6,"OK  ");//显示OK,表示检测有遮挡物
		}
	else{
		OLED_P8x16Str(20,6,"NULL");//显示NULL,表示i没有检测有遮挡物
		}

常见问题

  1. 弹出警告窗口,不能下载程序。

    • 请确认CCDebugger驱动否安装。
    • 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
    • CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
  2. 下载代码后程序没观察到实验现象。

    • 请重新上电,或者按下底座上的复位按键。
    • 模块没有安装稳妥。

实验思考

  1. 修改代码在,实现OLED屏上显示检测到有遮挡的次数。