嵌入式

CC2530 红外对射传感器

2022-03-09  本文已影响0人  老中医167788

1.实验目的

  1. 通过实验掌握 CC2530 芯片 GPIO 的配置方法
  2. 学会在E18-D80NK或者E18-D50NK模块的使用方法
  3. 通过串口输出计数信息

2.实验设备

硬件:PC 机一台, ZB2530,E18-D80NK光电传感器 一个
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境、串口助手

3.实验相关电路图

image.png WeChat Image_20220309065316.jpg
接线方式:
image.png

或者

红外接口 CC2530
棕色 VCC、5.0V
蓝色 GND、0V
黑色 信号线

红外对射模块:

应用:
1、生产线货物自动计数设备
2、多功能提醒器
3、走迷宫机器人

注意事项

为保护动作的可靠和寿命长,请避免有关规定以外的温度外界(户外)条件下,接近传感器虽为耐
水结 构,若装上罩使用,勿使水和水容性切削油等淋到,则可更好地提高可靠性及寿命。

光电式传感器(光电开关)NPN 常开
型号:E18-D80NK/ E18-D50NK。。

光电开关 E18 的技术参数:
1、输出电流 DC/SCR/继电器 Control output:100mA/5V 供电
2、消耗电流 DC<25mA
3、响应时间 <2ms
4、指向角:≤15°,有效距离 3-80CM 可调
5、检测物体:透明或不透明体
6、工作环境温度:-25℃~+55℃
7、标准检测物体:太阳光 10000LX 以下 白炽灯 3000LX 以下
8、外壳材料:塑料

  1. 代码分析
#include <ioCC2530.h>
#include <stdio.h>
#include <string.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define LED1 P1_0       //定义P1.0口为LED1控制端
#define LED2 P1_1       //定义P1.1口为LED2控制端
#define LED3 P0_4       //定义P0.4口为LED3控制端

#define DATA_PIN P0_6   //定义P0.6口为传感器的输入端

uint count;             //计数器

/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;
    
    for (i=0; i<msec; I++)
        for (j=0; j<535; j++);
}

/****************************************************************************
* 名    称: InitUart()
* 功    能: 串口初始化函数
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitUart(void)
{ 
    PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 
    P0SEL |= 0x0c;           //P0_2,P0_3用作串口(外设功能)
    P2DIR &= ~0XC0;          //P0优先作为UART0
    
    U0CSR |= 0x80;           //设置为UART方式
    U0GCR |= 8;                    
    U0BAUD |= 59;           //波特率设为9600
    UTX0IF = 0;              //UART0 TX中断标志初始置位0
}

/****************************************************************************
* 名    称: UartSendString()
* 功    能: 串口发送函数
* 入口参数: Data:发送缓冲区   len:发送长度
* 出口参数: 无
****************************************************************************/
void UartSendString(char *Data, int len)
{
    uint I;
    
    for(i=0; i<len; i++)
    {
        U0DBUF = *Data++;
        while(UTX0IF == 0);
        UTX0IF = 0;
    }
}


/****************************************************************************
* 名    称: InitGpio()
* 功    能: 设置LED灯和P0.4相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
    P1DIR |= 0x03;           //P1.0、P1.1、P1.4定义为输出
    P0DIR |= 0x10;          //P04定义为输出
    P0SEL &= ~0x40;
    P0DIR &= ~0x40;          //P0.6定义为输入口    
    P2INP |= 0x20;
    
    LED2 = 0;                //点亮D2 提示程序已运行
}

void main(void)
{     
    char buf[10];
    
    memset(buf, 0, 10);     
    InitLed();                        //设置LED灯和P0.4相应的IO口
    InitUart();                       //调置串口相关寄存器

    CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
    CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
      
    InitUart();                       //调置串口相关寄存器
  
    while(1)                          //无限循环
    {
        if(DATA_PIN == 0)             //挡住红外对管输出低电平,平时为高电平
        {                             //不同的型号可能不同,修改触发电平就行        
            LED1 = ~LED1;             //挡住红外对管D1发生变化
            while(!DATA_PIN);           
            count++;
            sprintf(buf, "%05d ", count);
            UartSendString(buf, 6); //串口发送数据,显示当前记数值
        }
    }   
}

5. 实验步骤与现象

前方无障碍输出高电平,有障碍输出口(黄色)电平会从高电平变成低电平,背面图有一个
电位器可以调节障碍的检测距离,一旦调节好电位器。则在有效距离内(如40cm处有障碍物、
10cm处有障碍物)则输出低电平,低电平刚好给单片机识别。
在电路设计中可以再输出端黄线加上拉电阻10K到5V,再接入单片机检测,会比较稳定,单片机
检测可以采用外部硬件中断INT0 INT1等来实现。

  1. 接好线 VCC 和 GND 不要接错了。
  2. 下载程序到开发板中。打开串口助手设置参考为波特率9600 8N1 。
  3. 实验中使用 P0_6 作为检测引脚, 挡住红外对管时对管上的灯亮,拿开就灭。发生一次 D1 也会
    改变。
9926752-38d13ae13e27eb40.png
上一篇下一篇

猜你喜欢

热点阅读