发帖数

50

原创数

50

关注者

12

阅读数

8965

点赞数

4

蔡琰

  • USB与TTL通信之默契轨道---技术剖析(一)

    话说做这个转换的全隔离小模块也是因为自己做单片机软件设计那么多年,各种通信端口软件都做过,然而需要调试都会用到这些辅助模块来跟上位机通信,这个是最简洁的通信验证方式,那么这些小模块还是很容易坏的,好多时候都会赶在项目节点上突然故障,被迫停下赶紧采购,影响进度不说,还很影响调试产品的心情啊,所以才想去研究设计一个,自己做过的不是用起来也会顺手一些呢。


    首先开始分析实现流程,然后选取集成芯片等工作。

    开始了,那一起看下标题,我想要实现的是转换通信模块,那么需要一个转换芯片;还有就是全隔离,自然需要一个隔离芯片。这是大体方向,细节再慢慢实现下吧。


    1、既然是USB转,那么我直接用USB供电就好了,就不需要再外部供电了

    输入5V电,后端TTL也是5V;输入端加个保险丝,以及后面加的隔离芯片,都是为了保护电脑USB接口。输入端一般我会加一个LED灯,指示用的。

    1.png


    2、输入后的信号就开始进行转换了,我选用了CH340G转换芯片,附件可以自行查看下数据手册啊,如果对你其他项目有帮助可以查看下呢。

    信号线一般需要加个小电阻(10R够了)做防震荡作用,这个芯片工作起来需要一个晶振,晶振的起震电容设计就不用多说了吧,电源端部分还要有储能和滤波电容,这个也不用多说了吧,那么一起来看下转换端部分的设计原图:

    2.png


    3、信号转换后就是进行全隔离了,前面加保险丝的时候说明了隔离的作用,就是保护,有些时候我们也知道如果没隔离,对于我们的USB接口还是有不确定性的,接入的模块你不确定会不会有干扰,什么干扰,我觉得还是很有必要对这些频繁用到的模块加隔离比较稳妥,个人见解。

    对于隔离,除了信号还有电源和地的隔离,这才叫全隔离,那上图看下吧。

     

    3.png

    4.png

    另外输出部分有电源、地、信号发送接收了,输出是5V输出能力100mA,如果目标板电流过大,建议使用外部独立电源供电,使用外部独立供电时可不接5V,但必须要接GND,这个是要注意的。

    主要部分的设计就完成了,是不是觉得其他我们平时买的小模块内容也没想象中那么复杂,其实做任何设计都要选定芯片研读芯片手册,不管做软件设计也好,硬件设计也好,只是关注点不一样。当然还有一些是经验值。

    当我们熟悉了这些模块的设计,即便买来的碰到故障了不是很容易分析处理一下的,最起码不会影响工作进度的。多学点总归没错的。


    后面就开始设计PCB过程了,最后产品出来就可以通信使用了,每个过程都会有收获的,如果大家感兴趣的话就持续关注我吧。后面会陆续分享出我的设计视频过程,随时欢迎大家跟我来探讨,也让我可以开阔下思路,或许还有其他实现方式,不同的尝试过程才是经验积累成长的过程。


    收藏 0 回复 0 浏览 121
  • 8脚51单片机DIY时间显示+闹钟技术分享(四)

    软件设计

    前情提要:首先感谢大家能持续关注我的DIY闹钟的实现过程,前面分享了我的PCB设计过程,接下来就是拿到PCB板焊接程序调试了,开始的想法到慢慢实现,真的收获多多啊,接下来我还是主要分享我的程序设计思路,以及实现过程的坎坷。希望能给大家带来不一样的收获。学习总归是好的,变成自己的才是王道哈。


    具体思路和程序部分我也会陆续更新出视频,感兴趣的可以关注下哈~

    接下来就是我当时的设计初衷了,想要实现的功能,那就可以分模块来实现了。先把思路捋顺,事情会变得事半功倍的,还不会容易出错,到最后的调试也会变得轻松许多了。


    我们知道程序设计就是数据结构加算法,首先要有算法才能实现,那么算法的表示方法可以很多,主要我还是倾向于用流程图实现,就很直观了。那么接下来我会用流程图和实际程序部分来表述我的程序设计。

    1、程序主要实现的功能:

    1.jpg

    这就是在我最初设想下需要实现的功能模块。具体再根据想法一步步实现。蜂鸣器是要唱歌的,那么我放在了定时器中断内部处理了,后面讲原因哈。

    2、首先是初始化部分,一起来看下都需要初始化什么,

    2.jpg

    首先就是对单片机的初始化,比如平常我们用到的时钟配置等等。这个呢就是要研读我们的单片机数据手册了,不能想当然,选取了单片机数据手册要反复看多次呢,每款都是不一样的,除非你经常用一款,那么就方便多了,由于这款我是第一次用,所以还是要仔细些好。

    先看下对I2C管脚的配置,配置模式如下,

    3.jpg


    再有就是定时器的初始化了。后面的部分就是对每个模块的全局变量(所有全局变量我一般定义成结构体)初始化了。模块化逻辑清晰,方便扩展的。这里主要说下我的设计思路,具体实现可以关注视频部分哈。


    3、接下来就是每个功能模块具体的实现流程了,

    先看下显示处理模块,显示处理先来分析下当时需要实现的功能,

    一是正常时间的显示;

    二是对时间的设置,有小时和分钟的设置,会有闪烁;

    三是对报警时间的设置,有小时和分钟的设置,快闪(区别于时间设置);

    最后就是把不同模式下的数据显示出来。

    这样显得很清晰了,那么这里就可以用一个模式变量来进行判断当前状态就可以了


    4继续看下时间处理模块都有哪些功能需要实现,

    首先要读取时钟芯片的当前时间,

    二是判断是否是半点,蜂鸣器叫一声状态置位

    三是判断是否是整点,蜂鸣器叫两声状态置位

    四是读取报警标志,如果是当前报警时间,蜂鸣器唱歌状态置位。

    4.jpg


    4、最后就是按键处理模块,就是一个按键扫描和按键处理,是不是看上去挺简单的,最开始就跟大家介绍过这款数码管驱动芯片带按键处理的,芯片强大的不知道大家有没有看看呢。下面我们一起来看看特点吧

    5.jpg

    是不是真的很强大,按键也处理了,那么对于我们应用来说就直接扫描就够了,处理起来也方便太多了。

    接着看下按键处理,也就是对按键读取过来的实际应用了,这个按键我设计了四个,一个模式键,一个加值键,一个减值键,一个确认键。上图吧:

    6.jpg

    其实处理一定要有条理性,模块化,这样真的调试也会清晰很多。


    5、最后就是中断处理部分了,对于一些显示和按键的计数处理,定时器我配置的1ms;前面说蜂鸣器处理放在了定时器内部,这里说下我的原因,其实开始我是放在主循环的,后面加了蜂鸣器唱歌的部分,发现调调总是不对,这个确实让我调试了不少时间,后来经过示波器测试发现主循环时间过长,导致唱歌时间无法保证。所以我才把这个蜂鸣器的处理放在中断里面处理,具体这个蜂鸣器模块处理时间不长。话说这个是调试最多的部分了,一直纠结于音调和频率的问题,后来实际测试才发现是主循环长导致。


    6、下面来说下这个蜂鸣器模块,也是通过模式处理的,通过全局变量的当前模式处理不同的响声。因为我选用的无源蜂鸣器,那么就要看下它的响的频率,也就是PWM周期配置。

    对于唱歌的话还要去研究下歌曲的调、节拍、延长音等,一度觉得自己都是音乐的研究人了,哈。当然有同事的帮忙快速学了植入到程序内,这个也是难啃的骨头啊。如果有人对这块感兴趣可以看我的详细视频来了解下,话说不学音乐也不影响实现蜂鸣器的响啊,这个其实也是在研究单片机的PWM功能,也算长进不少啊。

    7.jpg

    这个就是我最终的结果了。

    做到这里程序设计的思路都分享完了,以至于我的闹钟DIY设计也实现了,其实纵观看下只要有条理,还需要细心,然后就都可以实现。大家看下我的设计有没有值得借鉴的地方或者有需要改进的,随时欢迎沟通交流。实现方法有很多,或者大家有更多更好的方法呢,欢迎来交流啊。后面会陆续更新其他小玩意的设计过程,感兴趣的持续关注吧。


    收藏 0 回复 0 浏览 65
  • 8脚51单片机DIY时间显示+闹钟技术分享(三)

    PCB设计

    延续前篇,感谢大家能关注我的实现过程,废话不多说,接下来就是跟大家分享我的PCB设计过程了,PCB设计首先就是先把板框做好了,因为这个小玩意是自己想来做的,所以板框也自定义就好。然后把原理图导入到PCB,就开始实现PCB设计过程了,在这里我主要分享我的设计思路,布局以及走线需要避开的坑。


    具体实现如果大家感兴趣的话也可以试一下的,会有很多收获的。后面我会分享出我的实现过程的视频部分,如果大家感兴趣可以关注下呢,可以跟自己做的对比下,到时候欢迎大家跟我多交流学习哈~


    那我就继续了,首先呢导入了就是开始设置规则了,我们知道做任何事情都要有规则,有了规则才不会乱套,大城市之所以好,是因为规则性好,人人守规则才会有更好的发展。我们接着回来说下布局前的规则设置,我一般的设置都有哪些,大家都有自己的习惯,我先分享出我的习惯,如果有更好的建议随时欢迎沟通,

    接下来我就开始规则设置了:

    1、先是间距设置,常规我设置线的间距(线和线,线和过孔等的距离)是0.2mm,这是经验值;然后我会设置敷铜间距,单独添加间距规则设置敷铜的间距,这个我设置的0.3mm,根据实际情况来定,这个也是我的经验值。



    1.jpg


    2、接下来就是线宽了,线宽推荐值我不变,最小线宽设置为0.2mm,最大设置为2mm,一般情况下布线常规线宽就是推荐值,电源和地线会用大点,所以这里规则要先设置好。

    2.jpg


    3、接着就是设置过孔,对于过孔来说,有内径大小和外径大小,都有相应的最小值、推荐值和最大值,在这里我只改变内径最小值(0.3mm)和外径的最小值(0.6mm),其他就是默认就可以了。

    3.jpg

    4、接下来就是我会设置下敷铜连接方式,单独新建规则来设置过孔的连接方式,常规默认是十字连接,这里我设置为直连就可以了。

    4.jpg


    5、后面的设置就是孔到孔的间距、最小阻焊的间距、丝印到阻焊的间距、丝印到丝印的间距、元件的间距,这些我一般都会全部设置为0,主要靠自己布局把握了。

    主要规则设置就上面这些,其他我会在过程中需要的情况下再进行设置,但是主要设置就是这些,规则设置好更方便布局以及走线,否则过程中一直出现绿色报错还要去看规则会影响工作进度还会影响心情的吧,所以为了工作效率还是先把规则设置好,至少我是这样认为的。


    那么规则设置好了,就开始布局之旅了,布局也是有讲究的,当设计一个产品时,器件放哪里更合理,器件间的特性关系都是需要有考量的。

    一般我设计过程都是左边输入,右边输出原则。

    首先需要完成四个孔,安装用的,分别在四个脚的位置,M3孔,具体画图方法可以参考后续这个小闹钟的视频设计过程,这里就不详细说了,如下面所示:

    5.png

     

    继续看下布局方面,由于这个是小闹钟,又是选用USB供电,所以左端是USB口,需要外接的是供电端和程序下载端口,所以程序下载端口选择放在右边。DIY的闹钟,所以显示(所有LED)放在顶层,其他元件全部放在底层。这样看起来也清爽多了。

    按照模块化布局,再移入板框中,首先从左边开始看,

    USB供电进来,我把电池和时钟芯片放在这里,跟供电相关的部分,由于把下载端口放在右边了,所以单片机放在右边。看下图布局,电池,时钟芯片,晶振,三极管,还有电阻,电容。滤波电容放在管脚端,效果更好。这是正面布局哦。

     

    6.png


    接下来看下数码管驱动芯片,因为我把按键放在板子上端了,所以这个芯片放在中间比较合理,周边就是一些限流电阻、滤波和储能电容,先摆好吧,参考下呢

    7.png


    接下来看下就剩下单片机和蜂鸣器了,单片机管脚有跟数码管芯片连接,如果把蜂鸣器放在中间会比较难走线,所以单片机放在数码管驱动芯片旁边,接着是蜂鸣器和下载端口了,依次这样排开就可以方便走线了。

    8.jpg

    布局的大体过程就是这样的,具体还要根据走线再做调整。

    接下来我跟大家分享下我的走线过程,走线需要注意的,其实走线是需要细致的过程,真的是需要一直调整器件,调整线,最终目的就是合理,正确。


    首先走线大家可能都知道不能走直线,然后电源和地我选择粗线(0.4mm),其他线都是推荐值就可以了。地的部分是通过敷铜共地的,所以需要大过孔来共地,有的地方需要打过孔是为了铜皮电位平等。线尽量走的有规则些,所以在走线的过程先考虑好哪些在顶层,哪些在底层,否则过程中走的越来越乱,并且这个小闹钟看似简单,实际还是很需要下功夫的,具体的实现后面会有详细视频,因为走线还是需要实践的,我只能说下我的思路和一些需要注意的地方,具体的每条线的走向描述还是看视频来的直接点。当然后面要是出产品还有敷铜,DRC检测,出图等很多呢,再有提醒一点需要加的就是泪滴,这个是手动焊接对焊盘连接线的保护。这里我只分享设计过程,那些流程化的东西就可以省掉了,但是做事一定要认真,每个细节都要认真对待,每次你的认真都会得到回报的,我们的付出都在慢慢得到印证的。

    最终的效果图大家看下呢,


    9.png

    做到这里所有布局和走线的思路都讲完了,其实纵观看下只要有条理,还需要细心,然后就都可以实现。PCB设计就这样完成了,大家看下我的设计有没有值得借鉴的地方或者有需要改进的,随时欢迎沟通交流。实现方法有很多,或者大家有更多更好的方法呢,欢迎来交流啊。后面会陆续更新,下面一篇会展现我的程序设计过程,感兴趣的持续关注

    收藏 0 回复 0 浏览 81
  • 8脚51单片机DIY时间显示+闹钟技术分享(二)

    原理图设计

    延续前篇,感谢大家能关注我的实现过程,废话不多说,接下来就是跟大家分享我的原理图设计过程了,首先呢就是我前面说到了DIY效果所以选择用LED来组成数码管,所以我选择用红灯(压降低)来实现,具体做出来就是下面这样的效果了:

    1.png


    是不是感觉还不错呢,主要显示小时和分钟。

    因为我选择USB供电,先把供电端设计完成,供电进来我这里加了个保险丝(9V/200mA---大小根据自己实际电路选择),保护整个电路板。

    前面设计的时候说到了的模块,我这里再来罗列一下,然后可以通过模块一点点讲实现了。有单片机模块,按键显示模块,时钟芯片模块,蜂鸣器模块。我一个一个来跟大家讲下我的实现过程和感觉需要注意的设计要点。

    单片机模块:


    2.png


    电源端就是一个滤波电容一个储能电容。

    一个蜂鸣器输出端,其实时钟芯片有触发闹钟时间到的功能,这里我就先把端口连上了,实际后来我实现的时候是通过I2C口读取寄存器获取的。

    后面就好理解了,就是两个口是I2C口,另外两个是下载通讯口了,连接出来加个排针就好了。这里我都加了一个10R的电阻是防震荡的作用。到这里呢这个单片机模块部分就完成了,是不是很简单。继续吧。

     

    按键显示模块:

    3.png


    这个就是我前面特别推的一款非常实用的按键显示芯片了。每个段都加了个电阻做限流用的,可以根据实际情况(LED灯的亮度)来调整这个电阻的。这里我们就看到了对于显示和按键我们只用了单片机的I2C两个接口,是不是很强大了。

    其实这个芯片还有很多内部处理,比如按键消抖这些,很好了。前面如果下载了我的文章附件的可能大概浏览了下,是不是真的很好呢,希望对你们也有些借鉴。

    对于这里的电源端我也加了滤波电容和储能电容。

    按键部分我也贴图看下吧,

    4.png


    按键就是用的段管脚,这里这个4.7K的电阻就是一个限流作用了,这里我设计的是共阴使用。

    接下来我们看下这个时钟芯片模块部分,还是先贴图看看我的设计吧,然后再看我的设计思路,


    5.png


    先看左边部分,我们看看这个ALARM管脚是不是在单片机管脚的那里连接着呢,就是这个口,那里也说了我最终闹钟实现是通过I2C读取寄存器实现的,这里就不多讲了。这里这个10K电阻是上拉电阻,这个端口是开漏输出,电阻选大点也是为了功耗小点。I2C信号端要加一个4.7K的上拉电阻(这个的话就是看的I2C标准了),再接着看下这个时钟芯片是加外部晶振的,这个是根据手册看的哦。两个电容就是起震需求的电容了。再接着看下供电端,这里我加了个电池,就是在5V不供电的时候,需要电池来给时钟芯片供电,确保时间是对的。所以这里我用了一个二合一二极管,就是为了电池只给时钟芯片供电,防止那个5V的电给电池充电,这里电池我选择的是不可充电的啊。电源端的电容就是滤波用的啊。

    到这里时钟芯片部分的设计就完成了,是不是也不难,挺清楚的,如果这部分大家有什么更好的建议欢迎多多交流啊。

    接着大家看下我的蜂鸣器部分。还是先上图,再给大家说下我的思路呢,


    6.png


    对于蜂鸣器,我选用的是无源压电式蜂鸣器,我们来看下思路,电源进来,上面我加了一个10R的限流电阻,下面这个R15的作用就是为蜂鸣器放电用的,这个BEEP管脚给一个频率输出到蜂鸣器,让它响出不同的声音,所以这里我用了一个三极管,这个电阻R17的作用就是限流了,下面这个R18就是三极管结电容加速关断的作用了。这样解释一下是不是还是很好理解我的思路的?

    做到这里所有思路都讲完了,其实纵观看下还是很容易实现的。原理图设计就这样完成了,大家看下我的有没有什么需要改进的地方呢?实现方法有很多,或者大家有更多更好的方法呢,欢迎来交流啊。后面会陆续更新,下面一篇会展现我的PCB设计过程,感兴趣的持续关注吧。


    收藏 0 回复 0 浏览 58
  • 8脚51单片机DIY时间显示+闹钟技术分享(一)


    最近因为家里闹钟被小朋友摔坏了,所以想着买来买去还是没什么新意,不如自己做一个,这样不是更有意义吗?那就开始吧,想着自己做就可以用最小资源来实现最大功能了,然后开始查找需要的芯片资料,平时时间显示我们最起码要有小时和分钟吧,那么最起码要四位数码管了,还要有按键来调整时间吧,那么对IO口的管脚就开始有要求了,虽然是时钟显示,但是想来还是觉得不想因为节约管脚来把按键变少再去处理组合按键或者长按的按键。然后就开始各种查资料,后来找到一款很好的芯片,I2C通讯,直接可以实现4位数码管和四个按键的处理(当然这我只用到四个按键,其实这款芯片可以实现同时进行28键的键盘扫描),哇,这也太好了吧,迫不及待上图分享给大家了,就是下面这款:

    图片9.jpg


    功能好到真的跪了太好用了,好用到没朋友啊。因为这款芯片我太喜欢了,我会把这个芯片的数据手册放在附件,有兴趣的可以下载看看,真的好用还省去很多IO口。

    选到这款芯片,那单片机选型就自由了太多了,幸福感瞬间提升了,自己做时钟,要有个DIY的感觉,所以我选择把数码管全部换成LED(主要还有成本低哦),还有跟别人的东西不一样的感觉吧。然后既然我要做时间显示那么我就要选个时钟芯片的,既然显示和按键的选择了一个芯片实现,并且还是一个I2C接口,那同样时钟芯片我也选择了一款I2C通信的,那这样两个芯片用单片机的两个管脚就够了,是不是很省呢。既然要时间显示,如果单纯的时钟是不是很单调呢,最起码还要有个小闹钟吧,所以选择了一款带闹钟的时钟芯片,并且是I2C通信的,那这样时钟芯片也选好了,既然有闹钟,我就要加个蜂鸣器让它时间到了叫出来啊,不然怎么叫闹钟呢,这里我除了想到让闹钟报时滴滴的叫,还想到可以通过给蜂鸣器不同的频率让它唱歌呢,这里蜂鸣器我选择了一款无源蜂鸣器,这样蜂鸣器就只占用单片机的一个管脚也够了啊。现在的产品大多都是USB供电的,我也选择USB供电就可以了。到现在就只用了单片机的三个管脚,这样我就可以选择51STC8G1K08A)单片机中8脚的就够了。那么想到这些觉得有些意思了,那我就可以慢慢来实现了。

    其实别看我选的这些比较常用,还是挺简单的,这个看起来还是很容易实现的,起初我也这样想的,然而过程中并不是想象的那么顺利,还是踩了很多坑的。因为每个芯片都是有不同的特点,技术资料难免一次就能读透,还有就是会有点盲目的自信导致过程会有点曲折,所以还是要脚踏实地点好吧,我的曲折过程都会分享给大家,大体的器件选型好了,怎么实现呢,怎么做成我想要的东西呢,这个过程莫急,慢慢看我展示,主要会给大家分享避坑。

    后面就开始设计原理图和PCB了,最后产品出来才开始程序的实现,每个过程都好玩又有收获的,如果大家也感兴趣的话就持续关注我这个DIY的实现过程吧。随时欢迎大家跟我来探讨,也让我可以开阔下思路,或许下个小玩意更有意思呢。


    收藏 0 回复 0 浏览 75
×
蔡琰