当前位置: 首页 > news >正文

stm32写字机器人资料 主控stm32f103c8t6 包含程序,原理图,pcb

stm32写字机器人资料 主控stm32f103c8t6 包含程序,原理图,pcb,机械结构

最近折腾了个基于STM32的写字机器人,从硬件画板到代码调试踩了不少坑,这里把核心模块拆开说说。主控用的是性价比极高的STM32F103C8T6,这货72MHz主频带PWM外设,驱动两个42步进电机绰绰有余。

先说机械结构,核心是XY轴十字滑台。X轴用光轴+直线轴承,Y轴直接上了丝杆传动。这里有个骚操作——用旧光驱里拆的步进电机,省了五十块预算。滑台框架用3mm亚克力板激光切割,注意导轨安装孔位要留0.5mm余量,否则装配时会卡到怀疑人生。

电路部分重点看电机驱动。直接怼ULN2003驱动板太浪费IO口,改用A4988步进电机驱动模块。接线时注意把STM32的TIM1CH1和TIM1CH2接到驱动模块的STEP和DIR引脚,这样可以直接用硬件PWM生成脉冲。原理图里有个关键点:在VMOT电源端并了个470uF电容,实测能有效消除电机启停时的电压抖动。

stm32写字机器人资料 主控stm32f103c8t6 包含程序,原理图,pcb,机械结构

代码方面,核心是运动轨迹插补算法。这里用了个简化版的Bresenham直线算法:

void Line(int x1, int y1, int x2, int y2) { int dx = abs(x2 - x1); int dy = abs(y2 - y1); int sx = x1 < x2 ? 1 : -1; int sy = y1 < y2 ? 1 : -1; int err = dx - dy; while(1) { StepperMoveTo(x1, y1); // 驱动电机到当前坐标 if(x1 == x2 && y1 == y2) break; int e2 = 2 * err; if(e2 > -dy) { err -= dy; x1 += sx; } if(e2 < dx) { err += dx; y1 += sy; } HAL_Delay(2); // 控制写字速度 } }

这段代码的精髓在于用整数运算替代浮点,避免STM32跑浮点运算卡成狗。实测画A4纸大小的直线时,误差能控制在0.3mm以内。注意HAL_Delay的值要根据步进电机步距角调整,我用的是0.9度电机,延时2ms刚好能让笔迹连贯。

调试时遇到个坑爹问题——画圆时出现锯齿。后来发现是定时器配置问题,TIM1的ARR寄存器没设置自动重载。改完配置后加上这句:

htim1.Instance->CR1 |= TIM_CR1_ARPE; // 开启自动重载预装载

现在画半径5cm的圆,肉眼基本看不出毛刺了。PCB布局要特别注意电机驱动模块的散热,我在底层铺了整块铜皮接GND,实测连续工作半小时温升不超过15℃。

最后说个实用技巧:用Inkscape把矢量图转成G代码,再通过串口发送给STM32。代码里加了个环形缓冲区,防止数据丢失:

#define BUF_SIZE 256 char cmd_buffer[BUF_SIZE]; uint8_t buf_head = 0, buf_tail = 0; void USART1_IRQHandler(void) { if(USART1->SR & USART_SR_RXNE) { cmd_buffer[buf_head++] = USART1->DR; if(buf_head >= BUF_SIZE) buf_head = 0; } }

这套方案实测能稳定处理115200bps的传输速率。完整工程已经扔到GitHub,包含SolidWorks结构文件和Altium设计文件,需要自取。下次准备试试加上Z轴压力控制,让机器人能写毛笔字。

http://www.cnnetsun.cn/news/1402101.html

相关文章:

  • 部署Qwen3-VL需要多少内存?CPU版资源占用实测教程
  • 格雷戈里《法兰克人史》
  • Lite-Avatar数字人作品集:100种风格形象展示
  • Nanbeige 4.1-3B部署教程:Windows/Linux/macOS三平台本地运行完整步骤
  • Qwen3-32B开源模型部署教程:基于vLLM+FlashAttention-2的高性能调优方案
  • OFA VQA模型部署教程:Windows WSL2环境下兼容性验证
  • 从‘能拍到’到‘拍得好’:Basler相机Python图像采集的5个实战调优技巧(避坑版)
  • Harmonyos应用实例158:分段函数计费器
  • 绝了,我在linux上执行一条命令,它直接给我呈现动画版的天气预报
  • Vue3 数据看板实战:基于vue3-seamless-scroll实现表头固定与多区域联动滚动
  • 实战演练:中国蚁剑的渗透测试与WAF绕过策略
  • Fish-Speech 1.5实战体验:无需配置音素,直接输入文字生成语音
  • vLLM-v0.11.0镜像部署指南:开启预热优化,实现毫秒级首次响应
  • 告别手动对齐!清音刻墨Qwen3智能字幕系统实测,精准度惊人
  • 用PyTorch-2.x-Universal-Dev-v1.0做数据分析:Pandas+Numpy+Matplotlib实战
  • ChatTTS WebUI 异常处理实战:解决 ‘exception on /tts [post]‘ 的 AI 辅助方案
  • 【MySQL】表的基本操作
  • Pixel Dimension Fissioner部署教程:GPU算力优化适配+免配置镜像实操
  • Pixel Dimension Fissioner应用案例:为独立游戏开发者生成100+任务描述
  • 认知红利:为什么“聪明的放弃”是亚马逊卖家最高阶的战略
  • 交流过零分断原理与电弧抑制电路设计
  • 无人机、车载AI等移动设备姿态变化导致的散热失效问题
  • 收藏必备!小白程序员轻松入门大模型:详解RAG技术及其应用
  • 模型部署需要考虑的性能指标和模型部署的步骤
  • 代码编辑器插件 React-Codemirror2
  • AI 编程助手竞品周报
  • 基于YOLO26算法+DeepSeek_qwen大模型的智慧铁路要素缺陷巡检分析系统
  • 垃圾网站穷疯了,什么都要钱
  • 开箱即用!通义千问3-Embedding-4B镜像,小白也能快速搭建知识库
  • Java 流程控制与循环结构笔记