描述
<p style="line-height: 1.8;">注:* 为必填项</p>
<p style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在报名阶段填写 ↓</span></strong></p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">* 1、项目功能介绍</h3>
<hr>
<p>该板球控制系统是将一个小球放置在一个平台上,系统通过监测小球在平台上的位置获取反馈信息,并利用舵机调节平台的倾斜程度以控制小球的运动轨迹。通过Openmv摄像头采集的图像,分析出小球的运动位置以及状态,并将这些信息通过串口通信发送给STM32主控。在该系统中,用于维持系统平衡的PID自动控制算法是重要的,是必不可少的。 <img src="//image.lceda.cn/pullimage/damrXgt3K76UOQkVaOh575eNmtxbMEqUAQsoGJap.jpeg" alt="" width="336" height="420"></p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">*2、项目属性</h3>
<hr>
<p style="line-height: 1.8;">项目公开,未参加其他比赛,未在学校进行答辩。</p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height: 1.8;">GPL3.0</p>
<p style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在竞赛阶段填写 ↓</span></strong></p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">*4、硬件部分</h3>
<hr>
<p style="line-height: 1.8;"><strong>4.1 系统组成及工作流程</strong></p>
<p style="line-height: 1.8;"><strong><img src="//image.lceda.cn/pullimage/AcMVWyY4hZeBxdK02XX5UqjvHx8bTzn8D4o2tIAn.png" alt="" width="596" height="269"></strong>通过观察上图可以看出该板球控制系统的具体工作流程以及板球控制的基本原理。</p>
<p style="line-height: 1.8;">其中:</p>
<ul>
<li style="line-height: 1.8;">主控部分采用STM32F103C8T6最小系统板,成本低廉,广泛的资源支持,易于开发和调试,Cortex-M3内核足以应对小项目的性能需求。<strong><br></strong></li>
<li style="line-height: 1.8;">视觉部分采用星瞳Openmv4Plus摄像头,丰富的库和示例,高性能的图像处理,是进行简单视觉相关项目的理想选择。</li>
<li style="line-height: 1.8;">运动控制部分采用数字舵机,它相较于普通舵机拥有更高精度,能够更准确地控制角度和位置。</li>
<li>显示部分使用了0.96寸OLED屏幕。</li>
</ul>
<p><br><strong>4.2 机械结构</strong></p>
<p>本文采用白色乒乓球当作被控球体,500*500*3mm的黑色亚克力板当作支撑平台,黑白反差色利于视觉识别。</p>
<p><img src="//image.lceda.cn/pullimage/kUpYlb6fra5K1U9PfKdXX3mhJvYePBsc74ibLzlg.jpeg" alt="" width="200" height="267"></p>
<p> </p>
<p>该系统大致机械结构为:</p>
<p>在亚克力板平台的下方中心固定一个万向节(联轴器),通过丝杆与与正下方固定底座连接。</p>
<p>在亚克力板平台的下方x、y轴方向中心位置固定两个万向节(联轴器),通过丝杆与连杆头连接,连杆头与25T金属舵机摆臂连接,25T金属舵机摆臂与舵机连接。</p>
<p>舵机位置应处于x、y轴方向万向节的正下方附近,并且固定在下平面上。</p>
<p><img src="//image.lceda.cn/pullimage/0nkm1s3GHuM1qDtz96JM2eNqVMaxBF5IPChhIVD3.jpeg" alt="" width="201" height="268"></p>
<p> </p>
<p>板球控制系统的机械结构都大差不差,具体选材和购买可以参考这个文章:</p>
<p><a href="https://blog.csdn.net/automan05/article/details/84501990" target="_blank">https://blog.csdn.net/automan05/article/details/84501990</a></p>
<p> </p>
<p>我参考了他的部分选材,根据我自己在搭建过程中遇到的问题敲了一篇小文,并且附上了我自己的购买链接,可以让大家无脑复刻,摆脱机械结构选材的困扰。</p>
<p><img src="//image.lceda.cn/pullimage/PGWhESBxnlyesFcKzvB0rFqNo3YXy1RC9yZJnMCd.png" alt="" width="414" height="584"></p>
<p> </p>
<p>内容较多就不在这里占用空间了,大家去<strong><span style="color: #e03e2d;">附件</span></strong>里下载“机械结构部件选材.word”。</p>
<p> </p>
<p> </p>
<p><strong>4.3 原理图</strong></p>
<p> </p>
<p><img src="//image.lceda.cn/pullimage/aMgL9l7VRQ1KOMADHpJ2G3j3fwLHQt0Cd0164b6E.png" alt="" width="599" height="405"></p>
<p style="line-height: 1.8;">用各种模块堆出来的板子,没专门学过画板,没有电路设计,仅供参考,勿喷。</p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">整个板子有12v,7v,5v,3.3v引出,12v是因为手里有12v电源,7v给舵机供电,5v给openmv供电。记得共地!!!</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/T1urgVpx5XEOOg7JhEPhcLlN0D2yDTQL97Y9HpQx.png" alt="" width="316" height="230"></p>
<p style="line-height: 1.8;">7v和5v电压都是12v通过mini360降压模块调节得到的电压,板子丝印上有标明,所以舵机需要多大电压就自己调多大,有的舵机可能承受不了7v。</p>
<p style="line-height: 1.8;">3.3v是通过AMS1117稳压芯片输出得到的。</p>
<p style="line-height: 1.8;">AMS1117的输入端和输出端都接了一个0.1uF电容滤高频,22uF电容滤低频(只要10uf以上就行,理论上越大越好,可以接100uF)</p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">具体点击这个查看:<img src="//image.lceda.cn/pullimage/wJUZ4iPr18DRg9OJOV1MYzRR6JOBgPMkX7cGU7Bn.png" alt="" width="203" height="57"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">*5、软件部分</h3>
<hr>
<p style="line-height: 1.8;"><strong>5.1 主体程序流程</strong></p>
<p style="line-height: 1.8;"><strong><img src="//image.lceda.cn/pullimage/Yj8j9cPkELHEhVhx1GnPQb3rox06eKAeXw3AYbv1.png" alt="" width="385" height="502"></strong></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><strong>5.2 STM32端</strong></p>
<p style="line-height: 1.8;"><strong> 5.2.1 主体文件<img src="//image.lceda.cn/pullimage/By9COpmpHaYAn5vtaYVTYfRgafN3h0wT7HJ9ec9h.png" alt="" width="200" height="436"></strong></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><strong> 5.2.2 主要资源配置</strong></p>
<p style="line-height: 1.8;"> 这里就大概说一下<strong>驱动舵机(1)</strong>和<strong>串口通信(2)</strong>所需的资源配置,其他详细内容去工程里查看。</p>
<p style="line-height: 1.8;"> (1)</p>
<p style="line-height: 1.8;">开启时钟<img src="//image.lceda.cn/pullimage/1elbIIU4rnHvqEyrl5ybIgei9F8dTSDOcQxyfJ8b.png" alt="" width="431" height="18"></p>
<p style="line-height: 1.8;">GPIO配置</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/0P7x4DukVBq0Cnhgv4O231ATTr9pBKbyi99MRU8P.png" alt="" width="300" height="44"></p>
<p style="line-height: 1.8;">定时器配置</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/qISyhcFu7DcVx5MlRW9HhhnjwW5kJFMdTq88FJ7U.png" alt="" width="316" height="58">输出配置</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/7JoO7Qxmp5cR6ev7EN39KmkkGhXv9cDAhytCVG99.png" alt="" width="353" height="73">高级定时器不要忘了主输出使能</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/P680JD07NcYBfMBNm8atjPNf14T6fzMrJ0nhAZl2.png" alt="" width="332" height="21"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">(2)</p>
<p style="line-height: 1.8;">开启时钟<img src="//image.lceda.cn/pullimage/Q9PTR5ubzRf8r4QY4ChE6KG8WqKMra1gec4MTO2k.png" alt="" width="436" height="16"></p>
<p style="line-height: 1.8;">GPIO配置(一收一发)<img src="//image.lceda.cn/pullimage/qBTKmIMVEM1VhmRbycxSAPY3lWF1b9tA9vZZbdPt.png" alt="" width="300" height="86"></p>
<p style="line-height: 1.8;">串口配置<img src="//image.lceda.cn/pullimage/TjWvYNrrkhWfdU9j7Zc3BBPTvjl5ZUbBRRYkum7k.png" alt="" width="550" height="77"></p>
<p style="line-height: 1.8;">中断配置<img src="//image.lceda.cn/pullimage/zEVKrxZAcIui4nAgJ1pyH019usjbVS7K2eaReSWv.png" alt="" width="356" height="70"></p>
<p style="line-height: 1.8;">最后别忘了使能串口<img src="//image.lceda.cn/pullimage/iwHajILrMBzXJnZUQ26728EBgMCAPgLAC1SOP5vd.png" alt="" width="300" height="21"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">基本配置完成后,在中断服务函数里接收来自Openmv发送的数据(小球的xy轴坐标),</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/f6BBdWN5kzQCIVAepZqGY1AAg1wLEOJpo1v1gRj6.png" alt="" width="600" height="416"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><strong> 5.2.3 PID相关思路</strong></p>
<p style="line-height: 1.8;">只用了位置环单环控制,控制效果还是不错的。有能力的可以试试串级pid:速度环内环,位置环外环,位置环的输出作为速度环的输入(目标值),会复杂一点。<img src="//image.lceda.cn/pullimage/AcILlUl93onA2tO7RIZdRe3M283wYAGwI6VtugD1.png" alt="" width="400" height="116"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">位置环PID参数调节过程中要注意,kp是让小球能跑到指定位置,kd是让球不掉下去。kd是阻碍系统的快速变化,球掉下去就是这样一个快速变化的过程。</p>
<p style="line-height: 1.8;">所以主要是调kd让球不掉下去,再加一点kp让球可控。稳态误差较大的话可以加入ki试试。</p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><strong>5.3 Opemv端</strong></p>
<p style="line-height: 1.8;">openmv摄像头在该系统中的主要作用是实时监测小球的位置数据并通过串口发送给STM32.</p>
<p style="line-height: 1.8;">串口双端通信要统一串口配置,约定数据传输格式(也就是数据包),避免出现数据的错误接收。</p>
<p style="line-height: 1.8;">以下为openmv端串口数据发送的代码:</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/Bw7It2D9fvjRpswWaDlkbeo352mYLTsicW1aEdQ7.png" alt="" width="600" height="389"></p>
<p style="line-height: 1.8;">如果找到了小球就进行串口数据发送,否则亮红灯提醒。</p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;">以下为openmv的基础配置</p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/nkXZhwNf5oNtmGzRasxASuSGwQt8USL09i2oxQz8.png" alt="" width="598" height="556"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">*6、BOM清单</h3>
<hr>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/UqXAzMSJmoTVulzi4afjKHSs6aQjbzzBsnwhox2i.png" alt="" width="1100" height="299"></p>
<p style="line-height: 1.8;"> </p>
<h3 style="line-height: 1.8;">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/VMYqtmbOHx3N0TqEm2FrSN47EvTC4MAaUyKRBeLV.png" alt="" width="428" height="344"></p>
<p style="line-height: 1.8;"> </p>
<p style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/GNaqqvONSSfcH70KkAgywkLNBOEP0tKiyPjQOTev.png" alt="" width="427" height="344"></p>
<h3 style="line-height: 1.8;"> </h3>
评论(7)