站内搜索
发作品签到
专业版

Ai8051小车-1.0

工程标签

581
0
0
4

简介

基于Ai8051的小车

简介:基于Ai8051的小车
基于Ai8051U开源创意电子设计大赛
复刻成本:100

开源协议

GPL 3.0

创建时间:2024-12-01 23:30:24更新时间:2024-12-11 18:29:04

描述

一、前言:

感谢立创和STC活动

感谢嘉立创的50元打样券,50元器件券!

 

在不是训练营且没有照搬现成电路的情况下,本小白果然露馅了,想要利用手头有的有关小车的各种部件,弄一个Ai8051U小车,结果因为课内课程与科研任务忙,再加上11月末才开始,现在小车没有达到所有功能,但是至少可以跑了,我可以设置左右轮的PWM进行简单控制了。后续我将进一步完善它

 

 

二、功能:

本小车含有Ai8051U最小系统(没有外部晶振),4个按钮控制(复位,下载,选择,确认),2个LED(通电,调试),显示模块(OLED),姿态传感器(维特智能的JY61P),通信模块(LORA),电机控制板(tb6612,绿色大板款)

 

目前小车使用串口下载,可以控制小车大致的转速,正反转,预期未来加上编码器读取速度,PID调节,再加上JY61P预期实现转向调节,加上LORA预期实现无线控制

 

三、参考资料:

参考资料如图,这些都是从Ai8051论坛上找的:

 

四、硬件原理图

 

 

 

  1、核心部分电路

 

 

 

  • 如上图,电路基本参考Ai8051U的手册,设计的时候是有16Pin的USB进行供电和程序下载,此外也能通过串口进行下载;需要注意USB必须是16Pin,Pin数少了的则只能供电,其实这里串口与0和P3.1的连接最好也加上22R电阻,在下一版的原理图上我会加上


(2)如果使用USB下载,我看根据Ai80851U手册的显示的几种方式,添加了电源开关,复位按键(Ai系列内部有上拉电阻,不需外加),下载按键(KEY_DOWM,这是其中一种下载方式)

(3)手册上电压进入芯片前先经过1个大于10uF的电解电容,再经过一个100nF的普通电容,这里因为我手头略大于10uF的电解电容只剩下47uF的所以我如此设置,此外根据手册,如果使用USB,需要在UCAP脚上加一个100nF电容

上图是本次要用到的PWM和IIC,串口,右侧是从手册上截图的,Ai8051有两组PWM,第一组有高级功能,我暂时用不到高级功能,所以用第二组PWM(PWM5678),最后选择的是PWM7和PWM8的通道0(即P0.5和P0.7)

2、按键电路&LED显示电路

  • 这部分很常规
  • 值得说明的是因为预期要加上OLED显示的简易菜单,所以需要两个按键,一个进行模式选择,一个进行确认,暂时就不增加返回键了(直接复位返回)
  • LED有2个,一个是电源指示灯,通电则亮,还有一个是单片机控制的,可以用作调试,或者声光报警的时候用

3、外接模块(IIC,串口)

  • 这里的OLED,JY61P和LORA都是通过54mm排母来外接的模块
  • 其中OLED为96寸OLED,使用IIC进行数据传输;JY61P既可以使用串口也可以使用IIC,这里为了简便,使用串口,所以只留了串口的电路;LORA使用串口通信

4、电机驱动电路

  • 电机驱动板用的是tb6612(不是小红板,而是大绿板),可以控制两个电机,我是通过tb6612上的排针跟本次设置的PCB上对应的排母相连来控制,原理图和PCB的封装都算异形封装,都是自己测量并绘制的
  • tb6612的原理图符号,左侧的3V3和5V可以看作是从tb6612向外输出的电压,因为tb6612是靠12V的电源供电,它自己具备降压电路,这里的3V3和5V都来自于12V的降压,但是这里考虑到之前学长的教导“强弱电分离”所以没从这里取电,但是为了供地,还是增加了一个0Ω电阻的位置,以后若用3V3和5V的话应该会用到
  • tb6612的原理图符号,右侧分为两组,下面的AIN1,AIN2,PWMA对应能控制的两个电机的其中一个,其中AIN1 = 1,AIN2 = 0和AIN1 = 0,AIN2 = 1两种情况,电机转向相反(正转和反转是相对的,取决于实际应用场景),二者皆为0或1的情况不考虑;PWMA则是PWM控制引脚;BIN1,BIN2,PWMB是控制另一个电机的,功能同理,不再赘述;这里的STBY相当于使能引脚,高电平有效,若不使能即使给tb6612供电其也不工作
  • tb6612的原理图符号,右侧分为两组,上面的ADC和5V一直没用过,这里注意剩下4个引脚E1A,E1B,E2A,E2B容易搞错,这里的AB不再对应两个电机,而是1和2对应两个电机,也就是说E1A,E1B与AIN1,AIN2,PWMA控制同一个电机,E2A,E2B与BIN1,BIN2,PWMB控制另一个电机;E1A,E1B,E2A,E2B中的A和B是A相B相的意思,用于正交编码的读取必须AB相搭配使用,电机如果有编码器,可以通过E1A,E1B,E2A,E2B来读取电机速度,进而通过PID等方式进行闭环控制
  • 这次小车的电机是有编码器的,但是原理图和PCB没有启用E1A,E1B,E2A,E2B主要因为时间有限,还没搞懂Ai8051U具体哪个引脚可以直接用编码器模式读取,所以这里没设置,未来可以通过飞线的方式尝试,并体现在下一个设计版本的电路上

 

、硬件PCB部分

 

  • 先展示一张隐藏了铺铜的正面的PCB以来看走线情况
  • 因为时间紧急,本次画PCB的时候没有像以往那样尽可能压缩PCB大小且尝试尽可能正面走线,所以这次PCB直接是10*10的尺寸
  • 可以看出整体布局还是偏中心位置放芯片,芯片和核心部分的电路偏下部,各种模块偏上部,4个按钮在下部依次排开,USB下载相关放到右边,串口下载相关放到左边;tb6612之所以在图中是偏左放,是因为实际安装时只有这样才能露出它的开关键
  • 可以看出对于OLED,JY61P和LORA,我都在VCC端口放了100nF电容,本小白不知道这样有无必要,有无作用,但为了保险还是放了

从上图看出仍然避免了底层有过多走线

上图是最终PCB正面的情况(加了铺铜),可以看出有添加为了避免GND断联的过孔,以及一些去掉锐角GND的“禁止区域”

上图是背面铺铜情况,我发现我正面GND与铜皮连接的地方拓宽了,但是背面没有拓宽

六、软件:

  • 目前软件写到第5个工程,其中第1、2、4个工程正常,第2、5个仍然有报错
  • 代码是参考官方的Ai8051U实验箱的代码写的,参考第1和第25个工程(参见“三、参考资料”那张图)
  • 我发现Ai8051U实验箱的代码把主要功能放在了c里,而上图我正好第3、5个工程尝试分文件,比如工程3的oled.c和工程5的pwm.c以及motor.c,结果正好这两个工程有我暂时没找出原因的报错,我不知道这其中有无关联

下面大致讲一下第4个工程“04-tb6612-BigGreen”,因为时间有限,只解释部分内容:

这个工程能大致通过改变PWM波的占空比开环控制两个轮子电机的速度

上图宏定义部分,只有绿框框柱的部分是我新增的内容,其余是从官方实验箱代码中截取的部分

上图绿色部分是新增的,其余是从官方实验箱代码中截取的部分,LED_Flag用于控制LED翻转,testCount用于在定时器中断服务函数中计数;蓝色箭头指的地方,可以看出PWM的周期值我改成100,而PWM7_Flag和PWM7_Flag是官方实验箱代码中用于呼吸灯操作的,在本工程中没用到

上图中的代码是官方实验箱代码每一个工程都会有的,其中绿色框那里4种IO口模式的配置的注释是我根据手册说明搬运到这里来的;蓝色箭头指的那两个,我发现AIN1,AIN2,BIN1,BIN2设置成准双向口和推挽输出都可以控制

(1)上图中代码是官方实验箱代码中搬的,除了蓝色箭头指向的两个PWM的占空比值之外都没变化,只是把不用的PWM5和PWM6砍去了;

(2)这里PWM7_Duty和PWM8_Duty的值是重点,因为前面将PWM的周期设置为了100,所以这里PWM7_Duty和PWM8_Duty的取值理论上是1~100,我发现Duty的取值越靠近100,轮子转速越慢,越靠近0,轮子转速越快,因此推测这里的占空比是反的,或者说是低电平的占比而不是高电平的占比

  • 上图是定时器0的中断服务函数,原有的官方呼吸灯的代码我都删除了,现在里面的代码都是自己写的,下面分成5个部分解释,如蓝框所示
  • 第1部分:因为中断服务函数每1ms进入一次,所以我设置testCount变量,每当计数到2000的时候进行下方操作,意味着每隔2s进行一次操作
  • 第2部分:这部分代码的用意是让LED闪烁,一个周期是亮2s,灭2s
  • 第3部分:这部分的情况要结合刚才PWM7_Duty和PWM8_Duty的初始值,分别是80和20,因为PWM的周期是100,所以这两句的代码作用是每隔2s,两个轮子的速度交换一次,比如这2s是左轮快右轮慢,下一个2s是左轮慢右轮快
  • 第4部分:这里有两个Motor_Control,因为我发现之前的Duty疑似是低电平的占空比,值越大电机速度越慢,所以想要用100减去它们,这样结合函数内部的操作,可以让Duty与速度成正比,但目前不知道为什么,速度和Duty还是反着的
  • 第5部分:每次操作后testCount要置0

上图Motor_Control是一个经典的函数,它一次封装了两个电机轮子的PWM设置以及转动极性设置,它预期的功能是一个函数就能控制两个电机,分别进行PWM设置,而且可以通过设置负数的PWM来表示电机反向转动(虽然实际设置的时候PWM只能为正数,但是这里给函数输入负值它就理解为电机反向转动),理想很丰满,现实很骨感,目前因为为止原因,当PWM给负值时,轮子不动而不是反向

这两个函数是工程自带的,不做赘述

七、器件介绍(图片)

 

八、过程中的问题解决:

问题1】刚开始焊接唯一一个贴片元件,16脚USB,但是因为我没有焊膏和热风枪,所以用电烙铁焊得一塌糊涂,所以只好换一个板子

解决】还好预留了串口下载,于是使用串口供电和下载,USB和相关的5.1kR和22R就先不焊接了

 

问题2】将Ai8051U放到芯片座的时候有1个引脚压弯了,濒临折断

解决】分配引脚的时候避开它

 

问题3】发现复位按键没法复位,下载按键没法下载

解决】还好有开关,开关可以替代复位和下载

 

问题4】第3个工程和第5个工程有报错

解决】有待解决

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
My_Project.zip
12
2
图片包.zip
4
3
参考资料.zip
10
4
视频.mp4
4
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航