极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 42413|回复: 15

自制Arduino最小系统吧,集成N多种功能!!赶快来围观吧》》

[复制链接]
发表于 2018-11-15 16:33:29 | 显示全部楼层 |阅读模式
前文:
        最近想做点遥控的小玩具,所以一直在寻找一款实用的开发板(最好是兼容Arduino的,因为我只会玩arduino,对于其他单片机编程烧写什么的一概不知道。。。),所以苦苦寻找了许久,然后发现了下面两款板子:号称世界上最小的arduino:基于ATTINY85的主板以及DF家的beetle。这两块板子体积都挺小的beetle(20*22mm)以及attiny85(23*18mm),功能上来说肯定Beetle更加优秀,但是价格略高。便宜的attiny85仅有的6个端口并不够我使用。。而且对于一些项目来说,对于主板的体积还是有一定要求的,这两块板子搭配上扩展板之后可能过于庞大(而且市面上还找不到这样的扩展板,DF家到是出了一块,但仅仅是将所有引脚引出)。于是纠结好久之后,按捺不住想自己画板子了,于是有了下文


(上面是两种市面上可以购买到的最小的Arduino板)

                                                                      第一部分
        选取自己想要的功能是十分必要的,俗话说鱼和熊掌不可兼得,画电路板也是一样,不可能一块小小的板子上啥功能都有,所以先要明确自己的使用环境以及所需要的功能!!!
我的使用环境:
       一些无线遥控的玩具或者机器人上,体积上越小越好,这些玩具一般是3.7V锂电池供电的,而且驱动方式一般是以电机或者舵机为主,一般至少3路电机驱动,当然要有可以控制玩具灯光的接口,因为这样比较炫酷,嘻嘻


    有了使用环境,那么需要的功能就很明了了!下面就是我列举的一些功能:
1.首先最主要的是遥控!!(重点! ),所以一个给无线通讯模块预留的接口是最重要的,同时呢,给无线模块供电工作也要做好!!(不然供电电压不够的话无线模块输出的数据就乱掉了,然后整个单片机就傻掉了。。。。然后就。。。

2.供电方式是3.7V锂电池,所以一路电源升压电路是肯定必要的啦,这个电路可以将锂电池的电源升压到5V之后输出给单片机使用的。那么,电池玩着玩着没电了怎么办?这时候有个电压报警器就是很方便的了,他可以很好的保护我们的电池不会过放电!所以,划重点!! 锂电池供电部分我们需要一个升压电路和一个电压报警器电路。

3.说到电源的问题,是不是我们日常见到的电压有两种呢?一种是3.3V,一种是5V,有些芯片工作需要5V但是有的只要3.3V。你可能会问两个不就是差1.7V吗,接上去也没多大事,然而事实是这个芯片可能会活不久。。(不要问我怎么知道的)因此,为了兼顾多种芯片,我决定多加上输出电压3.3V的稳压电路。

4.驱动方面,我说到主要是以舵机和电机为主,舵机可能不需要驱动(直接接PWM输出就好了),但是电机是必须要接驱动的(曾经有直接用单片机端口驱动电机的,后来他就弃坑了。。。)而且接上驱动模块之后电机还可以调速以及调节正反转。所以至少3路的驱动以及一路或者多路的舵机接口是必要的。

5.控制灯光的接口就比较好弄了,直接怼上单片机的I/O口即可(注意单片机I/O口控制一般小的led还是可以的,谁要控制什么1w或者10w的大功率led灯珠就是作死了。。。)

6.需要带有一些常规的数字接口或者模拟输入接口(这个数量当然是越多越好,方便后期扩展)

整理了一下,我列出了一个表格:


       列出来了需要的功能,我感觉整个工作就完成了一大半,有选择恐惧症的我在决定哪些功能时候真的是非常头痛,然而现在感觉好了许多,设计的方向也就比较明了了。


                                                接下来就是纠结的选器件了:
1.单片机的话我是真的除了atmel系列之外都不会,所以我毫不犹豫的选了Atmega328P-AU,这个芯片也是Arduino nano上使用的,由于需要体积小巧的要求,所以我选择的是贴片TQFP封装的。而且这个芯片买回来烧写上bootloader之后就可以使用Arduino ide来开发了,这也是我选择它的原因。

2.单片机选了当然需要一个Rs232转串口芯片给Atmega328p写程序啊,但是我并不想给整个板子加上一个电平转换芯片,一个是因为这样会占用本来就小的版面空间和多出一个usb接口,我还不如使用类似Arduino pro mini的那种方案,使用外置的RS232转TTL芯片去给328p写固件,这样可以最大化的节省板面空间(正经脸.JPG)

3.对于无线模块的选择可以说是非常重要了,稳定的模块决定了通讯的质量是否足够高,也决定了遥控的延迟以及手感。这部分我木有太多纠结,因为目标非常明显,就是NRF24L01,用过的都说好。而且使用SPI协议与Atmega328p通讯,速度快且稳定。这里放一张NRF24L01的图:



4. 5V升压的电路的设计我取自一款升压模块的电路,我在网上找到了原理图,如下:芯片使用的是E50D,输入电压0.9V-5V,恒定输出电压5V,最大输出电流超过500ma,足够我使用了。

5. 3.3V的稳压芯片我使用的是MIC5205-3.3,MIC5205是一款LDO芯片(低压差线性稳压芯片)输入电压与输出电压之间最少可以只有350mv的电压差,对于电源不太稳定的电路实在再合适不过,最大输入电压16V,最大输出电流150ma,恒定输出电压3.3V。电路图如下:



6.电机驱动我并没有选择使用集成的电机驱动IC,因为我看了看封装都过于庞大,不适合这种小体积项目,而且我并不太需要双向的驱动,只用单向的即可。挑来挑去,我决定使用最简单的mos管驱动电机,便宜而且实用。mos管的话我使用的是nmos管,不建议使用pmos管的原因是pmos管的导通内阻较大,会造成很大的损耗。对着数据表格看了半天之后,我看中了AO3400,最大通过电流5.7A,足够使用了。


7.对于板子我还添加了一路电压输入,因为顾及到有些电池电压在5V以上的情况(例如7V,9V和12V)我的板子也要可以正常工作,于是我添加了一个降压电路,可以将输入的7-12V电压降到5V供给整个系统使用。芯片选的是ME6210A50PG,同样是一款低压差线性稳压芯片,最大输入电压18V,最大输出电流500ma,恒定输出电压5V,电路图如下:


        至此为止,所有的器件都选择完毕了,下面就是细化每个部分的设计以及将电路图画出来。我会介绍一些基本的电路知识给大家,请大家拍砖。

                                                             第二部分
      对于电路的设计,我主张从大到小,从重要到次要的顺序来设计:这样我们可以搞清楚整个系统的主次关系,方便日后查找问题。
1.Atmega328P外围电路的设计
         Atmega328p的外围电路着实简单,仅需要几个器件就可以完成(基本上就是晶振电路和复位电路)没有什么好说的,我也省省篇幅,歇一会。。。上图!!!



2.NRF24L01接口的设计
        NRF24L01与Atmega328P采用SPI协议进行通讯,所以我将对应的引脚连接到Atmega328P上。在这里我给电源正负极之间接了一个47uf的电解电容,是为了保证电压的稳定(因为NRF24L01对电源的要求还是比较高的)



3.锂电池升压电路的设计(输入0.9-5V,输出5V)
        整个升压电路其实就只需要几个零件,在这里我说明需要注意的一些事项:选择的电感一定要是功率电感,二极管的话务必使用肖特基二极管(因为E50D的工作频率在300khz左右,所以普通二极管频率没有肖特基二极管这么快)推荐型号是1N5817或者1N5819


4.3.3V稳压电路的设计(输入5V,输出3.3V)
        首先放上电路图,这个电路没有什么需要的外围器件,仅仅一个电容用来滤波即可



5.7-12V降压电路的设计(输入7-12V,输出5V)
        这个电路和上一个基本上一样的,就是在输入端上加了一个10uf电容滤波,可以过滤掉一些输入电压的纹波。



6.电机驱动电路的设计
        对于电机驱动电路,电路图如下。其中单片机的输出信号脚经过一个保护电阻之后连接在mos管的栅极上,同时在mos管的栅极还有一个电阻接地,这是因为三极管的栅极存在结电容,所以这个电阻给mos管关断时候提供了一条电子释放通道。对于电动机的这类感性负载,用mos管控制开关的时候容易产生较大的感生电动势,容易击穿mos管,于是我添加了一个续流二极管在电动机的两端,来减少反向电压。同样的,这个二极管尽量选择肖特基二极管,以满足频率要求,我这里采用的是1N5819。



7.报警电路的设计
        对于这个报警器我想了很久,想过很多方式去控制蜂鸣器的鸣叫,纠结许久之后才定下来这个方案,采用Atmega328p采集电池电压数据,通过一个数字口来控制蜂鸣器的鸣叫。对于电压采集电路,因为输入的电压电压低于5V,所以直接使用Atmega328p的模拟输入端口读取电压数据。
        关于控制蜂鸣器的鸣叫,我选择的是有源蜂鸣器,这种蜂鸣器只需要给一个高低电平信号即可发出声音,但是声音频率是固定的,若是选择无源蜂鸣器,我还需要给它输入PWM信号,这样做会占用一个PWM口,所以权衡之下还是使用有源蜂鸣器。
        但是纠结的我又想了想,要是没电的时候一直响岂不是很烦人?我更希望是响一声,停几秒,再响一声,再停几秒。。这种的,于是我花了点时间回顾了单稳态触发器(我真的是给自己找坑挖。。。)最后设计出来如下电路:



       这里采用555芯片制作了一个单稳态触发器,触发器的输出口通过一个三极管控制蜂鸣器,需要注意的是蜂鸣器同样属于感性负载,务必接上一个续流二极管,这个二极管由于工作频率较低,没有什么限制。但是我还是选用了一个肖特基二极管(并不想多买一种二极管)555芯片的reset端我连接上了Atmega328p的四号端口,用这个脚的信号来控制整个蜂鸣器电路是否工作。这个电路即可控制蜂鸣器响一下,停一下。

8.其他输出接口的设计
       首先是给单片机下载程序的接口,如图



      然后是两种电源输出的接口(3.3V和5V)


       再就是4路模拟量输入接口(在这里我预留了Atmega328p的i2C接口A4和A5,方便连接其他使用i2C的设备)


        最后就是6路的数字输出口,其中D3,D5,D6,D9,D10 5路为PWM和I/O复用端口,方便连接舵机,接入其他电机驱动板或者连接其他传感器设备。D2脚作为Atmega328p的外部中断端口,可以控制单片机的中断操作。但是注意,D3,D5,D6口也用来控制板载的mos管,所以当使用板载mos管控制电机时,这几个管脚请不要使用。


                                                                         总结
      至此为止,整个电路就设计完毕了,接下来就需要进行PCB电路板的排版以及布线,这个星期有点小忙,关于接下来的设计我会在下周放出,请大家期待,如果有什么关于电路设计以及PCB板的问题,欢迎大家提问,我会认真的回复你们。。
      最后,感谢你们阅读我写的这么多文字,希望我此次做的电路可以对你们提供一些帮助和引导,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2018-11-29 15:42:27 来自手机 | 显示全部楼层
Ansifa 发表于 2018-11-19 13:58
用一片555的BOM成本可能比用单片机还贵还是软件控制好,用一个timer就好

还好吧,毕竟555才几角钱,主要是avr单片机的timer脚全部用于pwm,所以没办法,如果用51的话会好点
回复 支持 1 反对 0

使用道具 举报

发表于 2018-11-15 17:22:33 | 显示全部楼层
好厉害,我也想做一个,把arduino供电完美解决的板子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 18:28:47 | 显示全部楼层
hqsmpp 发表于 2018-11-15 17:22
好厉害,我也想做一个,把arduino供电完美解决的板子

哈哈哈哈,我也想。这个电源芯片我还没有用过,过几天买回来试试,好用就敲定了
回复 支持 反对

使用道具 举报

发表于 2018-11-15 18:30:15 | 显示全部楼层
我来围观的。
回复 支持 反对

使用道具 举报

发表于 2018-11-16 15:06:30 | 显示全部楼层
蜂鸣器断续为什么不用单片机直接控制呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-17 19:24:14 | 显示全部楼层
keneng 发表于 2018-11-16 15:06
蜂鸣器断续为什么不用单片机直接控制呢?

这个问题问的好,我最初也想用单片机直接控制蜂鸣器,不仅可以省好多元件还可以节省电路板的空间,但是实验之后发现如果用单片机控制蜂鸣器断续鸣叫的话就会一直占用单片机的资源了,因为单片机需要不停执行电平翻转以及延时的工作,所以单片机就干不了其他的事了。我也尝试了直接用定时器控制引脚电平翻转,但是发现Atmega328P的三个定时器都是连接了PWM输出引脚的,我不可能调用本来就不多的PWM引脚去做这个事,所以做这个震荡电路也是不得已之举。
回复 支持 反对

使用道具 举报

发表于 2018-11-17 22:58:14 | 显示全部楼层
lzy1999 发表于 2018-11-17 19:24
这个问题问的好,我最初也想用单片机直接控制蜂鸣器,不仅可以省好多元件还可以节省电路板的空间,但是实 ...

直接用有源蜂鸣器不好吗?不过有个问题,这样就不能输出不同频率的声音了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-18 14:25:32 | 显示全部楼层
wetnt 发表于 2018-11-17 22:58
直接用有源蜂鸣器不好吗?不过有个问题,这样就不能输出不同频率的声音了 ...

我用的就是有源蜂鸣器,不过给他通电就会一直响,我想做成那种响秒,停两秒的那种,所以设计了这个震荡电路,来周期性的控制蜂鸣器。
回复 支持 反对

使用道具 举报

发表于 2018-11-19 08:47:49 | 显示全部楼层
lzy1999 发表于 2018-11-17 19:24
这个问题问的好,我最初也想用单片机直接控制蜂鸣器,不仅可以省好多元件还可以节省电路板的空间,但是实 ...

这个我没考虑到
回复 支持 反对

使用道具 举报

发表于 2018-11-19 13:58:25 | 显示全部楼层
用一片555的BOM成本可能比用单片机还贵还是软件控制好,用一个timer就好
回复 支持 反对

使用道具 举报

发表于 2019-1-18 14:03:52 | 显示全部楼层
我是个纯粹的外行爱好者,我可以询问一下你对于每个电路模块滤波电容大小的选择是如何确定的吗?我搞不清楚什么情况下要选择多大的电容来使用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-21 11:23:46 | 显示全部楼层
wy1987914 发表于 2019-1-18 14:03
我是个纯粹的外行爱好者,我可以询问一下你对于每个电路模块滤波电容大小的选择是如何确定的吗?我搞不清楚 ...

一般是看数据手册,如果没有数据手册的情况下我一般会看别人的帖子来得到一些经验,对于直流电源部分的滤波电容一般是需要两种容量的电容,一种是大容量的,且常为电解电容或者胆电容,特点是容量较其他电容大,用来过滤电源中低频成分,容量一般在10uf到4700uf之间,具体大小看所带负载决定。另外是一种小容量的,当电源中存在高频噪声(可能由于干扰引起)时,可以过滤掉高频杂波,容量一般在0.01uf到0.47uf之间。
回复 支持 反对

使用道具 举报

发表于 2019-4-15 13:51:23 | 显示全部楼层
蜂鸣器还是交给MPU直接控制好,灵活多变,程序写得好唱首歌都不是问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 21:43:23 | 显示全部楼层
最帅的老饼 发表于 2019-4-15 13:51
蜂鸣器还是交给MPU直接控制好,灵活多变,程序写得好唱首歌都不是问题。

确实,发现这样搞很浪费z资源
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 15:22 , Processed in 0.053619 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表