这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【行空板K10】Microbitwiki驱动舵机

共1条 1/1 1 跳转至

【行空板K10】Microbitwiki驱动舵机

高工
2025-10-12 23:22:05     打赏

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.28in2、实物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、代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include "unihiker_k10.h"
#include <Microbit_Motor.h>
// 函数声明
void onButtonBUnPressed();
void onButtonAUnPressed();
void onButtonBPressed();
// 创建对象
uint8_t screen_dir=2;
UNIHIKER_K10 k10;
AHT20 aht20;
Microbit_Motor motorbit;


// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
k10.buttonB->setUnPressedCallback(onButtonBUnPressed);
k10.buttonA->setUnPressedCallback(onButtonAUnPressed);
k10.buttonB->setPressedCallback(onButtonBPressed);
k10.setScreenBackground(0xFFFFFF);
k10.canvas->canvasText("SG90", 7, 0x0000FF);
k10.canvas->canvasText("全速旋转", 2, 0x33FFFF);
k10.canvas->canvasText(aht20.getData(AHT20::eAHT20TempC), 1, 0xFF0000);
k10.canvas->updateCanvas();
}
void loop() {

}

// 事件回调函数
void onButtonBUnPressed() {
motorbit.servo(S1, 90);
k10.rgb->write(0, 0x0000FF);
}
void onButtonAUnPressed() {
motorbit.servo(S1, 180);
k10.rgb->write(0, 0x00FF00);
}
void onButtonBPressed() {
motorbit.servo(S1, 0);
k10.rgb->write(0, 0xFF0000);
}
5、视频



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]