Linux嵌入式开发入门(二)——快速看懂原理图,对接软件开发新葡萄京娱乐:

新葡萄京娱乐 1

这里只是为了看懂原理图,不牵扯具体的计算等内容(比如电路电流多少啊,三极管放大等等)。因为对于嵌入式开发人员来说,只需要明白不同的电平对于开发板的结果即可,不需要知道具体电路的情况。

因项目需要,测试了两家的几款灯光控制器,都是rs232串口程序控制的。测试方法可供参考。

微机原理:侧重于讲计算机结构
数字电子技术基础:侧重于门电路

图:测试的控制器

  • GPIO和门电路
    • GPIO类
      GPIO:通用的输入输出端口,可以通过输入来测量外界的电平情况;可以通过输出来控制电路

测试目的及方法

新葡萄京娱乐 2

因为项目上碰到的坑,本测试主要关心速度方面的。包括:

只要上面的2440芯片对应的引脚应该为输出引脚。如果对应的输出引脚输出3.3V的高电平LED就会被点亮;如果输出引脚输出低电平(0V),那么LED则不亮

测试方法:

新葡萄京娱乐 3

图:测试环境

以上的线路很简单,开关闭合线路接通有电流;开关打开,线路不导通,无电流。
如果在开关打开的前提下,A点使用万用表测量,电压应该为3.3v,因为,如果此时这里不为3.3V与之相连的上方为3.3V就会形成电流,与实际不符;如果此时开关闭合,那么该线路是接通状态,应该有电流流过,那么此时,A点的电流应该为0V。

传感器使用硅光电池。其响应时间估计在微秒级,对这个测试是足够快的。

那么如果把万用表换成2440芯片会得到。

图:硅光电池

新葡萄京娱乐 4

本测试的示波器截图中,绿色通道表示发出串口命令的时间,高电平为开,低电平为关。黄色通道为硅光电池的电压。

那么此时2440对应的引脚应该为输入引脚,通过读取该引脚对应的寄存器中的数据,就可以知道该引脚为高电平还是低电平。如果读到了高电平,说明此处为3.3V电路没有接通了如果读到了低电平,说此处为0V,说明电路接通了。以此可以判断开关的开闭情况。

响应延迟

对于现在的芯片的引脚来说,既可以作为输入引脚,同样也可以作为输出引脚。可以通过配置其中参数的某一位(具体参照手册)的方法来改变其功能。
输出引脚,写值到某个寄存器中
输入引脚,读某个寄存器中的值。

灯亮时亮度都设为50(最大值都是255); 灯灭时亮度设为0(h款没有关的功能)或直接对应于关。

实际原理图

l款:实测在约10-12ms后灯光会亮,灯光灭的动作虽然也是从10-12秒开始,但灯灭的反应不是那么陡峭,大概需要18ms才能完全熄灭。

新葡萄京娱乐 5

l款的命令是8个字节。9600的波特率传输8个字符理论上也需要约7ms. 所以这个延迟属于一个合理的水平。

LED处的原理图

图:开和关的响应延迟

新葡萄京娱乐 6

h款的响应延迟在50ms左右,要等亮度稳定下来,极端情况下要超过60ms。同样也是灯灭花的时间更多。

芯片引脚的原理图

图:开和关的响应延迟

由以上两幅图可以看出,LED由某一个引脚引入到芯片中。就可以找到对应的芯片中的引脚。通过该芯片手册就可以查到该如何操作。
由LED的原理图可以看出,三个控制LED的引脚的功能都不是为了检测电压,那么都是输出引脚,也就是如果输出了低电平,则LED被点亮;输出高电平,则灯会熄灭。

厂家说在完全关和亮之间切换,花的时间会比较多,多于亮度变化的时间。下图是用最低亮度1作为“关”进行的测试。可以看到改善并不显著,亮的时间少了约10ms,但暗下来的时间多了约20ms.

在芯片手册中查询该引脚的信息

图:开和暗的响应延迟

新葡萄京娱乐 7

最小命令间隔

查看到pin name为EINT3/GPF3 的引脚的pin number为M15

不断缩小发送命令的间隔,可以看到变化。

新葡萄京娱乐 8

比如,下图是l款12ms,可以看到基本是正常的。

可以看到该引脚既可以作为输入引脚也可以作为输出引脚

图:命令间隔12ms

新葡萄京娱乐 9

当间隔减至11ms时,从波形上可以看到有的命令来不及处理。肉眼也可看到闪烁节奏的偶尔变化。

可以在I/O port章节中看到,这一组引脚的应该如何配置

图:命令间隔11ms

那么如果将GPF的寄存器配置为EINT[4]时,则该引脚会成为中断引脚

这说明对于l款,12ms是最小的命令间隔。这个值和前面测的响应延迟基本相当。

新葡萄京娱乐 10

下面是h款的,50ms基本正常,

中断引脚举例

图:命令间隔50ms

对于假设2440外连接一个DM9000的网卡,如果网卡收到了数据,如何来通知2440芯片呢?如果定时让2440去查询DM9000,是一个非常耗费资源的工作,那么这时候,如果把对应的引脚设置为中断引脚,只要DM9000获得了数据,就把想2440的中断引脚输出高电平,2440得到高电平后,向CPU发送中断信号,以执行相应的操作即可。
中断引脚,有输入功能,可以中断CPU(同样可以通过GPFDAT来获得数据已得到是否中断,但是比较耗费资源)

40ms时,命令看起来没有遗漏。但有些在没有完全灭时就开始下一个周期了。

GPFCON就是配置GPF引脚的内存地址为0x56000050

图:命令间隔40ms

参照接下面的表格可以看出,对于GPF4来说,需要操作8、9两位来控制该引脚的输入输出功能。具体的设置情:
00 = Input 01 = Output 10 = EINT[4] 11 = Reserved

30ms时,命令应该也没有遗漏,但灯基本上没有灭下来。

那么如何设置该引脚输出低电平来点亮LED呢?
在GPFDAT中可以看到数据配置信息的地址为:0x56000054

图:命令间隔30ms

新葡萄京娱乐 11

所以对于h款,比较安全的命令间隔还是应该在50ms以上。

GPFDAT配置

灯光频闪

可以看到,如果配置为输入引脚,那么对应的位中的数据就是读取到的数据,也就是读到1为高电平,读到0为低电平。如果配置为输出引脚,如果写入1为输出高电平,如果写入0则输出低电平。

前面的波形中可以看到,对于l款,高电平特别粗。其实这是因为灯光有频闪。我们可以顺便测试一下。

在手册中不难看出,还有一个GPFUP

方法很简单,将灯打到常开,用示波器的更高档查看其波形的交流分量。可以看到频闪频率大约90khz。这对调光led是一个正常的水平。

新葡萄京娱乐 12

图:l款灯光频闪

GPFUP

对于h款,则没有频闪。这可能是因为它用的恒流驱动模式。

这个是上拉电阻的意思,至于上拉电阻的问题,还需要看看三极管。

图:h款灯光无频闪

新葡萄京娱乐 13

作为对比,绿色线是树莓派gpio的低电平,可以看到其噪声的大小。而灯光的波动比它小得多,可见灯光控制器电源和驱动还是不错的。

NPN三极管

测试程序

对于NPN三极管来说,如果此时2440芯片的引脚为输出引脚,并且输出的为低电平,那么此时,三极管处于不导通的状态。但是对于三极管另外一个管脚来说,状态未知,所以,在此管脚上接通一个电阻,以方便得到他的状态。
那么此时,如果输出一个低电平,三极管不导通,那么,此时的输入管脚会得到一个高电平。而反之,如果输出为高电平,那么输入会得到一个低电平。所以输出和输入为反相的情况。

测试程序放在github上:

那么引脚的上拉功能是什么呢?可以假设在芯片内部存在一个上拉电阻,当寄存器设置为1则该电阻不通电。

在python环境下运行。测命令延迟需要一个电平作为对比,所以用了树莓派。除此之外,其它测试其实是可以在pc上完成的。

新葡萄京娱乐 14

图:测试程序

假设这样的电路,其中上拉电阻是位于芯片内部的,对应的引脚是输入引脚,如果上拉电阻设置为断开,此时开关也不打开,对于中间一段电路来说是“悬空的”,无法获取其中的电路。
如果此时设置了上拉功能,就出现了图上的情况,是一个完整的电路,也就可以测量出芯片外的电平情况。如果获取到的信息为高电平说明开关未被按下;如果获取低电平,说明此时形成了回路,开关被按下。

小结

上拉电阻的作用,对于输入引脚,可以用它来确定电平状态。

本文对容易被忽视的rs232灯光控制器的程控速度和响应做了定量的测试。命令响应延迟和连续命令的最小间隔基本上相当。

还存在一种下拉电阻的情况

l款的表现属于正常水平,也符合串口通讯的中端定位。

新葡萄京娱乐 15

h款的电源和灯光驱动做得不错,完全无频闪。但通讯和处理速度上太慢。基本上只能用在低速切换的场合。但这产品定位就有点矛盾。无频闪固然好,但对于非超高速摄影,90khz的频闪是完全够用的。

PNP三极管和上拉电阻

另外,h款的串口接口用目前通用的usb转串口线不能连接。l款的可以直接用。尽管rs232的rx和tx也是挺混乱的,但目前市场上的主流线缆也是一种事实标准,和它匹配会比较方便。还有,l款使用数显和数调,程控和手动是完全同步的,而h款还是多旋钮的方式。两种方式各有利弊,但数显数调更符合潮流一些。

对于PNP类型的三极管来说,如果2440芯片输出低电平,那么此时三极管处于导通的状态,此时输入能够得到一个高电平;那么反之,如果输出是一个高电平,三极管不导通,那么此时输入会得到低电平。

综上,感觉h家的这款产品在接口和通讯上比同类产品落后了一代。希望厂家能及时改善,与时俱进,提升产品竞争力。

上拉电阻和下拉电阻的作用主要是为了,确定“悬空的引脚”的确定的状态。

  • 门电路
    • 非门
    ![](https://upload-images.jianshu.io/upload_images/5688965-1f9a23c066a5a17d.png)

    非门



    对于非门来说,如果2440输出高电平,在B端会得到低电平;反之,2440输出高电平,在B端会得到低电平

-   与门



    ![](https://upload-images.jianshu.io/upload_images/5688965-1a85571d77d367ed.png)

    与门

对于与门是对A1和A2做与运算B = A1 & A2,如果A1和A2中只要任意一个或者同时输出了低电平,那么B会输出低电平;如果A1、A2同时输出高电平,在B会得到高电平

- 或门

新葡萄京娱乐 16

或门

对于或门来说,就是对A1和A2做或运算,B = A1 || A2,当A1、A2中,只要输出至少一个高电平,对于B来说都会得到高电平。如果A1、A2同时输出低电平,那么B会得到低电平

 - 与非门

新葡萄京娱乐 17

与非门

- 或非门

新葡萄京娱乐 18

或非门

  • 协议类
    协议类遵循的原则:
    1.双方约定的信号协议(互相可以理解彼此的语言)
    2.双方满足是时序要求(语速别人可以理解)
![](https://upload-images.jianshu.io/upload_images/5688965-caf69779992c13ac.png)

开发板和PC串口连接示意图

-   UART串口(Universal Async Receive Transmit )
    -   UART如何传输数据  

        ![](https://upload-images.jianshu.io/upload_images/5688965-657e4353251feac4.png)

        UART协议发送8bits的数据的时序图

        1.  状态1:空闲。空现阶段为高电平

        -   状态2:起始位。2440数据时,让RxD0为低电平,并保持一段时间T;PC机接收到低电平,就得到了2440即将发送信息消息;需要保持的时间为事先约定好的T,没办法自动约定。
        -   状态3:停止位:保持高电平至少一个时间T。

我们不可能手动的发送电平,来和PC机通信。那么在2440上有一个串口控制器,我们只需要把串口控制器设置好,并且把数据发送给串口控制器即可,它会自动帮我们发送起始位、停止位、数据以及校验位的电平。

新葡萄京娱乐 19

2440芯片手册中的UART寄存器部分

由手册可以看到,2440芯片具有三个串口的寄存器。寄存器中数据的不同位分别表示了数据长度、停止位、校验位等信息。

新葡萄京娱乐 20

串口控制器数据段的寄存器

现在已经知道如何设置串口控制器的一些参数,以及数据应该放在哪个寄存器中。但是还有一个关键数据没有设置,那就是发送数据的速度——波特率

新葡萄京娱乐 21

波特率的寄存器设置

硬件上其实相对比较简单,最少只需要三条线即可完成串口,一条发送、一条接受还有一条参考地线。

  • I2C

新葡萄京娱乐 22

本文由新葡萄京娱乐发布于照明工业,转载请注明出处:Linux嵌入式开发入门(二)——快速看懂原理图,对接软件开发新葡萄京娱乐:

相关阅读