基于RSL10的风扇改造
本开发项目目标为改造现有电扇,实现根据温度自动调风(定速、自然风等多种模式)、多风扇联网的功能。
本项目使用开发板有两种,分别是:“RSL10传感器开发套件(带调试器)RSL10-SENSE-DB-GEVK”和“RSL10无线SoC评估板RSL10-002GEVB”,其中RSL10-SENSE-DB-GEVK上的传感器非常多,用于环境监控;RSL10-002GEVB接口相对丰富,用于目标控制。
1、RSL10简介
本次项目主要围绕On Semi公司的RSL10超低功耗多协议蓝牙5系统级芯片(SoC)开展,这个芯片的主要特点包括超低功耗,使用Arm®Cortex®−M3处理器和LPDSP32 DSP核心,支持超低功耗蓝牙芯片。其框图和架构如下:
图1 SoC基本框图
图2 SoC架构图
2、RSL10-002GEVB板卡简单介绍
从资料上看来,RSL10-002GEVB使用了四层板(不展开水字数),实拍外观如下:
图3 实拍图片
与安森美官网的图片(图4)不同,多了一块PCA9655E(左上角U5,靠近PMOD接口),这个芯片也是ON Semiconductor,从该芯片的datasheet(附件)中可以看到它的功能主要是通过I2C总线和SMBus提供16位通用并行输入和输出(GPIO)扩展。
图4 官网上的图片,右上角芯片未焊
该开发板支持Arduino接口
图5 Arduino接口
在本项目中,只需要用到任意一个IO口(可用IO口实在太多),本来想直接用现有arduino扣板或专为其画一块扣板,但后来发现有些浪费,故直接使用杜邦线连接。
另外,这块板上预留一个IPEX天线接口,可以直接使用外置天线,虽然不知道是2.4GHz还是5GHz的天线,反正接上去信号会好一点。
图6 蓝牙天线
3、RSL10-SENSE-DB-GEVK板卡简单介绍
RSL10-SENSE-DB-GEVK非常小,但传感器功能很全,其中BME680集成了高线性和高精确度气体、压力、湿度和温度传感器,在板卡上使用I2C连接到RSL10上。
图7 环境检测电路
其温度检测寄存器如下
图8 BME60的寄存器
在代码读取时,只取其中7:5位即可。
实际家用风扇电路如下
图9 风扇电路
在上图可以看到风扇电机实际上是由变速开关选择多个电压输入接口,查询网络资料,分析风扇电机并不是靠改变绕组磁场频率来变速的,而是通过调速开关将市电电压加载在电机线圈不同抽头上,改变调速开关的档位可以改变电机中用于驱动的线圈绕组数值,使得流经电机的电流大小发生变化,进而调整风扇转速。
因此可以直接改变外部电压来控制转速。在RSL10-002GEVB中,有专用的PWM接口IO3,为了使PWM可以驱动风扇,参考某风扇无级调速电路,设计了通过PWM控制风扇转速的电路,并在multisim中做了仿真:
图10 仿真电路
其中XFG2为信号发生器,用于替代开发板,可以发出占空比不同的方波,U1是光耦,可以用来隔离市电和低电压(开发板),R2用来实际调整光耦断开时的D2电压,D1是双向可控硅,C2、R4用于保护,防止D1开关控制引起高电压或大电流,U2是风扇电机,在仿真中增加XMM2做转速监控。
通过调整XFG2中的方波占空比,可以使得风扇电机在不同速度下运转。
仿真结果:
图11、图12 仿真结果
仿真结果中的电压表读数仅仅是作为转速参考,无法真实体现其转速。可以看到,占空比越大,风扇转速越高。
仿真后已画板打样(画了两版,都有些问题),另购置成品板AC-3S支持pwm调压功能。
图13 AC-3S外观
图14 AC-3S的原理图
原本还准备实现风扇倾倒自动断电功能,后因某些原因,未实现。
因为方案比较简单,故分别开发了电脑版和手机版两个版本,都可独立使用,界面较为简单,功能也类似。其中风扇转速写的1000~3000,但实际转速与风扇本身特性相关,具体多少转并没有实际测试。
电脑版考虑到兼容性,使用的是python,目前是在Windows上运行,可以非常容易移植到Linux上。界面如下:
图15 电脑板工具界面
从RSL10-SENSE-DB-GEVK读取外界环境,设定风扇转速,各风扇号是直接用RSL10-002GEVB开发板上mac地址规定的。当开发板作为server主动连接到电脑上时,电脑会记录已连接,并将当前转速下到开发板上。如果一直没有连接上,则认为该风扇不存在(未加电)。
手机版工具功能类似,使用kotlin开发,目前是只能在安卓系统上使用,未来可以考虑移植到鸿蒙和IOS。界面如下:
图16 Android工具界面
1、环境准备
下位机采用基于Eclipse的安森美Integrated Development Environment (IDE)开发工具完成。下载链接在www.onsemi.com/RSL10,安装比较简单,基本上就是执行“下一步”就行,在这里就不展开了,安装后直接执行,360会报有木马,会直接删除文件,所以,运行时需要关闭杀毒工具。
图17 木马
参考文档“RSL10_getting_started_guide.pdf”,在IDE中导入BDK PACK、RSL10 PACK、ARM CMSIS PACK、FreeRTOS PACK。
这些PACK有些是从安森美官网获取(也可以从justd0兄的网盘里获取),有些从安森美官网链接到github里获取,例如:
https://github.com/ARM-software/CMSIS_5/releases
https://github.com/ARM-software/CMSIS-FreeRTOS/releases
图18 导入pack前
点击上面的文件夹图标,选择文件(支持一次导入多个PACK),导入过程中,可能需要安装,选择同意,点击OK就行。至于具体的文件条款,似乎不用深究。
图19 各种Licence文件
安装完成后
图20 项目中用到的PACK
图21 可用的开发板
- 示例代码分析
因为本项目中只需要实现两种功能:蓝牙信号量获取和蓝牙PWM设置,相对来说非常简单,基本就是套用例程,以项目中通过RSL10 Evaluation Board(1.0)控制风扇转速功能的开发为例,基本上简单将例程Peripheral_server和Pwm_driver合并就可以了。
Peripheral_server是一个比较简单易懂的代码,在app.c中,首先调用App_Initialize()初始化了环境,比如蓝牙、内核、电源、时钟、中断等,再通过while循环调用Kernel_Schedule(),例程中是循环检查电池,看是否发生改变,如果改变则推送到客户端,这段代码对我们没啥用,可以直接注释掉。接下来的循环则是我们需要的自定义服务:
图22 自定义服务
示例中的自定义服务是读出的,而我们需要的功能正好相反,从外部读取数据并写入pwm。当收到GATTM_ADD_SVC_RSP响应时,可以保存自定义服务的启动句柄,基于此,我们可以直接利用这两个函数实现所需功能:
图23头文件 ble_custom.h中有关用户服务的部分
调整消息处理所需完成工作(从pwm_driver中导入相关内容)即可。
pwm_driver项目里面的变量“pwmDutyCycle”改由BLE控制。
在“RTE_device.h”找到PWM接口定义:
图24 PWM0的接口DIO
可以看到使用的pwm0是RSL10的IO6。和原理图中也吻合,如下图:
图25 原理图中LED 1驱动
从原理图中可以看到INT0就是DIO6(参见之前图5)
图26 DIO6复用为INT0
- 开发过程
合并代码方法不用累述,见下图
图27 在Pack Properties窗口选择例程
图28 拷贝文件
将两个项目合并起来,以Peripheral_server为基准,去除LED1的闪灯代码,补充LED1的pwm控制功能。
- 编译和调测
删掉已经没用的pwm_driver,在菜单中选择Project-Build All。编译成功后,会多出可执行文件Binaries文件夹。
使用usb线连接板卡。
在编译好的elf文件中,右键开启debugger功能。
图29 使能debug
通过板上的仿真器连接,因此可以使用J-link,双击打开以后,确定debug的接口是SWD。
图30 确认debug所用接口
点击Debug按钮开始执行debug功能。
使用键盘F6单步执行,可以看到程序在while循环中执行。
- 温度检测的联调方法
温度检测基本就是例程了,直接取用数据即可。
- PWM的调测
由于板上的led观察并不明显,使用示波器倒是可以看到占空比。通过调整蓝牙client,可以看到输出方波占空比是不同的。
图31~图33 示波器查看输出
虽然在示波器上看到波形中占空比是有变化的,但对于其pwm的功能并没有直观感受,尝试直接将INT0与5V小风扇连接,发现根本无法驱动风扇转动(无论是对地或是对高电平),考虑到人眼对颜色比对亮度更加敏感,使用LED彩灯,通过观察颜色变化验证PWM功能,发现还是很方便的(照片效果不是很好,但实际上红色到紫色的变化是比较明显的)。
图34、图35 通过LED颜色查看输出
- 驱动板的调测
如之前所述,直接购置了一块成品的可控硅调压模块,接法如下:
图36通过PWM控制交流输出电压
- 实测风扇
将3.7V锂电池、RSL10-002GEVB和驱动板连接好,并装入风扇内实测,发现无法连接蓝牙,推测原因是风扇的金属外壳屏蔽了蓝牙信号,通过同轴将天线引出,留在金属壳外。可正常使用
图37 组装好的成品图
实测的确有调速功能,但转速设计明显不正确,当转速设置过低时,风扇直接停止工作,必须将风扇转速拉高,风扇才能恢复运作,再慢慢调低转速。推测风扇是有一个最低的工作电压,低于该电压,风扇电机处于保护状态。
参加本次活动也是期待了很久,参加以后,发现之前订的目标太大,比如说风扇转速上云,传感器直接感应风扇动作,多个风扇之间相互发现,这些功能都没有实现,直接砍掉了相关功能,所以做出来的最终成品看起来稍微简陋了一些,甚至感觉因为没有上云,似乎和本次大赛主题的“物联网”渐行渐远(当然,还是组了个本地的蓝牙小网)。
总的来说,感谢电子工程世界给我们这个尝试和展示自我的平台,感谢安森美半导体和安富利物联网创新设计大赛组委提供的软硬件、资料和培训,以及活动中给我帮助的各位朋友们,下次有机会还将继续参加同类活动。
|