你可以将下面的提示词复制给 Codex 或其它惯用的 AI 编程助手,让它代你实现该功能:
帮我实现一个 MG90S-360° 舵机的端侧 MCP 功能:
- 使用 Arcs-mini 的 PA06 输出 PWM,直接控制舵机信号线;
- 支持顺时针、逆时针旋转和停止;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
帮我实现一个 MG90S-360° 舵机的端侧 MCP 功能:
- 使用 Arcs-mini 的 PA00 输出 PWM,直接控制舵机信号线;
- 支持顺时针、逆时针旋转和停止;
- 注册一个可供语音调用的端侧 MCP 工具。
请基于 mini-v3.0.2-m3 完成代码修改,并帮我编译烧录。
本文是一篇实战教程,旨在引导你通过自定义 MCP(Model Context Protocol)工具,结合语音指令控制硬件设备。我们将以 Arcs-mini 开发板为例实现一些 mcp 工具。
实操之前,请确保已根据文档《Arcs-Mini 开发环境搭建指南》 搭建开发环境。
本篇示例源码基于 3.0.2-m3 版本的 SDK。
可通过命令git log查看版本,如果版本不一致,请使用命令git checkout mini-v3.0.2-m3切到指定 SDK 版本。
参考文档《烧录工具安装教程》安装ADB工具
执行命令adb shell kv set int user.disable_app_update 1关闭云端OTA更新,防止云端更新把刚烧录的固件刷掉了。
| 硬件型号 | 图片 | 购买链接 |
|---|---|---|
MG90S-360°舵机 |
![]() |
购买链接 |
(仅Arcs-Mini2需要)一公二母type-c转接头 |
![]() |
购买链接 |
(仅Arcs-Mini2需要)type-c公头转2pin端子 |
![]() |
购买链接 |
| Arcs-Mini2 | MG90S-360° | 当前用途 | 说明 |
|---|---|---|---|
PA06 |
橙线/黄线 | PWM0 CH6 信号 | Function 12 |
5V |
红线 | 舵机供电 | 建议使用独立 5V 电源 |
GND |
棕线/黑线 | 公共地 | 独立供电时必须与开发板共地 |


| Arcs-Mini3 | MG90S-360° | 当前用途 | 说明 |
|---|---|---|---|
PA00 |
橙线/黄线 | PWM0 CH0 信号 | Function 12,会覆盖 EXT4G_PWR |
5V |
红线 | 舵机供电 | 建议使用独立 5V 电源 |
GND |
棕线/黑线 | 公共地 | 独立供电时必须与开发板共地 |
Mini3 的 PA00 默认用作
EXT4G_PWR。启用本示例后,PA00 会被重新配置为 PWM,不能同时用于 4G 模组电源控制。

如果您不想重新编译代码而希望直接体验本固件,可点击下载。
代码仓库https://cloud.listenai.com/CSKG532016/arcs_mini_sample/-/tree/sample/pwm_mg90s
固件下载:
Arcs-mini2 固件下载:arcs-mini-v3.0.2-m3-pwm-mg90s.lpk
Arcs-mini3 固件下载:arcs-mini3-v3.0.2-m3-pwm-mg90s.lpk
可参考文档《Arcs-Mini 固件烧录教程(ADB工具)》进行烧录。
烧录后,唤醒小聆,然后说 "舵机顺时针旋转" ,电机开始转动就成功了
b310080db46cea28537192e9587af73b.mp4
当前 sample/pwm_mg90s 分支通过同一套舵机服务兼容两个板型,对外 MCP 工具名保持为 mg90s_control:
| 板型 | 输出引脚 | PWM 通道 | Pinmux Function |
|---|---|---|---|
Arcs-Mini2(arcs_mini) |
PA06 |
PWM0 CH6 | 12 |
Arcs-Mini3(arcs_mini3) |
PA00 |
PWM0 CH0 | 12 |
Mini3 的 PA00 同时是
EXT4G_PWR。本示例把它切换为 PWM 后,不再提供 4G 电源控制功能。
舵机服务位于:
apps/arcs-mini/services/service_mg90s.capps/arcs-mini/services/service_mg90s.h服务文件在 apps/arcs-mini/services/CMakeLists.txt 中参与编译,提供初始化、启动、停止和切换运行状态接口。
Mini2 保持原来的 PA06/CH6,Mini3 使用 PA00/CH0:
#define MG90S_PWM_PAD CSK_IOMUX_PAD_A
#define MG90S_PWM_FUNC CSK_IOMUX_FUNC_ALTER12
#ifdef CONFIG_BOARD_ARCS_MINI3
#define MG90S_PWM_PIN 0U
#define MG90S_PWM_CHANNEL 0U
#define MG90S_PWM_PIN_NAME "PA00"
#else
#define MG90S_PWM_PIN 6U
#define MG90S_PWM_CHANNEL 6U
#define MG90S_PWM_PIN_NAME "PA06"
#endif
初始化时获取 pwm0,把目标引脚配置为 Function 12,再配置对应逻辑通道:
s_pwm_dev = lisa_device_get("pwm0");
IOMuxManager_PinConfigure(MG90S_PWM_PAD, MG90S_PWM_PIN, MG90S_PWM_FUNC);
lisa_pwm_config_t config = {
.polarity = LISA_PWM_POLARITY_NORMAL,
};
lisa_pwm_configure(s_pwm_dev, MG90S_PWM_CHANNEL, &config);
服务使用约 53Hz 的 PWM,并以 1.5ms 作为停止脉宽:
speed 会换算为目标脉宽,再转换成 LISA PWM 驱动需要的整数占空比。由于整数占空比会产生量化,代码会避免非零速度最终仍等于停止占空比。
apps/arcs-mini/button/app_button.c 在电源键四击事件中调用 service_mg90s_toggle():第一次四击开始旋转,再次四击停止。这个入口可用于在接入云端 MCP 前检查供电、共地和 PWM 输出。
MCP 工具位于 apps/arcs-mini/mcp-tools/mcp_tool_mg90s.c,支持:
direction:cw 或 ccw。speed:low、mid、high、stop 或 0~100。MCP_TOOL_DEFINE(mg90s_control, mg90s_control_list, mg90s_control_call);
工具描述会根据板型显示 Mini2 的 PA06/CH6 或 Mini3 的 PA00/CH0,但注册名保持不变。
.\build.ps1 -S .\apps\arcs-mini -B build-mg90s-mini -DBOARD=arcs_mini
.\build.ps1 -S .\apps\arcs-mini -B build-mg90s-mini3 -DBOARD=arcs_mini3
两个板型均应生成 arcs-mini.bin、LPK、OTA 和 combined HEX。实板接线时舵机建议使用独立 5V 电源,并务必与开发板共地。