找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6351|回复: 1
收起左侧

51单片机+ISD1720语音+nRF24L01无线温度控制系统设计

[复制链接]
ID:74293 发表于 2017-12-7 23:08 | 显示全部楼层 |阅读模式
基于无线温度控制系统硬件介绍:
0.png
   该设计采用51单片机STC89C52控制DS18B20实现的无线温度控制系统。通过简单的无线通信协议,实现可靠性与功耗平衡。该系统能实现对温度的测量,同时还可以进行温度的设定,是可以实现远程控制的无线温度控制系统。无线传输采用nRF24L01模块传输。
该硬件电路设计主要分为三部分:主机和从机以及语音模块。
具体如下:
从机:由温度传感器DS18B20,STC89C52单片机和nRF24L01无线射频模块,以及LCD1602液晶显示模块和驱动模块、继电器等组成。
主机:由STC89C52单片机,nRF24L01无线射频模块,LCD12864液晶模块、电源稳压等组成。
语音模块:主要基于ISD1720设计,外接扬声器。

无线温度控制原理图与pcb(包含主机从机和ISD1720语音模块):
0.png 0.png 0.png

无线领域的总结,1、注意微机之间的通信,2、选择接受通道,3、设置工作通道频率
4、接收通道选择和发送通道相同有效数据宽度5、发射速率、功耗功能设置
6、CRC使能,16位CRC校验,上电,模式选择

单片机源程序如下(部分内容预览):
  1. //软件调试第三个问题,ISD1720有二种工作模式,SPI模式,也就是用单片机直接控制,
  2. //独立按键模式,直接用其外围按键控制,刚做好硬件发现独立按键模式工作不正常,
  3. //所以选择SPI模式。对ISD1720定点录好音后发现并不能实现连续放音,刚开始考虑到
  4. //可能是指令发送后1720没有足够的时间完成就收到了第二条指令才导致放音不连续,
  5. //于是考虑用延时,延时后发现可以把定点录的音都播放出来,但是各段语音之间有停顿
  6. //不能实现无缝播放,语音听起来很生硬,于是继续查看芯片数据手册,对这一点并没有介绍,
  7. //于是上网查SPI1720调试心得,发现ISD1720内部有先进先出数据缓冲器,FIFO是英文First
  8. //In First Out 的缩写,是一种先进先出的数据缓存器,这是一种传统的按序执行方法,
  9. //先进入的指令先完成并引退,跟着才执行第二条指令,并且ISD1720状态寄存器第四位INT作用
  10. //是当一个操作完成后被置1,可被CLR_INT清除。当发送一次定点播放命令后,不断地读状态寄
  11. //存器,判断INT位是否为1,若不是继续读状态寄存器,再判读,当INT为1时,用CLR_INT清楚,
  12. //紧接着发送第二条定点播放指令,至此实现了定点语音的无缝播放
  13.            if(temperature ==tempwant )
  14.            {        
  15.                 TxBuf[1] =0x07;//当温度相同时,自动发送停止降温或加热指令
  16.                     tf = 1 ;
  17.            }
  18.            if(tf ==1 )
  19.            {
  20.                    TX_Mode(TxBuf);
  21.                    delay_ms(20);
  22.                    TX_Mode(TxBuf);
  23.                    delay_ms(20);
  24.                    TX_Mode(TxBuf);//采用连发,为的是担心从机工作在发送模式,而接不到指令
  25.                    delay_ms(20);
  26.                     Check_ACK(1);              // 等待发送完毕,清除TX FIFO
  27.                         tf = 0 ;                                   //自动跳出发射状态
  28.                         delay_ms(100);
  29.                         RX_Mode();                                // 设置为接收模式
  30.        }        
  31. }
  32. //软件调试第二个问题,当调试NRF24L01通信时发现程序多次进入进入死循环,经查资料发现,
  33. //NRF24L01不能同时工作在发送接收二种状态,因为它是半双工通信。虽然可以收也可以发,
  34. //但是收的时候不能发,发的时候不能收,这种通信方式可以实现双向的通信,但不能在
  35. //两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,
  36. //也可以是接收端。但同一时刻里,信息只能有一个传输方向。
  37. /**************************************************
  38. 函数:main()

  39. 描述:
  40.     主函数
  41. /**************************************************/
  42. void main(void)
  43. {
  44.         init();//初始化液晶
  45.         pitcure(table_t);//开机图片
  46.         delay(1000);
  47.         SID_Init();//ISD1720初始化
  48.         delay(500);
  49.         ISD_set_play(0X7E,0X00,0X9E,0X00);//播放开机音乐
  50.         ISD_set_play(0X6D,0X00,0X6D,0X00);
  51.         //软件调试第四个问题:开机音乐不能实现正常播放,当下载程序的时候,
  52.         //开机音乐正常播放,断电后再接通,开机音乐不播放,其中有一个细节性的问题,
  53.         //就是下载程序时ISD1720有足够的时间初始化,由于再录音的时候使用了定点删除,
  54.         //导致录音没有遵从1720内部环形存储体系,导致1720自检需要很长的时间,
  55.         //改进办法:当接通电源后,在1720开机音乐定点播放命令前面放入开机图片,
  56.         //以此代替延时,使1720初始化完全后再给其发送开机音乐定点播放命令。
  57.         write_com(0x01);//清屏
  58.         init_io();                              // NRF24L01初始化IO
  59.         TX_Mode();                              // 设置为发射模式
  60.         RX_Mode();
  61.         while(1)
  62.         {
  63.             display();
  64.                 display_state();
  65.                 key();           // 按键扫描
  66.         if(tf ==0 )
  67.                 {
  68.                 sta = SPI_Read(STATUS);          // 读状态寄存器
  69.                                       //if(RX_DR)        判断是否接受到数据
  70.                   SPI_Read_Buf(RD_RX_PLOAD, RxBuf, TX_PLOAD_WIDTH);  
  71.                                               // 从RX FIFO读出数据
  72.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
  73.                  }
  74.         }
  75. }
复制代码

函数:FS()
软件调试第二个问题,当调试NRF24L01时发现程序多次进入进入死循环,它是半双工通信。虽然可以收也可以发,但是收的时候不能发,发的时候不能收,这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,也可以是接收端。但同一时刻里,信息只能有一个传输方向。在此设置

主机软件
② 源程序
无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720,此程序在调试时出现三大难题,一:NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态,为此必须做以下调整,主机:一直工作在接受状态,当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态;

从机:用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。二:在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音,三:应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。
经验及教训:1、学习一个新型原器件时应该反复琢磨芯片使用说明书,查看别人的学习新的体会,2、其中重要的是状态寄存器和微机之间的通信,3、单片机高电平时输出电流小于10个ma,低电平时大概为30~40MA,NRF24L01正常工作单片机输出电流应小于10个MA,否则容易烧毁模块,一般采用2K电阻限流。待续

软件介绍:
无线温度控制主机程序,包括三大模块,12864,NRF24L01,ISD1720。此程序在调试时出现三大难题。
1、NRF24L01是单收单发行器件,不能同时工作在既发射有接收状态。为此必须做以下调整主机,一直工作在接受状态。当有按键被按下时进入发射状态,同时停止接受,当发射结束后,自动跳出,进入接受状态。从机用标志位循环工作在发射接受状态,当发射结束后,自动定义标志位使其进入接受状态,然后再跳出接收状态,进入发射状态,如此循环。
2、在isd1720定点播放时要想实现无缝连接需要读状态寄存器,判断ISD1720返回的信号是否上一个指令已经完成,每次定点录音后1720会自动在语音结尾加EOM标志,所以录音时不应全部录完然后再查找所需要的语音,应单个录音。
3、应调试发现ISD1720反应比较慢所以要想实现开机音乐必须在主程序中加3秒延时,使语音芯片有足够的时间初始化,等待SPI指令的到来。

0.png
附件内容包括:
无线温度控制系统完整硬件设计原理图和PCB源文件(包括主机和从机以及语音模块);
C语言源代码(有详细的中文注释);
材料清单;

所有资料51hei提供下载:
基于51单片机无线温度控制系统完整项目设计开源.zip (1.37 MB, 下载次数: 124)


评分

参与人数 2黑币 +58 收起 理由
灼羊 + 8 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

无效楼层,该帖已经被删除
ID:1069354 发表于 2023-4-6 12:13 | 显示全部楼层
东西挺齐全,挺
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表