• 基于大功率白光 LED 的可见光通信


    目录
    摘要 1
    1 、系统方案设计思路 3
    2 、方案设计与选择 4
    2.1 CPU 的选择 4
    2.2 锁相环的选择 4
    2.3 光调制中放大器件的选择 4
    2.4 显示模块的选择 4
    3、系统方案详细设计 5
    3.1 可见光通信装置电源模块 5
    3.2 可见光通信装置发送端 5
    3.2.1 信号调制电路 5
    3. 3 可见光通信装置接收端 6
    3.3.1 信号解调放大电路 6
    4、系统软件设计 8
    5、测试结果与分析 8
    5.1 仪器设备 8
    5.2 各模块测试 9
    5.2.1 语音传输模块测试 9
    5.2.2 模拟信号传输测试 9
    5.2.3 LED 照明模块测试 9
    5.2.4 电源模块测试 10
    6、总结 10
    参考文献 11
    1 、系统方案设计思路
    本文所设计的可见光通信装置以 MSP430F149 为控制核心,由发送端、接收端两部分组成。 使用 MSP430F149 产生 m 序列并完成对装置的温度检测、电压采集及信号传输记录等功能,
    并且实时在 12864 上显示。 发送端由主控芯片组成的最小系统、前置放大电路、音频调制电路、光调制电路、白光
    LED 发射灯、显示模块、24V 电源等模块组成。该部分实现了对两路语音信号和 m 序列的调制 并通过可见光发射给接收端的任务。
    接收端由放大滤波电路、音频信号功率放大电路、整形电路、音频解调电路、PIIN 光电 二极管等模块组成。该部分实现了来自发送端信号的解调、放大和语音输出,以及完成来自 m 序列发生器的波形输出的任务。
    总系统框图如下:
    在这里插入图片描述

    2 、方案设计与选择
    2.1 CPU 的选择
    方案一:采用 51 系列单片机。采用现在比较通用的 51 系列单片机作为整个系统方案的 主控 CPU。51 系列单片机应用比较广泛,各种技术都比较成熟,但此系列单片机是 8 位机, 处理速度不是很快,I/O 端口较少,资源不够充足。
    方案二:采用 MSP430 系列单片机。TI 公司的 MSP430 系列单片机是一种 16 位超低功耗 的混合信号处理器,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数 寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以 及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度;接口 方便开发;而且 MSP430 系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便, 满足当前低碳经济的要求。
    综合以上方案,我们采用 TI 公司的 MSP430 系列单片机,选择方案二。

    
    /********************************************************************/
    
    #include 
    
    #define CPU_F ((double)8000000) 
    #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 
    #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 
    
    #define uchar unsigned char
    #define uint  unsigned int
    #define ulong unsigned long
    
    #define  KeyPort         P1IN                              //独立键盘接在P24~P27
    #define  LED             P2OUT                             //LED灯接在P5上
    uchar key;
    
    
    
    //*************************************************************************
    //       系统时钟初始化
    //*************************************************************************
    
    void Clock_Init()
    {
      uchar i;
      BCSCTL1&=~XT2OFF;                 //打开XT振荡器
      BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
      do{
        IFG1&=~OFIFG;                   //清除震荡标志
        for(i=0;i<100;i++)
           _NOP();                      //延时等待
        }
      while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
         IFG1&=~OFIFG; 
    
    }
    
    
    
    
    void WDT_Init()
    {
       WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    }
    
    //*************************************************************************
    //	初始化IO口子程序
    //*************************************************************************
    void Port_init()
    {
    
         P1SEL = 0x00;                   //P2普通IO功能
         P1DIR = 0xF0;                   //P24~P27输入模式,外部电路已接上拉电阻
         P2SEL = 0x00;                   //P5口普通IO功能
         P2DIR = 0xFF;                   //P5口输出模式
         LED = 0xff;
    
    }
    
    //**********************************************************************
    //	键盘扫描子程序,采用逐键扫描的方式
    //**********************************************************************
    
    uchar Key_Scan(void) 
    {
      uchar key_check;
      uchar key_checkin;
      key_checkin=KeyPort;          	//读取IO口状态,判断是否有键按下
      key_checkin &= 0x0F;          		//读取IO口状态,判断是否有键按下
      if(key_checkin!=0x0F)            	//IO口值发生变化则表示有键按下
        {
            delay_ms(10);                  	//键盘消抖,延时20MS
        
          key_checkin =KeyPort;
          key_checkin &=0x0f;
          if(key_checkin!=0x0f)
            {  
                key_check=KeyPort;
                switch (key_check & 0x0F)
                {
                  case 0x0e: key=4;  break;
                  case 0x0d: key=3;  break;
                  case 0x0b: key=2;  break;
                  case 0x07: key=1;  break;
                }
              
            }
          
       }
      else
       {
                      key=0xFF;        
       }
                     return key;
    
    } 
    
    
    
    
    
    
    //*************************************************************************
    //		主程序
    //*************************************************************************
    
    void main(void)
    {     
          WDT_Init();                            //看门狗设置
          Clock_Init();                          //系统时钟设置
          Port_init();                           //系统初始化,设置IO口属性
          delay_ms(10);                         //延时100ms
      while(1)
      {
            Key_Scan();                       //键盘扫描,看是否有按键按下
            if(key!=0xff)                     //如果有按键按下,则显示该按键键值1~4
            {  
                switch(key)
                  {
    	        case 4: LED=0xfe;break;  //给不同的键赋键值,键值1,亮1个LED灯D1
                    case 3: LED=0xfd;break;  //给不同的键赋键值,键值2,亮1个LED灯D2
                    case 2: LED=0xfb;break;	 //给不同的键赋键值,键值3,亮2个LED灯D1.D2
                    case 1: LED=0xf7;break;	 //给不同的键赋键值,键值4,亮0个LED灯
                    default: LED=0x7f;
                  
                  }         	
           }
         else
          {
                  //  LED=key;              	//没有按键的时候显示上次的键值
                    // LED=0x00;  
          ///}
          }
    ///*/
          }
    }
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    RabbitMQ中延迟队列的全方位解析
    模型分类model
    2002-2020年341个地级市农业保险保费收入数据
    Windows安装nginx
    obs 时间显示插件
    Hydra使用教程图文教程(超详细)
    opencv-图片水印
    06 Feign远程调用
    HQChart使用教程30-K线图如何对接第3方数据36--散点图
    Day17-购物车页面-收货地址-把address信息存储到vuex中
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127664910