本文主要是介绍【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。
一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。
现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给出相对较好的建议,特别是硬件设计之初,需要注意的点,绕开某个坑之类的,原厂工程师经验最为丰富。
那么,在硬件出来之后,则需要软件配合进行一些硬件的测试。就像上面说的那三个测试一样,除开天线匹配测试(需要将产品放在实际的产品壳子内,使用网络分析仪进行匹配分析)的之外,我主要讲解如何编写测试发送功率的测试软件,以及如何编写测试接收灵敏度的测试程序。
1.发送功率匹配测试程序开发详解
原理:
无线射频数据发送,有一个我们俗称的发送功率,发射功率越大🈷越稳定,则说明发射的能量越大越稳定。当然,如果在发射电路上匹配一个增益放大电路的话,那么发射功率会比芯片实际设置的要大。发射功率的大小,和发射电路的匹配有关,其中还涉及到谐波、频偏等。我非硬件出身,只是略懂这些名词,具体还得请教硬件工程师。
硬件工程师则需要我们的软件配合他们测试,具体是想让我们的程序在上电后,在固定的频点一直不停的发射。软件这边的实现原理则是:使用CMOSTEK RFPDK V1.46软件生成一个指定频点的配置(如433.7MHz,具体下面会讲解),然后在程序初始化之后,直接进入TX模式,while 1死等,让无线芯片一直处于TX状态。我们需要关心射频芯片发出来的东西是什么,我们只需要关心射频芯片一直在发送数据,不停不间断的发送数据就可以来。
具体实现:
A. 打开CMOSTEK RFPDK V1.46软件,选择2300a芯片,进行配置,这里我们使用433.7MHz,Modulation为OOK,速率为2.4Kbps,发射功率设置为芯片支持的最大功率值:20dBm,数据模式为packet包模式。具体配置如下图所示:
需要注意的是,我们在选择速率的时候,需要查看一下频谱仪的精度,如果使用太高的速率,可能会频谱仪测试出来的数据会偏小。这是我踩过的坑,当时硬件工程已经改好匹配电路,设置了20dBm,没有增益电路,正常来说应该会出来19.2dBm左右,但是只是出来来16dBm左右,后面有经验的软件工程师修改为以上的配置,在硬件不改动的情况下,频谱仪测到的19dBm左右,才是正常。
再说一句,在验证发射功率和接收灵敏度前,其实先应该测试spi与射频芯片是否通信上,必要的时候需要上示波器进行分析。或者根据我的前两篇相关博客进行调试,希望对你们有帮助。
B. 完整配置表后,使用脚本将exp文件生成.h文件,在参考射频芯片的初始化demo程序进行数据初始化之后,将射频芯片切换到TX模式,然后可以写个死等的代码,此时,无线芯片就会一直处于发送状态,我们不需要关系它发什么数据。
2. 接收灵敏度测试程序开发详解
原理:
无线射频的接收,对于射频芯片来说,就是对射频信号进行解调。射频信号经过接收电路,最终到达射频芯片,那么接收电路就需要进行对杂波的一些过滤啊,微弱数据进行放大之类的。我们不说直接使用两个模块进行收发测试的这种测试方式,因为这个不确定的因素太多。
2300a有个数据直通模式(数据流模式),设置好频点,频偏,调制等方式后。发送方使用信号源发送0101数据,此时配置接收方(2300a)的gpio3为输出模式,将示波器接在gpio3上,示波器就可以抓到方波数据,此时肉眼就可以判断丢包是否严重,如果是规律的010101产生的方波就是连续的,如果接收差的话,看到的方波是丢数据的。
具体实现:
A. 打开CMOSTEK RFPDK V1.46软件,选择2300a芯片,具体的配置需要根据项目具体使用那个频点,速率,频偏等参数进行配置。最重要的是将数据模式选择直通模式。如下图标红红色部分。
B. 将exp配置文件使用脚本生成.h文件。软件部分的实现:根据官方提供的demo,对2300a无线芯片进行初始化后。需要说明的是,2300a的gpio3能在板子上引出来,方便示波器进行测试。比如说,正常我们的配置是:gpio1,gpio2默认让2300a控制天线开关,我们使用gpio3作为外部中断脚。这里因为是我们需要测试接收灵敏度,2300a收到数据后需要往外直接输出,所以我们需要将gpio3配置为输出,然后将2300a状态设置为Rx状态。至此,接收灵敏度的测试程序完成。这里我就不贴具体的代码实现了,有疑问的话欢迎交流,一起进步。
3.最后的话
在无线产品确定后,还需要在真实的环境进行拉距离测试。官方文档上说的,直接距离以及极限的RSSI,都是在空旷环境下进行的测试,具体复杂的环境就不一样了。其实就我们接触的半年里,2300a芯片如果是同款芯片进行通信的话,理论值非常好。但是在真实的复杂环境中,抗干扰性还有待提升。我们之前是使用si4438 si4432,是比较稳定,抗干扰比较强。我们不评价好坏,只是说,选择放在适宜的产品上,将产品的效益最大化,功能满足,性能稳定是关注。
另外需要说的是(避坑):
- 2300a配套的demo调试版,虽然可以快速的进行数据的收发测试,但是千万不要100%相信它,目前我使用的版本,接收只能接收32个字节,之后的数据都为0;
- 2300a配套的demo调试版,发送也只能发送32个数据,后面的数据要么是乱码,要么是全0;
- 如果修改中断的产生方式,比如将下降沿产生中断改为上升沿产生中断,那么就要好好看文档,有些中断标志是需要根据极性进行取反!!!而0x68这个寄存器是不需要取反的!!!
- 文档中有个寄存器(0x6E)的说明和代码中的宏定义不一致,以代码中的宏定义为准;
- 如果在发送里有写while(1)去读寄存器标志,一定要加超时,因为2300a会出异常,整个芯片异常,此时超时后需要进行对它软件复位(2300a没有硬件复位);
- 接收数据的时候,要提前给2300a设置数据长度,否则会因为数据太短,很快就接收完成,而此时还没有读取中断标志而被意外清除,导致异常的情况。所以建议在接收或者发送完成后切换为接收状态时,顺便将数据长度设置长一点,比如我每次接收完后我就设置payload长度为100,这样中断标志出错的概率就少很多。
这篇关于【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!