发帖数

50

原创数

50

关注者

12

阅读数

8965

点赞数

4

蔡琰

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

    前情提要:前面一篇说了我设计这个全隔离小模块的想法和原理图设计,那么接下来就说下我的PCB设计过程,有些需要注意的点,我经历的坎坷分享给大家,希望能有些值得借鉴的地方。

    对于PCB设计,虽然我设计的是个小模块,然而不能因为产品小就大意,每个产品都有它的特点,都有需要注意的地方,经验积累都是一点一滴开始的。


    首先是左进右出原则,左边是USB端口,右边是TTL端口。(当然这个根据个人喜好,我的原则就是接口在板边)

    导入后布局前首先就是设置规则,有了规则约束布局走线自然也顺畅些了,没规矩不成方圆。

    继续简单看下我的常规规则设置,


    1、间距的设置,常规间距我是配置0.2,敷铜间距0.5;根据实际需求设定。

    1.jpg 


    2、线宽的范围放大,推荐的一般我不会改变。

    2.jpg 


    3、孔径的大小我一般会把范围设置大点,个人调节不受约束。

    4、一些间距的设置一般我都会设置为0,布局以及走线靠个人把控,比如孔到孔的间距,最小阻焊的间距,丝印到阻焊的间距,丝印到丝印的间距等。这个都可以根据自己需要设置。

    规则设置好就开始布局了,布局过程遵循规则就可以了。

    因为全隔离,有隔离芯片加隔离电源,隔离的要分开,考虑敷铜的方便,所以在布局的时候把模块要摆放好。

    布局模块化先把位置放置好,USB端口已经说过了,接着看下转化芯片的放置,直接上图看下吧。

    3.jpg 


    接下来看下隔离部分的布局,前面说了因为全隔离,通过敷铜共地,然后就要考虑隔离部分器件的摆放。

    4.jpg 


    布局的过程也就对走线也考虑了,那么在走线的时候就可以顺利很多了。当然会有小的调整。

    大体就是这样的。

    走线主要注意的是线宽,常规都是推荐线宽就可以了,电源和地的部分还是需要宽一些,一般我用0.4mm。再有需要注意的一点是最后需要加泪滴效果,为了避免焊接线容易断。

    还有敷铜后需要加一些过孔,为了铜皮的电位平等。这些都是需要注意的点。丝印的调整,以及一些版本号,日期号的添加,这些都是很有必要的。

    这里分享下我的最终实现效果:


    5.jpg 

    到这里,这个全隔离小模块就实现了,其实并不难,后面就是打板事宜了,感兴趣的可以试着实现一下,真正的实践才是真的成长,后面我还会陆续分享我的视频实现过程,那是整个过程走了一遍,希望能给到大家一些值得借鉴的东西,还希望大家能多跟我交流和沟通。我陆续分享乌云踏雪系列的转换模块的实现过程,有视频,有文章,这个是乌云踏雪系列的C1AConnect),后面会实现更多。有兴趣的就持续关注下哈,如果有想实现的点子也可以跟我们交流,一起实现哈。

    收藏 0 回复 0 浏览 99
  • 女工程师跟你分享和嵌入式的不解之缘

    ①邂逅

    女汉子是从小挂在我身上的标签,身体好,性格直。然而报志愿也是听亲戚推荐然后选择了计算机,话说计算机是没有嵌入式以及单片机的,只会学些计算机的语言(偏上位机),大学的所有懒惰的美好(通宵打游戏,谈恋爱等等)都体验了一番才发现是要毕业了,突然意识到自己能去干点啥,就在这个时候学校有合作的嵌入式培训,起初也是想着就业去的,而且当时看到师兄做了个机器人,又会唱歌又会跳舞,太好玩了,这个真的是激起了我的兴趣。就这样开启了学习嵌入式以及单片机的路程~

    图片1.png 

    ②笨手笨脚的第一次

    单片机,ARM一系列课程,当时感觉真的可以收获颇丰,也不会很难的吧。兴趣满满的去上课,认识元器件,画原理图,看程序。简直眼花缭乱啊,自信被打去了一大半,开始怀疑人生了,不知道自己是否能学会,就这样结束了学习的第一课。

    图片2.png 

    ③越挫越勇,继续奋斗

    当一个人想认真做一件事的时候,你会发现潜力无限啊,韧劲也是无限的呢。认真起来的样子也是很可爱的,每天充实的生活,学习,什么都不想了。当你坚持下来之后,回头看看那些坚持是收获了太多。单片机就这样在曲折的道路上学完了,有时候学了会自信满满,有时候会在崩溃的边缘,然鹅这都被我强大的内心压下去了。

    想来学完单片机真的自己会设计东西吗,记得第一次做交通灯的时候那个兴奋劲,从原理图设计,到PCB,再到程序设计,虽然做出来了,其实现在想想当时并没有完全理解了。

    从此开始对各种电子小产品有了兴趣,拆拆装装,虽然不是每次都能完全对上,但总归让自己觉得一只脚踏入了智能社会了。哇,那个心情啊~

    其实每个知识点的学习都是垫脚石,除了坚持不懈,还要不断的学习,不断的实践,买来开发板自己研究,去网上搜集各种资料,从多次失败中总结经验,每次踩过的坑都是经验的积累过程,学习的过程不就是把知识变成自己的嘛,能灵活运用了才是真的学到了。

    图片3.png 

    ④心得

    作为一个女汉子我想对那些想接触单片机以及嵌入式的萌新说,我一开始也是被嵌入式做的产品吸引才学的,也做了无数次的实验,经历过无数次的失败,也担心不是科班出身还想做电子产品,被质疑的眼神以及话语再退缩了。

    开始找工作确实很没有底气,总是觉得自己不行,不敢投简历,不敢去面试,一段时间的低迷让我整个人有点没了方向。谁让我还算强大呢,即使是兴趣是最好的老师,那也离不开对爱好的不离不弃啊~汗水下面永远都是会夹杂点泪水的呢,笑到最后的永远都是靠坚持的。

    我只是想告诉大家如果对嵌入式感兴趣就一定去试试,不管结果怎么样,爱好就去接触下,没准就能爱了呢,会有很大收获的。

    大家一定要有个记录的好习惯,好记性不如烂笔头,记录不仅可以鼓励自己,还能留下你的拼搏奋斗的脚印。回头发现原来自己还能如此优秀。

    行走江湖,技艺可多但是需精湛,每个项目的磨炼,每个日夜的奋斗都会给你留下美好的回忆。同为爱好者,我们有机会可以一起畅谈人生,畅谈理想~

    收藏 0 回复 0 浏览 146
  • 轻松解码串口通信

    说到通信,在我们的生活方方面面体现的淋漓尽致,比如手机信号,WiFi等这些无线通信更是近些年热点,并且各种通信设备都出来了,真的是科技社会,对我们的生活太方便了。


    对于通信,我们今天聊一下串口通信,其实做过单片机的基本都会用到,即便没有外设需求,就单独拎出来做个调试助手也是好的,可以通过和电脑通信直接打印出你想要的信息,直观。

    常规的通信方式就类似下图这样,是不是看上去很简单~

    1.jpg 

    对于串口通信属于串行异步通信,有相应的协议,是不是读懂并遵守协议就可以通信了?不一定。哈,不要有疑问,一个模块的方方面面都要照顾到它才给你工作不是,如果你家养了一个小狗,你把狗粮都买好了,都倒在食盆里了,最后却忘记放到它能看到的地方,是不是会饿肚子了。属于前面的工作都是无效的。


    我们先来了解下串口通信的底层规则都有哪些,通用规则你熟知了,然后选用不同款的单片机来控制的时候要再去研读对应单片机模块的相关配置,这个是必备的技能了。

    接下来我们看下串口通信的格式:

    2.jpg 

    空闲位UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
    起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。

    数据位:起始位之后就是要传输的数据,数据可以是56789位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。

    奇偶校验位:数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验一般分以下3种方式:
    1.无校验(no parity
    2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’
    3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’

    停止位:数据结束标志,一般可以是1/1.5/2位的高电平。

    波特率:数据传输速率使用波特率来表示,单位bpsbits per second

    常见的波特率9600bps115200bps等等,其他标准的波特率是120024004800192003840057600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us

    3.jpg 

    电脑端的配置就要做出同样的选择才能通信,所以往往如果你的产品是需要串口通信的话,最基本的产品手册就要把这些信息写上,否则通信不上。通信如果没数据,可以通过示波器来单独测试发送和接收端口数据进行分析。

    那么单个数据的规则有了,就是通信协议了,有自定义协议(方便定义,不方便客户开发)和标准协议(ModBus)等。话说如果自作产品端到端通信,那自定义协议就够用了,如果和外界通信,建议还是用标准协议,这样规则更强,方便扩展。

    4.jpg 

    对于标准协议ModBus,很多人还是会一知半解,如果有兴趣的话我可以单独拎出来一篇跟大家分享它的规则和使用方面的建议,毕竟我也算熟知,做了挺多产品的。附件我跟大家分享标准协议的相关规范文档,大家有兴趣记得下载去学习下。串口通信过程中碰到的层出不穷的问题可以和我交流啊,断帧,丢字节是常用的事,一般需要分段采集数据分析,发送接收状态寄存器的读取也有讲究的。对于不同的单片机我这里就不列举了,如果你有死结问题,可以一起分析哈~

    关注我们,单片机实际经验分享或许会带你走出调试死结。

    收藏 0 回复 0 浏览 306
  • STM32学习回忆录---------第3次写流水灯程序

    这是我第3次用STM32写流水灯程序了,感触颇深,想和大家分享我学习STM32的故事。


                     初次相识STM32

    2008年春天的第一场雪,来的比往年更大一些,这个春节,我留在深圳,无法回到河南。我在街上乱逛,无意间看到公交站台上的广告,深圳会在春季举办IIC (国际集成电路)大会,那是我刚刚大学毕业,学的是芯片制造专业,所以我决定参加。

     

    到那一天,在会展上,我看到了国外IC的先进制程,心想中国再过几年也会达到这个水平吧。

    后来,我看到了一个蝴蝶展厅,那是STM32展馆,我感觉这个芯片不错。这是我和STM32的初次相识。

     

    几年以后,STM32在国内迅速火了起来,因为我的专业在国内很难找到工作,我决定学习STM32


       1次学习STM32

     

    培训地点: 河南郑州,时间: 2013年,学习方式:线下。

    这是我第1次用STM32写流水灯,也是第一次用库函数,使用的芯片是STM32F103,用库函数的方式写流水灯,终于告别了寄存器,当时认为这是一种先进的方法,因为使用起来相当方便,想着以后单片机就不用查寄存器了,这是单片机历史上的伟大跨越。这个老师的教学方式是直接使用库函数,没有讲过库函数。在学习中,查错是一件让我头痛的事情,没有用过单步仿真,出现问题不知道,错在哪里,库函数固然好用,但库函数无法找出错误。使用printf(),有效果,但效果有限。我的这个老师非常诚实,我有不会的问题,他能给我解决就解决了,解决不了,老师就会说:“这个我也不会” !


     

    2次学习STM32

     

    培训地点: 广东深圳,时间: 2016年,学习方式:线下。

    这是我第2次用STM32写流水灯,也是用库函数的方式,使用的芯片是STM32F103。这个老师的水平要高一些,他把用到的库函数都讲了一遍,但是很少讲解寄存器。当我写流水灯程序的时候,我不仅会用库函数,而且还能够看懂库函数。当时觉得官方的库函数写的太好了,我不禁为官方点赞!。我问老师,这个启动代码能不能讲一下,老师说:你会用就行了,启动代码官方已经为你写好了,你不用知道为什么,你需要知道哪个是F1 的启动代码就可以了。出现错误的时候,依然没有查看寄存器和变量,用的是printf(),来进行调试,排查错误还是让人头疼。

    4月份的时候,我参加了STM32深圳峰会,官方介绍了CubeMx ,并说这是一种比库函数还方便的图形化编程方法,我认为汇编语言过时了,用C语言查寄存器的方法也过时了,现在STM32用的是库函数,但这种方法必将被CubeMx 所代替,因为随着编程技术的不断发展,新的技术必然会取代旧的技术。

    随着STM32 学习的深入,我开始学习一些高大上的东西,例如 触摸屏CAN SDIO 文件系统 USB等,难度太大了,我陷入其中,无法自拔。


    3次学习STM32

    培训地点: 河南老家,时间2021年,学习方式:线上。

     

    学了单片机两个月了,以流水灯为例,学到了前两次所没有学到的东西,因此感悟大不相同。

     

    1. 对寄存器的操作,就是往正确的地址写或读正确的数据。有点像送快递的,找到地址送或收快递。

     

    2. 能够被编译器发现的错误,解决比较容易,而能通过编译,却不能实现期望的功能,这种错误往往要费点时间,这个需要单步仿真,查看寄存器或变量值,此便对错误进行定位,因此必须缩小代码的范围,从工程到文件,到函数,到语句,这个有点像修电路板,从电路板到单元电路,最终找到坏的那个元器件。有些情况下,即便通过单步调试,但当整个程序运行时,还是无法实现功能。这时,还要对程序进行优化,直到实现期望的功能。自己的程序出现错误,自己检查几遍都检查不出来,但是交给别人,别人很快就能找到问题,可是问题来了,自已必须具备查错的能力,因为别人不可能总为你查错。

     

    3.即然编译器可以把C语言翻译为汇编语言,那么写程序的人也能够这样,汇编语言有一定的难度,不是面向人的,那么就可以用面向人的C语言,去翻译成汇编语言,用C语言作为桥梁,就可以大大降低难度。不得不承认,汇编语言在一些场合,还是要用到的,无法替代,例如有的8位单片机,或者FOC中。以前,我认为学习单片机,跳过汇编语言,跳过寄存器,是一种好的方法,但事实并非如此!而操作寄存器是一种通用的方法,不受库函数的依赖,换了单片机,依旧可以很快上手!

     

    我感觉这两个月确实收获很大,报这个单片机线上班我觉得很值,比前两个靠谱多了,因为我发现:我再也不用走弯路了!

     

     

     

                                                                       河南学员

       2021/3/26


    收藏 0 回复 0 浏览 101
  • 【重磅】在这 一芯难求 各种涨价的时代,STM32G0闪亮登场了........

    由于芯片制造工艺的区别,STM32G0被委以重任,撑起一片天,据我从官方了解的情况可以得出一个结论,不管从价格上还是从性能上STM32G0都可以用来代替STM32F0,我们话不多说直接来看看它的区别:

    一:我们从外部封装引脚上来看

    1.jpg 

    G0没有F0的100PIN的封装,但是它增加了SO8封装的引脚,这样的话性能很强大,价格很有诱惑力,极具性价比。


    二:我们从外设配置资源来看:

     2.jpg

     

    1. 内核更高级:F0:Cortex-M0内核,主频高达48MHZ;G0:Cortex-M0+内核,主频高达64MH,主频高,程序运行更快!

    2. G0的FLASH存储器方面有缩小,SRAM方面有扩展。

    4.  ADC速率更高,F0:ADC时钟频率提高到14Mhz,G0:ADC时钟频率提高到16Mhz,G0的AD模拟采样转换速率更快。举例:(1.5为采样周期,12.5为转换周期)

    G0:With ADC_CLK = 16 MHz and a sampling time of 1.5 ADC clock cycles:

    Tconv = 1.5 + 12.5 = 14 ADC clock cycles = 0.875 µs

    F0:With ADC_CLK = 14 MHz and a sampling time of 1.5 ADC clock cycles:

    Tconv = 1.5 + 12.5 = 14 ADC clock cycles = 1 µs

    5.  外设资源更丰富,增加了AES加密单元、普通定时器单元、硬件随机数RNG单元、DMA多路复用请求仲裁单元,可编程映射DMA请求,好处是使DMA通道对应的外设更加灵活,不再受限、低功耗串口等,更加安全高效。当然相比之下也有牺牲,比如说全速USB2.0,串口数量、CAN等。


    三:我们从系统架构上来瞧瞧看:

    3.jpg

    4.jpg

    1. F0的AHB2总线消失了,引入了新的IOPORT总线,STM32F0的GPIO Ports由总线矩阵通过AHB2总线访问,STM32G0的GPIO Ports直接挂在IOPORT总线上CPU可直接访问,速度更快!


    5.jpg 

    2. STM32F0的外部中断EXIT模块由总线矩阵通过AHB1总线->(AHB->APB桥)来访问,STM32G0的外部中断EXIT模块由总线矩阵通过AHB1总线直接访问,速度更快!


    四:从时钟来看:

    6.jpg 

    由于内核使用区别,两款芯片的RCC时钟也略有区别,如上图所示,主要体现在内部的时钟资源及频率差异,最大主频差异以及复位后的系统时钟频率差异。


    五:从电源供电来看

     

    7.jpg 

    供电电压范围更宽,G0:1.6V-3.6V    F0:1.8V-3.6V,相比之下G0的低功耗睡眠模式更加出色。


    六:最后跟大家看一下M0和M0+内核的区别

    8.jpg 

     

    除了上面展示的内容之外,还有部分区别未展示,比如说中断向量表的内容有改变,G0支持向量表位置重定义、低功耗改善等等、其中不得不提到一点相比F0,G0增加了内部外设的互联功能,通过配置外设中间可直接互联,可以减小CPU额外开销!


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