美文网首页嵌入式
CC2530 红外对射传感器

CC2530 红外对射传感器

作者: 老中医167788 | 来源:发表于2022-03-09 22:56 被阅读0次

    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

    相关文章

      网友评论

        本文标题:CC2530 红外对射传感器

        本文链接:https://www.haomeiwen.com/subject/vfvxdrtx.html