# Micropython pyboard-controller-robot PYB差速主控底盘 **Repository Path**: wangms168071/pyb-controller_robot ## Basic Information - **Project Name**: Micropython pyboard-controller-robot PYB差速主控底盘 - **Description**: 基于PYB作为单片机的两轮差速小车或机器人底盘 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: pyb-controller-v3.4 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2021-09-16 - **Last Updated**: 2021-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PYB差速主控底盘开源工程 ## 项目介绍 **这是一个基于PYB作为单片机的两轮差速小车或机器人底盘。** 本系统可以很好地适用于两轮差速控制系统的控制需求,本系统已经集成了里程计、IMU等传感器,同时开发了和ROS上位机节点的串口通信功能,适用于作为ROS机器人的下位机系统。 维护人: - 高鸿志 - 李佳洛 - 郭浩 ## 版本记录 **pyb-controller-v3.4** 2021/4/25 - 大幅优化代码,增加参数注释,方便分辨可调和系统默认参数。 - 集成mpu9250模块到driver_flag中执行,只在单片机中读取9轴imu数值,但默认不发送到上位机。 - 将默认编码器设置为光电编码器,如需更换,需要修改main.py中的PID参数以及encoder.py中的机器人和编码器参数即可。 **pyb-controller-v3.3** 2021/4/15 - 增加Micropython和匿名工作站的通信协议,实现和匿名工作站的通信任务,可以实现电机参数的实时绘图和PID调参 - 优化代码,提高了代码的执行效率,删除了不必要的外设OLED的使用(可自行增加) **pyb-controller-v3.2** 2021/3/24 - 优化ROS上下位机通信控制 **pyb-controller-v3.1** 2021/3/1 - 增加USB串口,将USB口设置为USB_VCP模式,使得单片机可以直接通过USB口和上位机实现串口收发功能 **pyb-controller-v3.0** 2021/2/20 - 增加电机PID闭环后线性校正代码,因为未较好的调整参数,故使用该方法 ## 项目架构 ### 代码结构 - main.py - motor.py - encoder.py - pid.py - oled.py - ps2.py - serial.py - imu.py - mpu9250.py ### 硬件器材 1. PYB(STM32F405)* 1 2. 带编码器电机的机器人底盘(编码器电机 * 2 + L298N * 1) * 1 3. PS2手柄 * 1 4. 两轮编码器电机驱动模块 * 1 5. 整体电源模块 * 1 6. mpu9250(9轴)传感器模块 * 1 ### 引脚图 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0118/124735_f7906c8e_6524532.jpeg "O1CN01kU8SiB1fxThk86jBc_!!87224073 [原始大小].jpg") | 外接引脚 | PYB左侧引脚 | | | | | PYB右侧引脚 | 外接引脚 | |---|---|---|---|---|---|---|---| | encoderMA_A | Y1(TIM8 CH1) | | | | | | | | encoderMA_B | Y2(TIM8 CH2) | | | | | | | | PWMA | Y3(TIM4 CH3) | | | | | | | | PWMB | Y4(TIM4 CH4) | | | | | | | | AIN1 | Y5 | | | | | Y12 | \ | | AIN2 | Y6 | | | | | Y11 | \ | | \ | Y7 | | | | | (IIC2 SDA)Y10 | SDA(OLED) | | \ | Y8 | | | | | (IIC2 SCL)Y19 | SCL(OLED) | | SCL(mpu9250) | X9(IIC1 SCL) | | | | | X8 | \ | | SDL(mpu9250) | X10(IIC1 SDA) | | | | | X7 | \ | | BIN1 | X11 | | | | | X6 | \ | | BIN2 | X12 | | | | | X5 | \ | | | | | | | | (UART2 RX)X4 | TX(USB-TTL) | | | | | | | | (UART2 TX)X3 | RX(USB-TTL) | | | | | | | | X2 | encoderMB_B(TIM5 CH2) | | | | | | | | X1 | encoderMB_A(TIM5 CH1) | |---|---|---|---|---|---|---|---| | | X18 | X19 | X20 | X21 | X22 | | | | | DAT(PS2) | CMD(PS2) | CS(PS2) | CLK(PS2) | \ | | | ### 附录 1. STM32拥有编码器功能的定时有:1、2、3、4、5、8,这几个定时器的的CH1、CH2可用于编码器AB相测速,CH1N等带N的通道不能用于编码器测速。定时器6、7为基本定期,仅用作定时和计数功能,无如PWM等其他特殊功能。 2. 板载加速度计为MMA7660,该器件是NXP的3-Axis Orientation/Motion Detection Sensor(三轴加速度传感器,不包含三轴陀螺仪,如需要陀螺仪,可使用mpu6050六轴传感器模块,即三轴加速度+三轴陀螺仪),该加速度计的测量范围±1.5g,采用I2C通信接口,当使用板载加速度计时就不能再使用X9和X10引脚,否则会造成加速度计无法正常工作,反之亦然。 3. 本单片机引脚较少,不适合用作四轮的底盘控制,需要购买增加更多普通IO口的PLUS版。 4. 上下位机通信协议采用元组作为通信的基本格式,发送和接收端只需进行编码和解码操作即可直接使用,方便快捷。