diff --git a/5.Docs/Images/robot9.png b/5.Docs/Images/robot9.png new file mode 100644 index 0000000..6299a68 Binary files /dev/null and b/5.Docs/Images/robot9.png differ diff --git a/README.md b/README.md index 3fba9ef..8e9afd4 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ Software中提供了视频里演示的上位机软件ElectronStudio的Unity工 ![](/5.Docs/Images/robot5.jpg) -* 你也可以用别的USB摄像头,里面塞得下就行,当然大家可以根据需要自己替换别的USB摄像头,只要塞得下就行,摄像头是直接拆了接线焊在SensorBoard上的 。 +* 当然大家可以根据需要自己替换别的USB摄像头(黑白的、高帧率的),只要塞得下就行,摄像头是直接拆了接线焊在SensorBoard上的 。 > 值得注意的是,**我用的USB-HUB芯片的1拖4的**,目前使用了三个口,还剩一个其实可以再集成一个USB麦克风,这样ElectronBot也能当作电脑的麦克风使用了。 @@ -148,7 +148,27 @@ Software中提供了视频里演示的上位机软件ElectronStudio的Unity工 > STM32F4的源码如果通过`.ioc`重新生成工程的话,记得要把USB相关的几个文件预先备份,生成完代码后再替换回我原来的文件,因为CubeMX会覆盖生成把相关代码修改掉(我实际是使用Git的文件版本回退操作的 )。 -#### 3.2 SDK使用说明 +#### 3.2 舵机I2C协议 + +魔改后的舵机通过I2C接口和控制板进行通信,STM32F4的控制板为主机,舵机为从机。通信的过程始终是主机发起的,主机首先下发位置、参数等指令,然后即时取回相关数据完成一个通信来回。 + +每个舵机作为从机接收两个地址的指令:**自己的ID号**,以及**0号广播**。广播用于在没有给舵机设置地址的时候作为通配地址使用(比如你刚烧写完舵机固件,此时舵机的Flash是没有储存自己的ID的,只能通过0号地址通信)。 + +**值得注意的是:舵机和主机的上电需要有先后顺序,一定要先让从机初始化完成开始监听数据,再让主机发送指令!** + +> 如果主机发送指令的时候从机不响应,或者多个舵机地址相同同时响应,都可能引起通信错误,因此需要保证上述的顺序。 +> +> 由于硬件上主机和舵机上电都是同时的,所以在主机的固件代码中,有一个延时2S的代码(其实可以不用那么久),就是等待舵机都上电初始化完成再开始通信。 +> +> 调试的时候,一个舵机一个舵机调试,注释掉其他未连接的舵机的通信代码,不然也会造成轮询等待超时。 + +关于舵机的指令含义,感谢 **[leazer](https://github.com/leazer)** 同学在Issues整理的表格: + +![](https://pengzhihui-markdown.oss-cn-shanghai.aliyuncs.com/img/20220322010150.png) + +> 指令后续可能会更新。 + +#### 3.3 SDK使用说明 SDK架构设计如图: