精华内容
下载资源
问答
  • PCB板子的制作建议

    2021-05-08 18:57:26
    PCB板子的制作建议第一:前期准备。这包括准备元件库和原理图。“工欲善其事,必先利其器”,要做出一块好的板子,除了...自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。
  • 首先说的是覆铜的时候是网格好还是全铜好,大的板子,网格铜好,因为全铜在受到外力的时候会保持翘曲情况,网格的就不会保持~会恢复到原来的平整情况,一般工艺边也留铜目的就是要保障板子的翘曲度。  IPC标准翘...
  • PCB板翘曲度介绍

    2021-01-19 23:54:54
    首先说的是覆铜的时候是网格好还是全铜好,大的板子,网格铜好,因为全铜在受到外力的时候会保持翘曲情况,网格的就不会保持~会恢复到原来的平整情况,一般工艺边也留铜目的就是要保障板子的翘曲度。  IPC标准翘...
  • 在Protel DXP中创建一个新PCB设计最简单方法是使用PCB向导,这将让你选择工业标准板轮廓又创建了你自定义的板子尺寸。在向导任何阶段,你都可以使用Back按钮来检查或修改以前页内容。要使用PCB向导来创建PCB...
  • pcb设计几点建议

    2020-11-06 16:13:40
    元件库可以用peotel 自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件...

    设计了如此多的PCB板了,现在给各位一些建议。
    第一:前期准备。这包括准备元件库和原理图。“工欲善其事,必先利其器”,要做出一块好的板子,除了要设计好原理之外,还要画得好。在进行PCB设计之前,首先要准备好原理图SCH的元件库和PCB的元件库。元件库可以用peotel 自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件库要求相对比较松,只要注意定义好管脚属性和与PCB元件的对应关系就行。PS:注意标准库中的隐藏管脚。之后就是原理图的设计,做好后就准备开始做PCB设计了。 
    第二:PCB结构设计。这一步根据已经确定的电路板尺寸和各项机械定位,在PCB 设计环境下绘制PCB板面,并按定位要求放置所需的接插件、按键/开关、螺丝孔、装配孔等等。并充分考虑和确定布线区域和非布线区域(如螺丝孔周围多大范围属于非布线区域)。
    第三:PCB布局。布局说白了就是在板子上放器件。这时如果前面讲到的准备工作都做好的话,就可以在原理图上生成网络表(Design-> Create Netlist),之后在PCB图上导入网络表(Design->Load Nets)。就看见器件哗啦啦的全堆上去了,各管脚之间还有飞线提示连接。然后就可以对器件布局了。一般布局按如下原则进行:
    ①.按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源);
    ②.完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁;同时,调整各功能块间的相对位置使功能块间的连线最简洁;
    ③.对于质量大的元器件应考虑安装位置和安装强度;发热元件应与温度敏感元件分开放置,必要时还应考虑热对流措施;
    ④.I/O驱动器件尽量靠近印刷板的边、靠近引出接插件;
    ⑤.时钟产生器(如:晶振或钟振)要尽量靠近用到该时钟的器件;
    ⑥.在每个集成电路的电源输入脚和地之间,需加一个去耦电容(一般采用高频性能好的独石电容);电路板空间较密时,也可在几个集成电路周围加一个钽电容。
    ⑦.继电器线圈处要加放电二极管(1N4148即可);
    ⑧.布局要求要均衡,疏密有序,不能头重脚轻或一头沉
    ——需要特别注意,在放置元器件时,一定要考虑元器件的实际尺寸大小(所占面积和高度)、元器件之间的相对位置,以保证电路板的电气性能和生产安装的可行性和便利性同时,应该在保证上面原则能够体现的前提下,适当修改器件的摆放,使之整齐美观,如同样的器件要摆放整齐、方向一致,不能摆得“错落有致” 。
    这个步骤关系到板子整体形象和下一步布线的难易程度,所以一点要花大力气去考虑。布局时,对不太肯定的地方可以先作初步布线,充分考虑。

    展开全文
  • PCB设计是一个考心思的工作,谁的心思密,经验高,设计出来的板子就好。...元件库可以用peotel自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做
    PCB设计是一个考心思的工作,谁的心思密,经验高,设计出来的板子就好。

    第一:准备阶段。这包括准备元件库和原理图。要做出一块好的板子,除了要设计好原理之外,画板也是很重要的一部分。在进行PCB设计之前,首先要准备好原理图SCH的元件库和PCB的元件库。元件库可以用peotel自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件库要求相对比较松,只要注意定义好管脚属性和与PCB元件的对应关系就行。(注意标准库中的隐藏管脚)。之后就是原理图的设计,做好后就准备开始做PCB设计了。

    第二:PCB结构设计。这一步根据已经确定的电路板尺寸和各项机械定位,在PCB设计环境下绘制PCB板面,并按定位要求放置所需的接插件、按键/开关、螺丝孔、装配孔等等。并充分考虑和确定布线区域和非布线区域(如螺丝孔周围多大范围属于非布线区域)。

    第三:PCB布局。布局说白了就是在板子上放器件。这时如果前面讲到的准备工作都做好的话,就可以在原理图上生成网络表(Design->CreateNetlist),之后在PCB图上导入网络表(Design->LoadNets)。就看见器件全堆上去了,各管脚之间还有飞线提示连接。然后就可以对器件布局了。一般布局按如下原则进行:
    ①.按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源);
    ②.完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁;同时,调整各功能块间的相对位置使功能块间的连线最简洁;
    ③.对于质量大的元器件应考虑安装位置和安装强度;发热元件应与温度敏感元件分开放置,必要时还应考虑热对流措施;
    ④.I/O驱动器件尽量靠近印刷板的边、靠近引出接插件;
    ⑤.时钟产生器(如:晶振或钟振)要尽量靠近用到该时钟的器件;
    ⑥.在每个集成电路的电源输入脚和地之间,需加一个去耦电容(一般采用高频性能好的独石电容);电路板空间较密时,也可在几个集成电路周围加一个钽电容。
    ⑦.继电器线圈处要加放电二极管(1N4148即可);
    ⑧.布局要求要均衡,疏密有序,不能头重脚轻或一头沉

    需要特别注意,在放置元器件时,一定要考虑元器件的实际尺寸大小(所占面积和高度)、元器件之间的相对位置,以保证电路板的电气性能和生产安装的可行性和便利性同时,应该在保证上面原则能够体现的前提下,适当修改器件的摆放,使之整齐美观,如同样的器件要摆放整齐、方向一致,不能摆得“错落有致”。
    这个步骤关系到板子整体形象和下一步布线的难易程度,所以一点要花大力气去考虑。布局时,对不太肯定的地方可以先作初步布线,充分考虑。

    第四:布线。布线是整个PCB设计中最重要的工序。这将直接影响着PCB板的性能好坏。在PCB的设计过程中,布线一般有这么三种境界的划分:首先是布通,这时PCB设计时的最基本的要求。如果线路都没布通,搞得到处是飞线,那将是一块不合格的板子,可以说还没入门。其次是电器性能的满足。这是衡量一块印刷电路板是否合格的标准。这是在布通之后,认真调整布线,使其能达到最佳的电器性能。接着是美观。假如你的布线布通了,也没有什么影响电器性能的地方,但是一眼看过去杂乱无章的,加上五彩缤纷、花花绿绿的,那就算你的电器性能怎么好,在别人眼里还是垃圾一块。这样给测试和维修带来极大的不便。布线要整齐划一,不能纵横交错毫无章法。这些都要在保证电器性能和满足其他个别要求的情况下实现,否则就是舍本逐末了。

    布线时:
    ①.一般情况下,首先应对电源线和地线进行布线,以保证电路板的电气性能。在条件允许的范围内,尽量加宽电源、地线宽度,最好是地线比电源线宽,它们的关系是:地线>电源线>信号线,通常信号线宽为:0.2~0.3mm,最细宽度可达0.05~0.07mm,电源线一般为1.2~2.5mm。对数字电路的PCB可用宽的地导线组成一个回路,即构成一个地网来使用(模拟电路的地则不能这样使用)
    ②.预先对要求比较严格的线(如高频线)进行布线,输入端与输出端的边线应避免相邻平行,以免产生反射干扰。必要时应加地线隔离,两相邻层的布线要互相垂直,平行容易产生寄生耦合。
    ③.振荡器外壳接地,时钟线要尽量短,且不能引得到处都是。时钟振荡电路下面、特殊高速逻辑电路部分要加大地的面积,而不应该走其它信号线,以使周围电场趋近于零;
    ④.尽可能采用45o的折线布线,不可使用90o折线,以减小高频信号的辐射;(要求高的线还要用双弧线)
    ⑤.任何信号线都不要形成环路,如不可避免,环路应尽量小;信号线的过孔要尽量少;
    ⑥.关键的线尽量短而粗,并在两边加上保护地。
    ⑦.通过扁平电缆传送敏感信号和噪声场带信号时,要用“地线-信号-地线”的方式引出。
    ⑧.关键信号应预留测试点,以方便生产和维修检测用
    ⑨.原理图布线完成后,应对布线进行优化;同时,经初步网络检查和DRC检查无误后,对未布线区域进行地线填充,用大面积铜层作地线用,在印制板上把没被用上的地方都与地相连接作为地线用。或是做成多层板,电源,地线各占用一层。

    PCB布线工艺要求
    ①.线
    一般情况下,信号线宽为0.3mm(12mil),电源线宽为0.77mm(30mil)或1.27mm(50mil);线与线之间和线与焊盘之间的距离大于等于0.33mm(13mil),实际应用中,条件允许时应考虑加大距离;
    布线密度较高时,可考虑(但不建议)采用IC脚间走两根线,线的宽度为0.254mm(10mil),线间距不小于0.254mm(10mil)。特殊情况下,当器件管脚较密,宽度较窄时,可按适当减小线宽和线间距。

    ②.焊盘(PAD)
    焊盘(PAD)与过渡孔(VIA)的基本要求是:盘的直径比孔的直径要大于0.6mm;例如,通用插脚式电阻、电容和集成电路等,采用盘/孔尺寸1.6mm/0.8mm(63mil/32mil),插座、插针和二极管1N4007等,采用1.8mm/1.0mm(71mil/39mil)。实际应用中,应根据实际元件的尺寸来定,有条件时,可适当加大焊盘尺寸;
    PCB板上设计的元件安装孔径应比元件管脚的实际尺寸大0.2~0.4mm左右。

    ③.过孔(VIA)
    一般为1.27mm/0.7mm(50mil/28mil);
    当布线密度较高时,过孔尺寸可适当减小,但不宜过小,可考虑采用1.0mm/0.6mm(40mil/24mil)。

    ④.焊盘、线、过孔的间距要求
    PADandVIA :≥0.3mm(12mil)
    PADandPAD :≥0.3mm(12mil)
    PADandTRACK :≥0.3mm(12mil)
    TRACKandTRACK :≥0.3mm(12mil)
    密度较高时:
    PADandVIA :≥0.254mm(10mil)
    PADandPAD :≥0.254mm(10mil)
    PADandTRACK :≥ 0.254mm(10mil)
    TRACKandTRACK :≥ 0.254mm(10mil)

    第五:布线优化和丝印。“没有最好的,只有更好的”!不管你怎么挖空心思的去设计,等你画完之后,再去看一看,还是会觉得很多地方可以修改的。一般设计的经验是:优化布线的时间是初次布线的时间的两倍。感觉没什么地方需要修改之后,就可以铺铜了(Place->polygonPlane)。铺铜一般铺地线(注意模拟地和数字地的分离),多层板时还可能需要铺电源。时对于丝印,要注意不能被器件挡住或被过孔和焊盘去掉。同时,设计时正视元件面,底层的字应做镜像处理,以免混淆层面。

    第六:网络和DRC检查和结构检查。首先,在确定电路原理图设计无误的前提下,将所生成的PCB网络文件与原理图网络文件进行物理连接关系的网络检查(NETCHECK),并根据输出文件结果及时对设计进行修正,以保证布线连接关系的正确性;
    网络检查正确通过后,对PCB设计进行DRC检查,并根据输出文件结果及时对设计进行修正,以保证PCB布线的电气性能。最后需进一步对PCB的机械安装结构进行检查和确认。

    第七:制版。在此之前,最好还要有一个审核的过程。

    PCB设计时要极其细心,充分考虑各方面的因数,精益求精,就一定能设计出一个好板子。
    展开全文
  • 对于立志当电工的筒子们来说,画板是门硬武艺,不练就不成功,就算你能记下MOS管的所有特性曲线...元件库可以用peotel 自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则
  • 我发现30%的Sirayatech Tenacious和70%的标准Shine Tough Gray混合效果很好,我赞成这种方法。对于标准树脂,类ABS甚至是共混物,如果将“韧性”限制为30%,则可以使用相当普通的曝光和支持设置。 最后,轮胎!我...
  • 标准用户界面-即时响应: Q键退出P键查看alg /逐步查看alg /隐藏alg L键查看迷宫生成器/隐藏迷宫生成器工作休息-仅在图形创建模式下响应(在Alg工作期间不可用): 使用O键是否使用对角线锥体R键重设alg但保留板子...
  • E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5×3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。 E53扩展板是...

    1.E53_SC1扩展板及其驱动

    关于E53标准接口

    E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5×3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。

    E53扩展板是根据不同的应用场景来设计的,以最大的程度在扩展板上还原真实应用场景,不同案例的扩展板根据不同的应用场景来命名后缀。例如:E53_SC1,SC是智慧城市(Smart City)的缩写,SC1表示的是智慧城市中的智慧路灯,再比如SC2则表示的是智慧城市中的智慧井盖。

    E53扩展接口在电气特性上,包含了常用的物联网感知层传感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以适配各种传感器,还留有4个普通GPIO,如图:

    E53接口电气特性

    E53_SC1智慧路灯扩展板

    E53_SC1扩展板采用了E53标准接口,包含了一个路灯灯珠,一个BH1750光照强度传感器,其中路灯灯珠使用普通GPIO控制,BH1750使用IIC接口通信。

    E53_SC1扩展板

    如果你对该扩展板或者BH1750光照强度的驱动不熟悉,请先阅读嵌入式基础教程

    2. 移植E53_SC1驱动到LiteOS

    复制裸机驱动文件到LiteOS工程

    E53_SC1扩展板上的 BH1750 光照强度传感器使用的是 IIC 通信接口,所以除了复制 STM32CubeMX 生成的i2c.hi2c.h文件,还需要在此基础上复制包含了 BH1750 传感器驱动的 E53_SC1 扩展板驱动文件。

    在复制文件的时候,按照上一篇文章中所说的,复制i2c.h到Inc 文件夹,复制i2c.c到 Src 文件夹,再复制自己编写的驱动文件E53_SC1.cE53_SC1.h到 Hardware文件夹。

    IoT-Studio中提供的默认工程已经复制好了这些文件,无需再次添加,如图:

    E53_SC1扩展板驱动

    添加驱动文件路径

    因为 LiteOS 的整个项目工程使用 make 构建,所以复制驱动文件之后,需要添加驱动文件的路径到 makefile 中,加入编译。

    project.mk文件指明了工程中所有文件的路径:

    project.mk文件

    在该文件中:

    • C文件路径
      • HARDWARE_SRC:对应Hardware文件夹下的Src文件夹
      • USER_SRC:对应Src文件夹
    • 头文件路径
      • HARDWARE_INC:对应Hardware文件夹下的Inc文件夹
      • USER_INC:对应Inc文件夹

    如下,E53_SC1 驱动的底层 I2C 接口代码i2c.c路径添加到USER_SRC中:

    I2C驱动代码

    E53_SC1 驱动的底层 I2C 接口代码i2c.h路径添加到USER_INC中:

    I2C驱动头文件路径

    基于 I2C 驱动的 E53_SC1 驱动文件E53_SC1.c添加到HARDWARE_SRC中(默认未添加,需要手动添加):

    E53_SC1驱动文件

    基于 I2C 驱动的 E53_SC1 驱动文件E53_SC1.h添加到 HARDWARE_INC 中(默认未添加,需要手动添加):

    E53_SC1驱动头文件路径

    至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。

    3. E53_SC1裸机驱动的使用

    初始化E53_SC1扩展板

    在上一篇文章中详细的讲述了在LiteOS中初始化设备的两种方式:

    • 在系统启动调度之前初始化:设备在系统中随时可被任意任务使用
    • 在任务中初始化:设备一般只在该任务中被使用

    本文中移植的 E53_SC1 扩展板驱动,不需要多个任务去操作,只需要传感器数据采集任务操作即可,所以初始化放在数据采集任务中

    操作E53_SC1扩展板

    接下来首先创建一个文件夹(如果已有,不用再次创建),用于存放本系列教程实验的代码:

    新建文件夹

    文件夹名称

    在该文件夹中创建一个文件:

    创建Demo文件

    编写代码:

    #include <osal.h>
    #include "lcd.h"
    #include "E53_SC1.h"
    
    /* 存放E53_SC1扩展板传感器数据,可在E53_SC1.h中查看定义 */
    E53_SC1_Data_TypeDef E53_SC1_Data;
    
    /* 用于数据采集和数据处理任务间同步的信号量 */
    osal_semp_t sync_semp;
    
    /* 数据采集任务-低优先级 */
    static int data_collect_task_entry()
    {
        /* 初始化扩展板 */
        Init_E53_SC1();
    
        while (1)
        {
            /* 读取扩展板板载数据,存到数据结构体E53_SC1_Data中 */
            E53_SC1_Read_Data();
    
            /* 数据读取完毕,释放信号量,唤醒数据处理任务 */
            osal_semp_post(sync_semp);
    
            /* 任务睡眠2s */
            osal_task_sleep(2*1000);
        }
    }
    
    /* 数据处理任务-高优先级 */
    static int data_deal_task_entry()
    {
        /* lux- 当次数据,old-lux-上次数据 */
        int lux = 0, old_lux = 0;
    
    	/* LCD清屏,防止干扰显示 */
        LCD_Clear(WHITE);
    
        while (1)
        {
            /* 等待信号量,未等到说明数据还未采集,阻塞等待 */
            osal_semp_pend(sync_semp, cn_osal_timeout_forever);
    
            /* 信号量等待,被唤醒,开始处理数据 */
            old_lux = lux;
            lux = (int)E53_SC1_Data.Lux;
            printf("BH1750 Value is %d\r\n", lux);
            LCD_ShowString(10, 100, 200, 16, 16, "BH1750 Value is:");
            LCD_ShowNum(140, 100, lux, 5, 16);
    
            /* 阈值为1000,自动点亮或者熄灭路灯 */
            if(old_lux < 1000 && lux > 1000)
            {
                HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_RESET);
                printf("Street Light OFF!\r\n");
            }
            else if(old_lux > 1000 && lux < 1000)
            {
                HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_SET);
                printf("Street Light ON!\r\n");
            }
        }
    }
    
    /* 标准demo启动函数,函数名不要修改,否则会影响下一步实验 */
    int standard_app_demo_main()
    {
        /* 创建信号量 */
        osal_semp_create(&sync_semp, 1, 0);
    
        /* 数据处理任务的优先级应高于数据采集任务 */
        osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3);
        osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2);
        return 0;
    }
    
    

    然后按照之前的方法,在 user_demo.mk 中将lcd_driver_demo.c文件添加到makefile中,加入编译:

    user_demo.mk文件

    最后在.sdkconfig中配置开启宏定义:

    .sdkconfig文件

    编译,烧录,即可看到实验现象。

    LCD屏幕上显示当前传感器采集的亮度值,并且每2s更新一次,当亮度值低于1000时,E53_SC1扩展板的路灯自动点亮:

    路灯自动点亮

    当亮度值高于1000时,E53_SC1扩展板的路灯自动熄灭:

    路灯自动熄灭

    另外,打开IoT-Studio自带的串口终端,可以查看到串口输出的工作信息:

    linkmain:V1.2.1 AT 10:40:09 ON Dec  5 2019 
    
    BH1750 Value is 220
    WELCOME TO IOT_LINK SHELL
    
    LiteOS:/>BH1750 Value is 612
    BH1750 Value is 566
    BH1750 Value is 14109
    Street Light OFF!
    BH1750 Value is 14814
    BH1750 Value is 178
    Street Light ON!
    BH1750 Value is 179
    ……
    

    关注“小熊派开源社区”微信公众号,回复“LiteOS内核实战”获取实战源代码。

    展开全文
  • E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5×3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。 E53扩展板是...

    1.E53_IA1扩展板及其驱动

    关于E53标准接口

    E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5×3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。

    E53扩展板是根据不同的应用场景来设计的,以最大的程度在扩展板上还原真实应用场景,不同案例的扩展板根据不同的应用场景来命名后缀。例如:E53_SC1,SC是智慧城市(Smart City)的缩写,SC1表示的是智慧城市中的智慧路灯,再比如SC2则表示的是智慧城市中的智慧井盖。

    E53扩展接口在电气特性上,包含了常用的物联网感知层传感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以适配各种传感器,还留有4个普通GPIO,如图:

    E53接口电气特性

    E53_IA1智慧农业扩展板

    E53_IA1扩展板采用了E53标准接口,包含了一个补光灯,一个BH1750光照强度传感器,一个小的贴片电机,一个温湿度传感器SHT30,一个其中补光灯和贴片电机使用普通GPIO控制,BH1750和SHT30使用IIC接口通信。

    E53_IA1扩展板

    如果你对该扩展板板载的BH1750光照强度和温湿度传感器驱动不熟悉,请先阅读嵌入式基础教程

    2. 移植E53_IA1驱动到LiteOS

    复制裸机驱动文件到LiteOS工程

    E53_IA1扩展板上的 BH1750 光照强度传感器和SHT30温湿度传感器使用的是 IIC 通信接口,所以除了复制 STM32CubeMX 生成的i2c.hi2c.h文件,还需要在此基础上复制包含了 BH1750 传感器驱动和SHT30传感器驱动的 E53_IA1 扩展板驱动文件。

    在复制文件的时候,按照上一篇文章中所说的,复制i2c.h到Inc 文件夹,复制i2c.c到 Src 文件夹,再复制自己编写的驱动文件E53_IA1.cE53_IA1.h到 Hardware文件夹。

    IoT-Studio中提供的默认工程已经复制好了这些文件,无需再次添加,如图:

    E53_IA1扩展板驱动

    添加驱动文件路径

    因为 LiteOS 的整个项目工程使用 make 构建,所以复制驱动文件之后,需要添加驱动文件的路径到 makefile 中,加入编译。

    project.mk文件指明了工程中所有文件的路径:

    project.mk文件

    在该文件中:

    • C文件路径
      • HARDWARE_SRC:对应Hardware文件夹下的Src文件夹
      • USER_SRC:对应Src文件夹
    • 头文件路径
      • HARDWARE_INC:对应Hardware文件夹下的Inc文件夹
      • USER_INC:对应Inc文件夹

    如下,E53_IA1 驱动的底层 I2C 接口代码i2c.c路径添加到USER_SRC中:

    I2C驱动代码

    E53_IA1 驱动的底层 I2C 接口代码i2c.h路径添加到USER_INC中:

    I2C驱动头文件路径

    因为SC1和IA1的驱动中都包含BH1750的驱动,所以添加的时候需要注意去掉E53_SC1 的驱动文件E53_SC1.cE53_SC1.h,否则会引起冲突。

    基于 I2C 驱动的 E53_IA1 驱动文件E53_IA1.c添加到HARDWARE_SRC中(默认未添加,需要手动添加):

    E53_IA1驱动文件

    基于 I2C 驱动的 E53_IA1 驱动文件E53_IA1添加到 HARDWARE_INC 中(默认未添加,需要手动添加):

    E53_IA1驱动头文件路径

    至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。

    3. E53_IA1裸机驱动的使用

    初始化E53_IA1扩展板

    在第一篇文章中详细的讲述了在LiteOS中初始化设备的两种方式:

    • 在系统启动调度之前初始化:设备在系统中随时可被任意任务使用
    • 在任务中初始化:设备一般只在该任务中被使用

    本文中移植的 E53_IA1 扩展板驱动,不需要多个任务去操作,只需要传感器数据采集任务操作即可,所以初始化放在数据采集任务中

    操作E53_IA1扩展板

    接下来首先创建一个文件夹(如果已有,不用再次创建),用于存放本系列教程实验的代码:

    新建文件夹

    文件夹名称

    在该文件夹中创建一个文件:

    创建Demo文件

    编写代码:

    #include <osal.h>
    #include "lcd.h"
    #include "E53_IA1.h"
    
    /* 存放E53_IA1扩展板传感器数据,可在E53_IA1.h中查看定义 */
    E53_IA1_Data_TypeDef E53_IA1_Data;
    
    /* 用于数据采集和数据处理任务间同步的信号量 */
    osal_semp_t sync_semp;
    
    /* 数据采集任务-低优先级 */
    static int data_collect_task_entry()
    {
        /* 初始化扩展板 */
        Init_E53_IA1();
    
        while (1)
        {
            /* 读取扩展板板载数据,存到数据结构体E53_IA1_Data中 */
            E53_IA1_Read_Data();
    
            /* 数据读取完毕,释放信号量,唤醒数据处理任务 */
            osal_semp_post(sync_semp);
    
            /* 任务睡眠2s */
            osal_task_sleep(2*1000);
        }
    }
    
    /* 数据处理任务-高优先级 */
    static int data_deal_task_entry()
    {
        /* lux- 当次数据,old-lux-上次数据 */
        int lux = 0, old_lux = 0;
        int temperature = 0, old_temperature = 0;;
        int humidity;
    
        /* LCD清屏,防止干扰显示 */
        LCD_Clear(WHITE);
    
        while (1)
        {
            /* 等待信号量,未等到说明数据还未采集,阻塞等待 */
            osal_semp_pend(sync_semp, cn_osal_timeout_forever);
    
            /* 信号量等待,被唤醒,开始处理数据 */
            //处理光照强度
            old_lux = lux;
            lux = (int)E53_IA1_Data.Lux;
            printf("BH1750 Value is %d\r\n", lux);
            LCD_ShowString(10, 100, 200, 16, 16, "BH1750 Value is:");
            LCD_ShowNum(140, 100, lux, 5, 16);
    
            /* 光照阈值为1000,自动点亮或者熄灭路灯 */
            if(old_lux < 1000 && lux > 1000)
            {
                HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
                printf("Light OFF!\r\n");
            }
            else if(old_lux > 1000 && lux < 1000)
            {
                HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
                printf("Light ON!\r\n");
            }
    
            //处理湿度数据
            humidity = E53_IA1_Data.Humidity;
            printf("Humidity is %d\r\n", humidity);
            LCD_ShowString(10, 120, 200, 16, 16, "Humidity: ");
            LCD_ShowNum(140, 120, humidity, 5, 16);
    
            //处理温度数据
            old_temperature = temperature;
            temperature = E53_IA1_Data.Temperature;
            printf("Temperature is %d\r\n", temperature);
            LCD_ShowString(10, 140, 200, 16, 16, "Temperature: ");
            LCD_ShowNum(140, 140, temperature, 5, 16);
    
            /* 温度阈值为30,自动开启或者关闭电机 */
            if(old_temperature < 30 && temperature >= 30)
            {
                HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
                printf("Motor ON!\r\n");
            }
            else if(old_temperature >= 30 && temperature < 30)
            {
                HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
                printf("Motor OFF!\r\n");
            }
        }
    }
    
    /* 标准demo启动函数,函数名不要修改,否则会影响下一步实验 */
    int standard_app_demo_main()
    {
        /* 创建信号量 */
        osal_semp_create(&sync_semp, 1, 0);
    
        /* 数据处理任务的优先级应高于数据采集任务 */
        osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3);
        osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2);
        return 0;
    }
    
    

    然后按照之前的方法,在 user_demo.mk 中将e51_ia1_driver_demo.c文件添加到makefile中,加入编译:

    user_demo.mk文件

    最后在.sdkconfig中配置开启宏定义:

    .sdkconfig文件

    编译,烧录,即可看到实验现象。

    LCD屏幕上显示当前传感器采集的亮度值,温度值,湿度值,并且每2s更新一次。

    当亮度值低于1000时,E53_IA1扩展板的补光灯自动点亮:

    补光灯自动点亮

    当亮度值高于1000时,E53_IA1扩展板的补光灯自动熄灭:

    补光灯自动熄灭

    在调节温度的时候,可以用手按着SHT30温湿度传感器,天干物燥,务必提前触摸一下金属物体,释放静电,防止静电破坏传感器!

    当温度上升到30°的时候,电机自动启动,当温度降低到30°以下时,电机自动关闭。

    另外,打开IoT-Studio自带的串口终端,可以查看到串口输出的工作信息:

    linkmain:V1.2.1 AT 10:40:09 ON Dec  5 2019 
    
    BH1750 Value is 237
    Humidity is 19
    Temperature is 28
    WELCOME TO IOT_LINK SHELL
    
    LiteOS:/>BH1750 Value is 1074
    Light OFF!
    Humidity is 19
    Temperature is 29
    BH1750 Value is 14086
    Humidity is 20
    Temperature is 30
    Motor ON!
    BH1750 Value is 284
    Light ON!
    Humidity is 21
    Temperature is 30
    BH1750 Value is 303
    Humidity is 21
    Temperature is 29
    Motor OFF!
    ……
    
    展开全文
  • E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5cm*3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。 E53扩展板是根据...
  • PCB制造设备的标准尺寸为典型的24x24英寸。而用户尤其是电信用户则要求背板的尺寸更大。由此推动了对大尺寸板输送工具的确认和购置需求。设计人员为解决大引脚数连接器的走线问题不得不额外增加铜层,使背板层数增加...
  • E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5cm*3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。 E53扩展板是根据...
  • 元件库可以用peotel自带的库,但一般情况下很难找到合适的,是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件库要求...
  • AD常用封装库

    2019-04-17 16:19:37
    PCB封装中几乎所用都集成有STEP格式3D模型,其实这个STEP格式3D模型是后来我们用SOLIDWORKS做。在标准2D模式下画好板子后,进行3D预览时会看到器件自带3D效果。方便开发前的尺寸和外观评估
  • PCB基本设计流程详解

    2021-01-19 23:36:51
    元件库可以用peotel自带的库,但一般情况下很难找到合适的,是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件库要求...
  • 在Protel DXP中创建一个新PCB设计简单方法是使用PCB向导,这将让你选择工业标准板轮廓又创建了你自定义的板子尺寸。在向导任何阶段,你都可以使用Back按钮来检查或修改以前页内容。要使用PCB向导来创建PCB,...
  • PCB设计是一个考心思的工作,谁的心思密,经验高,设计出来的板子就好。更多交流可以私我132-60-56-20-29 ...元件库可以用peotel自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己...
  • 4、PCB 板子双面镀金,尺寸:28(mm)x14(mm) ADXL345传感器电路PCB实物展示: ADXL345模块IIC测试程序: 附件内容截图: 实物购买链接:https://detail.tmall.com/item.htm?spm=a1z10.3-b.w4011-8679163093.55.zMe2K7&...
  • 主板外观:蓝色,标准尺寸 Atemega328P熔丝位配置信息如下: ############################################################## uno.name=Arduino Uno uno.upload.protocol=arduino uno.upload.maximum_size=32256 uno...
  • PCB制作经验总结

    2021-01-20 11:16:51
    2.用AD封装向导创建类似QFN封装时,AD会自动生成一些过孔,而这些过孔的尺寸不一定满足pcb制造厂加工标准,我们需要自行修改过孔的尺寸。 3.自己画原理图时候一定要非常仔细,要检查原理图和封
  • 这个板子的两个网口是并行连接的。 一、板子尺寸:长72mmX宽64mmX高12mm 二、主要器件:RJ45接口、端子 三、工作电压:RJ45电压 四、板子功耗:LED功耗小于200mA 五、特点:  1、具有信号指示功能。  2、引出所有...
  • 第一:前期准备。这包括准备元件库和原理图。“工欲善其事,必先利其器”,要做出一块好的板子,除了要设计好原理...元件库可以用peotel自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸
  • PCB布线设计与制造流程

    千次阅读 2008-01-01 22:32:00
    元件库可以用自带的库,但一般情况下很难找到合适的,最好是根据所选器件的标准尺寸资料自己动手做元件。原则上先做PCB的元件库,再做SCH的元件库。PCB的元件库要求较高,它直接影响板子的安装;SCH的元件库要求相对...
  • PCB布线流程必看

    2015-01-19 14:48:34
    电子工程师应该明白的pcb布线流程。。...元件库可以用peotel自带的库,但一般情况下很难找到合适的,最好是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB元件库,再做SCH的元件库。P
  • 对于立志当电工的筒子们来说,画板是门硬武艺,不练就不成功,就算你能记下MOS管的所有...元件库可以用peotel 自带的库,但一般情况下很难找到合适的,是自己根据所选器件的标准尺寸资料自己做元件库。原则上先做PCB
  • Arduino学习笔记(6) -- 使用GPS模块

    万次阅读 多人点赞 2019-01-06 14:35:47
    本文介绍了在Arduino板子上使用现有GPS模块,并对采集来GPS标准语言NMEA信息进行提取加工,得到最终位置信息。 原材料: 1、Arduino开发板及附件 2、1575R-A GPS模块 3、杜邦线若干 如图: 1. 1575R-A...
  • •视频播放增强的图形和音频,支持的主要硬件构建块多媒体正在成为许多PC的标准;在入门级,这些功能很快成为商品。为了降低对美元高度敏感的细分市场的成本,将这些功能迁移到主板本身。 ATX规范是作为行业开放...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

板子的标准尺寸