【Silicon Labs BG22-EK4108A 蓝牙开发评测】 IV. 创建工程:通过蓝牙控制直流电机
[复制链接]
本帖最后由 zhang1gong 于 2022-1-19 23:36 编辑
通过几天阅读资料恶补(Silicon Labs公司的资料:《UG103.14: Bluetooth® LE Fundamentals》《UG438: GATT Configurator User’s Guide for Bluetooth® SDK v3.x》《UG118: Bluetooth® Profile Toolkit Developer's Guide》等),算是对GATT、SSv5(Simplicity Studio 5)IDE环境下采用范例程序作为模板,并充分利用SSv5提供的工具后生成的程序架构有了基本的了解,准备在此基础上做一个通过蓝牙控制直流电机的工程。
1 基本思路
在各种电机中,直流电动机的控制(调速)相对简单:只要控制加到直流电机电枢上的平均电压就可进行调速(电机为恒定励磁)。BG22-4108A评估板引出了PWM接口(PB4)(其实可以用几乎任意管脚输出PWM信号,我用PB4管脚只是为了与评估板的设计一致),用PWM信号作为电机驱动电路的控制信号,通过改变PWM信号占空比(即每一开关周期的脉冲宽度),就可以改变驱动电路输出的直流电压平均值,达到调速的目的。
我做的工程打算实现最基本两种控制:电机的启动、停止控制和转速的调整。
2 创建工程
最终实现的工程中,BG22-4108A评估板将作为一个独立的部件实现BLE服务端(Service)功能,因此,选择范例工程“Bluetooth - SoC Empty”作为模板显然是十分合适的。在“EXAMPLE PROJECTS & DEMOS”标签中选择“Bluetooth - SoC Empty”创建工程,改个自己工程的名字。SSv5提供了强有力的工具,可以自动生成初始化代码(初始化代码往往繁琐、乏味且很容易犯错),并可提供一些基本的与MCU内的基本部件操作、管脚行为相关的代码,大大减轻编程工作量,我们应该充分利用这些工具。工程创建完成后,打开“xxx.slcp”(xxx为工程名),应用SSv5提供的工具做编程的准备工作。
1)配置软件部件、管脚
安装并配置PWM输出所需的软件部件“PWM”:Selected Module:TIMER1;CC0:PB04(BG22-EK4108A评估板上的PB4连接到“PWM”接口);OUTPUT channel:channel 0。为了通过串口输出调试信息,对比“soc blinky”范例工程,安装“IO Stream: USART(vcom)(使能其中的“Convert \n to \r\n”可以解决PC端显示换行不回车的问题)”(Services-IO Stream下)、“Log”(Application-Utility下)。软件部件配置完成后,可以进到“PIN Tool”中查看管脚的总体配置,并核实软件部件配置中涉及到管脚的部分是否正确。
2)配置GATT
改设备名字为自己所需的;添加一个Service,命名为“PWM”;在这Service下添加两个Characteristic,分别命名为“PWM Duty”(用于接收占空比数据)和“PWM Start”(用于接收电机启动、停止命令),设置其属性为“读”和“写”,设置ID分别为为“pwm_duty”和“pwm_start”便于编程时引用。
3)添加代码
添加的代码全部在“app,c”中。主要包括在文件前部添加‘#include "sl_pwm_instances.h"’,因为随后要在app.c中添加SSv5自动生成的PWM操作相关代码;最重要的是要在“sl_bt_on_event(sl_bt_msg_t *evt)”函数中添加所需的通过GATT中的Service接收数据的代码。为了便于在程序运行过程中观察其运行状态,在适当的位置添加诸如“app_log_info("Connection opened.\n");”“app_log_info("Duty Ratio = %d%%.\n", data_recv);”的语句,通过评估板的模拟串口向PC端发送信息,在PC端就可以通过模拟终端看到相应的信息了。
3 运行结果
编译、修改直至无错误,下载并运行。在PC端打开模拟终端;在手机上打开蓝牙,运行“nRF Connect”app,可以看到新生成的自己蓝牙设备:
连接设备后可看到“Unknown Service”以及下面的两个“Unknown Characteristic”,根据UUID可知,这正是新添加的服务。
通过对应的Characteristic向评估板写入信息,分别用来改变PWM的占空比和启动、停止电机。连接、断开设备或写入数据时,可在模拟终端上看到相应的信息。
为了驱动电机,临时搭了个简单的驱动电路,找了个带减速机构的电机,便于看清转速的变化。电机低速和高速的视频:
4 小结
“磨刀不误砍柴工”,花点儿时间阅读相关文献很重要。
逐渐熟悉SSv5后,越来越觉得这个开发环境不错。
|