【行空板K10】Microbit wiki驱动舵机

2025-10-122021
AI 快速预览详细 收起
本文介绍了如何使用行空板K10和Microbit wiki电机板驱动舵机。硬件包括行空板K10和数码舵机,支持3-7.2V电压,360°转动角度。系统架构采用K10微控制器和NXP PCA9685PW芯片,通过I²C总线实现16路PWM信号输出。配置了两个独立按键作为触发输入,三色LED作为状态指示。详细说明了I²C初始化、PCA9685配置、按键中断处理和舵机控制逻辑。示例代码展示了如何通过按键控制舵机的角度,并点亮LED。视频演示了实际操作效果。
1、硬件K10
具体功能这里略过,详细请看连接。
https://www.dfrobot.com.cn/goods-4035.html

舵机
工作扭矩:1.6KG/Cm转速:0.12-0.13秒/60°使用温度:-30°C~+60°C
死区设定:5微秒
转动角度:360°左右各180
使用电压:3-7.2V
舵机类型:数码舵机


Microbit wiki电机板

电源电压:3.5~5.5V DC
数字输出电压:0V / 3.3V
模拟输出电压:0~3.3V DC
标准重力接口
微:位接口:9 (P0 P1 P2 P8 P12 P13 P14 P15 P16)
伺服接口 x 8
电机接口:直流电机 x 4 / 步进电机 x 2
尺寸:63x58mm / 2.48x2.28in



2、实物
【行空板K10】Microbit wiki驱动舵机图2


【行空板K10】Microbit wiki驱动舵机图1

【行空板K10】Microbit wiki驱动舵机图3
3、功能说明
系统架构设计
采用K10微控制器作为核心控制单元,通过I²C总线与NXP PCA9685PW芯片通信,实现16路舵机PWM信号输出。系统配置两个独立按键(KEY1/KEY2)作为触发输入,三色LED(红/绿/蓝)作为状态指示。

硬件连接方案

PCA9685模块:SCL接K10的I²C时钟引脚(如PTE0),SDA接数据引脚(如PTE1),VCC接3.3V电源
按键电路:KEY1接PTA12,KEY2接PTA13,配置为下降沿触发中断
LED指示:红灯接PTB0,绿灯接PTB1,蓝灯接PTB2,共阴极接地
Mind图形化实现步骤

I²C初始化:在"通信"模块中配置I²C0,设置时钟频率400kHz
PCA9685配置:
使用"I²C写入"模块发送0x00(MODE1)寄存器配置
设置PRESCALE值为0x7D(对应50Hz PWM频率)
启用ALLCALL模式(0x20写入MODE1)
按键中断处理:
创建两个中断服务程序(ISR)
KEY1按下时:调用"I²C写入"发送舵机1控制指令(LED1_ON_L=0x06,LED1_ON_H=0x00,LED1_OFF_L=0x20,LED1_OFF_H=0x00)
KEY2按下时:发送舵机2控制指令,同时点亮三色LED(PTB0/1/2置高)
舵机控制逻辑:
通过修改OFF寄存器值实现0°-180°角度控制
示例:90°中位对应脉冲宽度1500μs(寄存器值0x78)
状态指示设计

按键未触发时:LED熄灭
KEY1按下:红灯常亮,舵机1旋转至90°
KEY2按下:绿灯+蓝灯交替闪烁(500ms周期),舵机2执行往复摆动



4、代码
【行空板K10】Microbit wiki驱动舵机图4

  1. /*!
  2. * MindPlus
  3. * esp32s3bit
  4. *
  5. */
  6. #include "unihiker_k10.h"
  7. #include <Microbit_Motor.h>
  8. // 函数声明
  9. void onButtonBUnPressed();
  10. void onButtonAUnPressed();
  11. void onButtonBPressed();
  12. // 创建对象
  13. uint8_t        screen_dir=2;
  14. UNIHIKER_K10   k10;
  15. AHT20          aht20;
  16. Microbit_Motor motorbit;
  17. // 主程序开始
  18. void setup() {
  19.         k10.begin();
  20.         k10.initScreen(screen_dir);
  21.         k10.creatCanvas();
  22.         k10.buttonB->setUnPressedCallback(onButtonBUnPressed);
  23.         k10.buttonA->setUnPressedCallback(onButtonAUnPressed);
  24.         k10.buttonB->setPressedCallback(onButtonBPressed);
  25.         k10.setScreenBackground(0xFFFFFF);
  26.         k10.canvas->canvasText("SG90", 7, 0x0000FF);
  27.         k10.canvas->canvasText("全速旋转", 2, 0x33FFFF);
  28.         k10.canvas->canvasText(aht20.getData(AHT20::eAHT20TempC), 1, 0xFF0000);
  29.         k10.canvas->updateCanvas();
  30. }
  31. void loop() {
  32. }
  33. // 事件回调函数
  34. void onButtonBUnPressed() {
  35.         motorbit.servo(S1, 90);
  36.         k10.rgb->write(0, 0x0000FF);
  37. }
  38. void onButtonAUnPressed() {
  39.         motorbit.servo(S1, 180);
  40.         k10.rgb->write(0, 0x00FF00);
  41. }
  42. void onButtonBPressed() {
  43.         motorbit.servo(S1, 0);
  44.         k10.rgb->write(0, 0xFF0000);
  45. }
复制代码
5、视频
【行空板K10】Microbit wiki驱动舵机图5



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -