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.coloradmin.cn/o/2433674.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!