Jacktang

  • 2019-10-21
  • 发表了主题帖: 有关D类功放设计

    系统总体设计      本系统由高效率功率放大器(D类音频功率放大器)、信号变换电路、外接测试仪表组成。  D类功放设计 D类功率放大器由PWM电路、开关功放电路及输出滤波器组成。        采用了由比较器和三角波发生器组成的固定频率的PWM电路,用输入的音频信号幅度对三角波进行调制,得到占空比随音频输入信号幅度变化的方波,并以相反的相位驱动上下桥臂的功率管,使功率管一个导通时另一个截止,再经输出滤波器将方波转变为音频信号,推动扬声器发声。采用全桥的D类放大器可以实现平衡输出,易于改善放大器的输出滤波特性,并可减少干扰。全桥电路负载上的电压峰峰值接近电源电压的2倍,可采用单电源供电。实现时,通常采取2路输出脉冲相位相反的方法。 硬件电路设计 原理分析      当输入模拟音频信号时,模拟音频信号经过PWM调制器变成与其幅度相对应脉宽的高频率PWM脉冲信号,控制开关单元的开/关,经脉冲推动器驱动脉冲功率放大器工作,然后经过功率低通滤波器带动扬声器工作。 比较器     比较器电路采用低功耗、单电源工作的双路比较器芯片LM311构成。此处为提高系统效率,减少后级H桥中CMOS管不必要的开合,用两路偏置不同的三角波分别与音频信号的上半部和下半部进行比较,当正端上的电位高于负端的电位时,比较器输出为高电平,反之则输出低电平。这样产生两路相互对应的PWM波信号给后级驱动电路进行处理。  注意:        将上半部比较处理为音频信号接比较器的负向端、三角波信号接正向端;下半部比较则相反,这样形成相互对应,在音频信号的半部形成相应PWM波时,另半部为低电平,可保征后级H桥中的CMOS管没有不必要的开合,以减少系统功率损耗。电路以音频信号为调制波,频率为70kHz的三角波为载波,两路信号均加上2.5V的直流偏置电压,通过比较器进行比较,得到幅值相同,占空比随音频幅度变化的脉冲信号。 LM311芯片的供电电压为5V单电源,为给V+=V-提供2.5V的静态电位,取R10=R11,R8=R9,4个电阻均取10kΩ。由于三角波Vp-p=2V,所以要求音频信号的Vp-p不能大于2V,否则会使功放产生失真。由于比较器芯片LM311的输出级是集电极开路结构,输出端须加上拉电阻,上拉电阻的阻值采用1kΩ的电阻。 驱动电路、互补对称输出和低通滤波电路       将PWM信号整形变换成互补对称的输出驱动信号,用CD40106施密特触发器并联运用以获得较大的电流输出,送给由晶体三极管组成的互补对称式射极跟随器驱动的输出管,保证了快速驱动。驱动电路晶体三极管选用9012和9014对管。        H桥互补对称输出电路对VMOSFET的要求是导通电阻小,开关速度快,开启电压小。因输出功率稍大于1W,属小功率输出,可选用功率相对较小、输入电容较小、容易快速驱动的对管。        对滤波器的要求是上限频率≥20kHz,在通频带内特性基本平坦。互补PWM开关驱动信号交替开启Q6和Q8或Q12和Q10,分别经两个4阶巴特沃兹滤波器滤波后推动喇叭工作。 数据测试 1)通频带的测量:在放大器电压放大倍数为10,实测3dB通带的上、下边界频率值。通频带测试时应去掉测试用的RC滤波器。 2)最大不失真输出功率:放大倍数为10,输入1kHz正弦信号,用毫伏表测量放大器输出电压有效值,计算最大输出功率Po-max。 3)输入阻抗:在输入回路中串入10kΩ电阻,放大器输入端电压下降应小于50%。

  • 发表了主题帖: 电路中反馈及运放

    反馈:可描述为将放大电路的输出量(电压或电流)的一部分或全部,通过一定的方式送回放大电路的输入端。我们有时把引入反馈的放大电路称为闭环放大器,没有引入的称为开环放大器。 按正负反馈分:反馈输入信号能使原来的输入信号减小即为负反馈,反之则为正反馈。怎麽判断电路是正反馈还是负反馈呢? 这里采用的方法是瞬时极性法。先将反馈网络与放大电路的输入段断开,然后设定输入信号有一个正极性的变化,再接上反馈网络看反馈回来的量是正极性的还是负极性的,若是负极性,则表示反馈量是削弱输入信号,是负反馈,反之则为正反馈。负反馈对放大器性能才有改善,正反馈使放大器的性能变坏! 按直流交流反馈分:直流反馈常用于稳定直流工作点,交流反馈主要用于放大电路性能的改善。 按输入端取样分:分为电压反馈和电流反馈。 按输入端的连接方式分:串联反馈和并联反馈,它们对信号源的内阻Rs的要求是不同的。串联反馈要求Rs越小越好,并联反馈则要求Rs越大越好!负反馈放大电路可又四种组态:串联电压反馈;串联电流反馈;并联电压反馈;并联电流反馈。       运算放大器(常简称为“运放”)最早被发明作为模拟信号的运算单元,是模拟电子计算机的基本组成部件,由真空电子管组成。第一块集成运放电路是美国仙童(fairchild)公司发明的μA741,在60年代后期广泛流行。直到今天μA741仍然是各大学电子工程系中讲解运放原理的典型教材。       运放是具有很大开环增益和深度负反馈的放大器。输出信号是输入信号经某种数学运算的结果,故名。广泛用于模拟电子电路、仪器以及模拟计算机中。可以由分立的器件组成,也可以实现在半导体芯片当中。        简而言之,运算放大器是具有两个输入端,一个输出端,以极大的放大率将两输入端之间的电压放大之后,传递到输出端的一种放大器。在一个封装之中,放入一个运算放大器电路的称为单(Single)运算放大器,放入两个运算放大器电路称为双(Dual)运算放大器,放入四个运算放大器电路,称为四(Quad)运算放大器。

  • 发表了主题帖: 如何区分电压串联负反馈电路和电流串联负反馈电路

          负反馈放大电路从输出端的取样方式可以分为电压反馈和电流反馈 从输入端的接入电路的方式可以分为串联反馈和并联反馈。 最简单的区分方法是:若输出端的反馈取样点跟输出在同一点的话就是电压反馈,不在同一点的话就是电流反馈;在输入端,如果反馈信号和输入信号接在同一输入端的话就是以电流的形式参与计算,是电流负反馈,如果反馈信号和输入信号接在放大电路的不同端子上的话,那么就是以电压形式参与运算,是电压负反馈。 将负载短路,也就是将RL短路,如果反馈信号还存在,就是电流负反馈;如果反馈信号为0,就是电压负反馈。       而在运算放大器负反馈电路中,反馈引回到输入另一端则为串联反馈如图4,图中uD与uF串联连接;如果引回到输入另一端则为并联反馈如图5,图中iD与iF并联连接。 (2)电压电流的判断      电压电流反馈是指反馈信号取自输出信号(电压或电流)的形式。电压反馈以图4为例,反馈电压uF是经R1、R2组成的分压器由输出电压uO取样得来。反馈电压是输出电压的一部分,故是电压反馈。在判断电压反馈时,可以采用一种简便的方法,即根据电压反馈的定义——反馈信号与输出电压成比例,设想将放大电路的负载RL两端短路,短路后如使uF=0(或IF=0),就是电压反馈。       电流反馈以图5为例, 图中反馈电流iF为电阻R1和R2对输出电流iO的分流,所以是电流反馈。另一种简便方法就是将负载RL开路(RL=∞),致使iO=0,从而使iF=0,即由输出引起的反馈信号消失了,从而确定为电流反馈。 运算放大器负反馈电路组态分析 以下守于运算放大器负反馈电路的四种方式: 1,并联电压负反馈       图1(a)是反相比例运算电路。从反馈类型来看,反馈电路自输出端引出而接到反相输入端。设输入电压μi为正,则输出电压μo为负。此时反相输入端的电位高于输出端的电位.输入电流和反馈电流的实际方向即如图1(a)中所示.差值电流 即削弱了净输入电流(差值电流),故为负反馈。      反馈电流取自输出电压(即负载电压) ,并与之成正比,故为电压反馈。反馈信号与输入信号在输人端以电流的形式作比较,两者并联,故为并联反馈。因此,反相比例运算电路是引入并联电压负反馈的电路。由前面讨论可知,电压负反馈的作用是稳定输出电压,并联反馈电路则降低输入电阻。反馈系数F由定义式得出:其中XF为反馈电流,所以反馈系数 。可见,反馈系数具有电导(电阻的倒数)的量纲,称为互导反馈系数。 2,串联电压负反馈       由1(b)是同相比例运算电路。从反馈类型来看,反馈电路自输出端引出接到反相输人端,面后经电阻RL接“地”。设为正,则也为正.此时反相输入端的电位低于输出端的电位,但高于“地”电位, 和的实际方向与电路中的参考方向相反。经RF和R1分压后.反馈电压= —R1它是的一部分。由输人端电路可得出,差值电压,即削弱了净输入电压(差值电压),故为负反馈。反馈电压取自输出电压 ,并与之成正比,故为电压反馈。反馈信号与输入信号在输入端以电压的形式作比较.两者串联,故为串联反馈。因此,同相比例运算电路是引入串联电压负反馈的电路。 反馈系数F由定义式 得 电压负反馈的作用是稳定输出电压,串联反馈电路则有很高的输入电阻。 3,串联电流负反馈       首先分析图1(C)示的电路的功能。从电路结构看它是同比例运算电路,故输出电流由上列两式得出 可见输出电流与负载RL无关,因此图1(C)是一同相输入恒流源电路,或称为电压—电流变换电路。改变电阻R的阻值,就可以改变的大小。 其次分析反馈类型。参照上述的同相比例运算电路可知,图1(c)的电路也引入了负反馈。反馈电压 取自输出电流(即负载电流)并与之成正比,故为电流反馈。反馈信号与输入信号在输入端以电压形式作比较(),两者串联,故为串联反馈。因此,同相输入恒流源电路是引入串联电流负反馈的电路。 可见,反馈系数F具有电阻的量纲,称为互阻反馈系数。 4,并联电流负反馈       首先分析图1(d)所示电路的功能。由图可得出, 设 ,则得 输出电流 可见输出电流与负载RL无关,因图1(d)是反相输入恒流源电路。改变电阻RF或R的阻值,就可以改变 的大小。其次分析反馈类型。设 为正,即反相输入端的电位为正,输出端的电位为负。此时,和的实际方向即如图中所示,差值电流 ,即削弱了净输入电流,故为负反馈。反馈电流取自输出电流,并与之成正比,故为电流反馈。反馈信号与输入信号在输入端以电流的形式作比较(),两者并联,故为并联反馈,因此,反相输入恒流源电路是引入并联电流负反馈的电路。 反馈系数 总之,从上述四个运算放大器电路可以看出: (1)反馈电路直接从输出端引出的,是电压反馈;从负载电阻 的靠近地端引出的.是电流反馈; (2)输入信号和反馈信号分别加在两个输入端(同相和反相)上的是串联反馈;加在同一个输入端(同相或反相)上的是并联反馈; (3)反馈信号使净输入信号减小的,是负反馈。 至于负反馈对放大电路工作性能的影响,如降低放大倍数、提高放大倍数的稳定性、改善波形失真、展宽通频带以及对放大电路输入电阻和输出电阻的影响,和在分立元件放大电路中所述相同。 5,示例:       例1: 试判别图2(a)和(b)两个两级放大电路中从运算放大器A2输出端引至A1输入端的各是何种类型的反馈电路。 解:(1)在图2(a)中,从运算放大器A2输出端引至A1同相输入端的是串联电压负反馈: a. 反馈电路从A2的输出端引出,故为电压反馈; b. 反馈电压和输入电压分别加在A1的同相和反相两个输入端,故为串联反馈; c. 设为正,则为负,为正。反馈电压使净输入电压 减小,故为负反馈。 (2)在图(b)中,从负载电阻RL的靠近“地”端引入至A1同相输入端的是并联电流负反馈电路: ①反馈电路从RL的靠近“地”端引出,故为电流反馈; ②反馈电流和输入电流加在A1的同一个输入端,故为并联反馈; ③设为正,则 为负,为正。A1同相输入端的电位高于a点,反馈电流的实际方向即图中所示,它使净输入电流减小,故为负反馈。

  • 发表了主题帖: 美信的MAX15066高效率DC-DC方案

         最近学会了美信的EE-Sim工具了,现在可以轻而易举地设计出效率超过95%的电源(纸上谈兵的),小伙伴们都震惊了。         为了让更多小伙伴们也学会制作效率95%多的电源,今天我们来介绍一下来自美信的MAX15066开关降压芯片,顺便也聊聊美信的那个特别好用的EE-Sim仿真工具。         MAX15066是个4.5到16V输入,支持最高4A输出的高效率降压开关电源芯片。芯片只有2x2毫米,BGA封装的引脚定义如下   这款芯片的电路设计与仿真可以使用美信的EE-Sim工具来做。我们先进入美信官网,在工具里把EE-Sim打开。   我们假设一个场景,NanoPi M4需要5V4A的电源。考虑到大电流下劣质USB线的压降,电源输出使用5.3V 4A会比较保险。如果电源来自一个3节锂聚合物电池串联成的12V电池包,那么还需要通过一个DC-DC模块转换成5.3V4A才能用。3节锂聚合物电池的最高电压是12.6V,考虑到锂聚合物电池过放会影响电池寿命,我们把最低电压定位9.9V(每节电池放电到3.3V)。参考输入电压就是锂电池标准电压3.7V乘以3,11.1V。     我们把以上设计参数输入到EE-Sim   然后,自动生成原理图!这个功能非常赞,即使不看原理图资料,也能快速把原型做出来。几个元件的参数,可以以后再慢慢查资料研究。   我们回过头来,看看输出电压是怎么设置的。 下图中的R1和R2是控制输出电压的,当R2取参考值10K,R1可以计算得到   通过R2计算R1的公式如下,其中VFB参考值0.606V   然后,就开始仿真吧!     我们先来看看效率曲线,设置负载电流从10%到100%变化,也就是400mA到4A的变化。 下图中,我们可以发现,当输出电流为2A左右时,效率达到了最高,都快到96%啦。最大负载4A时的效率也超过95%。   我们再看看电流负载从2A突然变成4A再回到2A的电压瞬态响应曲线。 电压波动小于0.1V,而且电压的整定时间大约只有120微秒左右。   稳态工作的纹波也是很小的,大多数工况下,都小于10毫伏(是不是很震惊!!!!)。 比如,稳态带负载4A输出时候的电压曲线如下图红色曲线所示   4A时候的,电压的纹波依然很小,如下图所示:   小电流400mA工况的输出电压纹波,如下图所示:   0.01A的情况也测试了。 接近空载时候,一开始的输出电压稍微有些不稳定,但1.2毫秒以后就稳定了,如下图所示。        当然,以上都是纸上谈兵的理想情况,如果是大家自己做的板子,由于对地回路长,引入了较多电磁干扰,可能波纹就会大一些,达到100mV都有可能的。所以有以下建议。缩短输入电容地和输出电容地之间的距离。大电流线路尽可能短和宽。确保所有反馈连接线尽可能短,且不要有过孔,反馈和补偿电阻尽可能靠近设备布置。         虽然原理图设计出来了,但还是不建议小伙伴们自己做模块,因为DC-DC对于布线的要求非常专业,这需要长期的经验积累,不是一般爱好者能玩得6的。即使专业如Firefly开源团队,用专业的Ti电源芯片,也做出过12V转5V电路会发出明显噪音的Firefly RK3399开发板,返厂维修都不能修正,那就更不用说我们这些初级水平的普通爱好者了。

  • 发表了主题帖: 分享lora通信技术的温湿度监控

            分享的这篇文章主要介绍了我使用市场上现有的lora集中器设备和lora节点终端设备,通过一系列操作配置采集温湿度传感器数据,然后在云端进行modbus协议解析,实时采集显示温度湿度数据,并提供报警服务的物联网应用过程。        lora通讯技术是物联网通讯的重要组成部分,因其传输距离远,低功耗,低成本,频段免费,不受到运营商约束等特点受到广泛的应用。很多朋友可能觉得lora技术比较复杂,其实应用起来非常简单。这也是我实际做过的一个项目,除了一些基本配置也介绍了需要特别注意的地方,总之是我实际的项目经验。这篇文章尽量写的浅显易懂,看起来也可能比较板正(^_^我比较喜欢这样),从事物联网这块或者对这一块感兴趣的朋友可以作为参考。      也欢迎其他各行各业的读者了解目前物联网的具体应用过程(从设备采集到显示数据)。    一、环境搭建   1.1使用的设备   设备名称 数量 lora网关:USR-LG220-L(可通过以太网或者4G上网) 1台 lora终端设备:USR-LG206-L-C 2台 传感器:USR-SENS-WS温湿度变送器 2个 调试配件:DB9母对母串口线 2条 调试配件:USB转RS232串口线 2条 电脑 1台   1.2环境搭建过程   1.2.1云端添加集中器设备    在cloud.usr.cn中注册账号,进入控制台,在透传云设备管理中点击添加,填写设备名称,设备类型选择“lora集中器”, MAC和SN填写LG220机身标签上的MAC和SN,填写完成点击保存,如下图:       1.2.2透传云添加LORA终端设备       在透传云设备管理中点击添加,填写设备名称,设备类型选择“lora模块”, ID和SN填写LG206机身标签上的ID和SN,采集频率按照需求选择,如下图:         1.2.3 LG220集中器管理页面设置:   进入LG220集中器管理界面(类似于登录路由器后台,很简单),并按照如下参数填写配置集中器: 服务器IP地址:cloudlora2.usr.cn 服务器端口:1883 MQTT设备ID:  LG220设备上的MAC地址 发送订阅的主题:$USR/LoRa/DevTx/LG220设备上的MAC地址 接收订阅的主题:$USR/Lora/DevTx/ LG220设备上的MAC地址 MQTT服务器账号:自己申请的透传云账号 MQTT服务器密码:自己申请的透传云密码 上面参数配置完成确认无误后,选择立即更新,应用,并重启集中器。如下图:     以上参数配置完后,还需要像路由器一样将LG220集中器入网,插上外网的网线或者插上手机4G卡上网均可。   1.2.4 LORA模块加入集中器设置:       LG206设备设置参数和集中器的通道1参数相同。确保信道,速率,应用id三个参数相同。这个地方登录集中器后台设置LG220集中器,然后使用设备公司提供的软件设置LG206设备,如下图       1.2.5 透传云建立数据模板并关联LG206设备:   (1)添加数据模板:具体的可参考modbus标准协议和透传云数据模板说明。参考链接http://www.usr.cn/Faq/358.html     (2)在透传云添加的LG206终端设备上关联数据模板,选择透传云上的LG206设备,点击增加从机,从机名称自定义,设备号填写modbus协议从机地址(10进制),关联完成后点击保存         1.2.6 LORA模块与传感器对接     使用有人温湿度采集模块,5V供电,并连接LG206设备的TXD,RXD,GND(以USR-SENS-WSD-2为例)如下图       二、 整体调试   整体测试环境如上图    经过2.2的整体环境搭建,可以进行联调。   2.1定期采集      如果已经按照以上描述正确搭建实验环境,透传云将按照设定的采集频率(定期采集),定期采集温湿度数据上报     2.2主动采集       在透传云监控页面,选择列表显示,选择更多,点击主动采集,透传云将按照modbus协议格式给传感器设备下发采集数据命令,云端即更新采集到的温湿度数据,如下图所示即为最终的温湿度数据。     2.3数据管理     在透传云页面,点击数据管理,历史记录,可以查看历史数据。也可以选择时间范围,下载保存,查看具体数据记录。           2.4手机报警   在透传云如下界面,添加触发器,主要设置好触发条件和报警方式,具体操作这里不详细介绍,各位朋友可以自己稍微探索一下,一样很简单       设置好后,如果lora设备上报的温度数值触发了报警,则手机端会收到具体的报警信息,如下图,我设置的超过28℃触发报警,这样整套系统的设置已经全部完成           以上这一套完整的温湿度监控系统可以用到农田,工厂等环境中。这套系统搭建起来难点在于设备的联调,和一些复杂参数的填写,需要了解基本的lora通信知识,最好有modbus协议基础。另外在实际场景使用中,需要注意大量设备同时在线时可能会有干扰的情况。为此在挂载的终端设备大于30个以上时,配置过程中使用的信道也就是频段尽量分隔开。最后一点需要提醒各位朋友的是报警触发条件的设置,一定要设置合理,防止误触发,不然每天手机响个不停,大家也要烦死,哈哈~~~        关于设备的选择,本人不打任何广告,大家自己决定,开发lora的设备厂家很多,推荐简单易用的,当然如果你有能力,自己开发lora设备又有何不可?

  • 回复了主题帖: 请跟我来-DIY智能家居系统

    ddlxiaoxu 发表于 2019-10-20 21:45 有些好奇,如果这么做,开关的位置就必须下线的时候就有220v的零线和火线。
    完全可以滴

  • 2019-10-20
  • 发表了主题帖: 5G来了4G降速?负载均衡链路聚合器了解一下

         一种全新的简单粗暴易懂的方式(可以在这里断句)带你分析一个电子产品的需求——负载均衡链路聚合器!5G来了,还在用4G网络的你,是否感觉到网速变慢,延迟变长呢?说好的提速降费呢?降费我们感受到了(没有感受到的私聊我咨询,关键词“校园卡”),提速呢?怎么提速之后还能再降速呢?这篇文章我们一起来展望一款产品,“轻松”解决5G来了4G降速的问题。let’s start it! 市场分析及需求提出 背景与市场分析: • 5G建设需要钱:5G速度快带宽高,网络设备无法一步到位更换,就像IPV6一样,所以优化网络结构降低4G用户带宽,道理我们都懂,尽管工信爸爸经常安慰我们,但是心里难免不爽。 • 5G套餐贵:传说5G套餐开始不补贴(我不信),每月套餐费用200起,面对如此高额的套餐费,4G用户应该何去何从? • 4G套餐便宜:为了加快中国网络化进程,移动联通电信三巨头联合推出了超值套餐服务(没错就是200用一年,300用两年那个),服务群众的同时,用降低资费的方式快速融资,以便快速投入到国家战略项目——5G的建设中。 • 不同运营商4G网络覆盖情况不同:经常出现同一地区一家运营商信号好,而另一家不好的情况。 • 运营商套餐侧重不同:相同价格套餐,有的流量多,有的网速快,有的通话质量好,有的通话时长多。 • 我们的历史使命:进入21世纪,中国经济飞速发展,万恶的美帝国主义看不下去了(此条5毛),从各种领域限制中国的发展。尤其在对中国科技领军企业华为,更是处处设限,百般阻挠其发展也扩张。感触最深的就是在5G领域,美帝竟然伙同其他资本主义境外邪恶势力联手抵制华为!作为有血有肉龙的传人,我们看在眼里,疼在蛋上,一直想为祖国做点什么… 总结(直奔主题):利用校园卡高性价比的特点,购买三家运营商的校园卡各一张,同时使用3个运营商的网络,根据信号、套餐和用途由负载均衡链路聚合器切换数据流向,实现高速上网的功能,花4G的钱,用上5G的速度。 成本分析 套餐费用:没的比,5G套餐一月的费用和4G套餐一年的费用差不多。 设备费用:只需考虑负载均衡链路链路聚合器的费用,按照现在4G模块市场价格,每月剩下的5G套餐费用可以买两个4G模块。 总结:理论可行! 需求分析 通过市场调研,这种设备是没有的,本着DIY的原则,下边我用现有知识预测一款产品,有问题的地方希望大家帮忙指正指导。 产品功能上由一下几部分组成: 4G通信模块 信号转换器 数据调度 信号转换器 功能类似无限路由器,将数据转换为用户终端设备可以高速通信安全连接的信号。 4G模块及信号转换模块 蜂窝移动网络需要使用4G模块接入互联网,目前网上比较多的是miniPCIE接口的4G模块,一般设备上并不支持miniPCIE,支持的话一般也是一个,所以我们需要miniPCIE接口转USB接口模块,不紧可以实现接口的转换,同时接入多个模块,还能实现sim卡的轻松安装。4G模块加信号转换模块的价格约为150元左右。 数据调度 先来了解一下软路由,相对于常见的一般路由器,软路由是用台式机或服务器配合软件实现的路由器解决方案,不仅可以轻松实现拨号上网,还能实现很多一般路由器不具备的功能。 • 多播和负载均衡 多播就是通过多次拨号实现提高带宽的功能。几年前运营商还没有限制的时候,一般通过PPOE接入互联网的用户都能实现多播。多播后网速带宽显著提高。再通过负载均衡软件,即可轻松实现高带宽上网服务。 • 链路聚合 链路聚合最常使用在私有云NAS中。家庭配置了NAS,在家里办公需要从NAS上频繁读写大量数据,如果家里配置的是百兆网络,读取大文件需要很长时间,如果不考虑更换千兆网络环境,就可以考虑采用链路聚合的方案。可以简单理解为一般网络在同一时间通过一根网线传输数据,而链路聚合是通过多跟网线传输数据,这样网速带宽直接翻倍。如果家里是千兆网络,原理相同。 在上述软路由这两个成熟技术的基础上,通过设置相应规则和调度策略,使设备控制数据流向,不难实现网络负载均衡聚合器的需求。比如在看高清视频的时候,需要带宽较大,可以选择信号好,带宽高的网络。也可以同时从三个网络获取数据,将带宽最大化。平时浏览对带宽没有要求的网页,带宽较小可以选择使用无限流量套餐的网络。自动切换到信号最好网速最快的运营商…

  • 发表了主题帖: 开关霍尔传感器DRV5032在TWS耳机设计的应用

           TWS(True Wireless Stereo, 真无线蓝牙耳机)需要检测充电仓盖的开合,以及耳机是否在位,在这一检测功能中,霍尔器件因为反应灵敏,体积小,功耗低,受到越来越多的客户的青睐。在本文中,我们将会介绍市场常见的开关监测方案,以及TI 霍尔传感器技术在TWS 耳机中的应用。 一、常规开关检测方案 1、机械弹针检测 机械弹针结构简单,对精度要求高,但是使用寿命短,易受粉尘、水汽、振动等因素影响,触点容易锈化,极易产生金属疲劳损坏。 2、磁簧开关检测 磁簧检测是通过磁铁感应密封在玻璃管内含有贵金属材料的触点。因此,该开关不受湿气或其他环境因素的影响,触点不会氧化,缺点是体积大、安装难、易损坏。 3、红外光电开关检测 红外光电开关把光发射器和接收器面对面地装在一个槽的两侧。发光器发出红外光,在开盖时接收器能收到光,合盖时槽中光线被遮挡,光电开关便动作。该方案优点是检测速度快,但功耗大,也怕灰尘水水汽等因素。 4、霍尔开关检测 通过霍尔效应对磁场变化进行检测,相对于簧片、机械式一类的开关,其数字输出干净平稳,不会出现抖动,没有冲击等情况的产生,寿命高、耐振动;相对于红外光检测,这种检测方式不怕油污、水汽和盐雾污染或腐蚀、不怕灰尘、功耗低、体积小、重量轻、安装方便。越来越多的TWS耳机开始选择开关型霍尔器件,耳机插入检测也逐渐从机械弹针方案转换为霍尔检测。 二、霍尔效应以及霍尔传感器技术的原理 霍尔效应是通电固体导体(或半导体)内部载流子在磁场受洛仑兹力形成偏移,继而产生感应电压差,最终洛仑兹力与电场力平衡的过程。霍尔效应常用于磁场测量、电信号测量等方向。 常用的霍尔器件按输出信号类型分为线性霍尔器件,开关霍尔器件和锁存霍尔器件。线性霍尔器件输出为模拟信号,输出电压与外部磁场的强弱通常成线性关系。数字霍尔器件输出为01的电平,其中根据感应磁极的特性不同数字霍尔器件可以分为单极型,双极型以及锁存型三种。工作过程如图1和2所示,通过检测外部磁场的强弱控制输出导通或关断,类似开关的作用。当磁通量密度增大到一定值时,霍尔开关开始动作输出低电平,该点对应的磁通量密度称为工作点BOP,由于磁滞作用的影响,如果关掉中的和霍尔开关需要使磁通量密度低于某点,霍尔开关关断,此时磁通量密度的数值称为释放点BRP。 图1.单极型数字霍尔IC输出特性   图2.双极型数字霍尔IC输出特性 数字霍尔器件的通常结构如图3所示由霍尔效应片、电压调节器、休眠唤醒控制电路、信号放大滤波电路、偏移补偿电路、施密特触发器,开漏极输出(或推挽输出)。   图3. 数字霍尔IC内部结构 三、TI霍尔传感器技术在TWS耳机里的应用   在TWS蓝牙耳机充电仓之中,往往放置了多块磁铁用以吸附耳机与仓盖,每一块磁铁的极性朝向都会影响到霍尔IC感应点的磁场感应强度。若选用全极型霍尔IC,充电仓内部磁场即使在仓盖打开后仍会保持一个较高的值,不能达到霍尔IC的释放点。因此仓盖中应使用与原仓内磁场相反的磁极,并选用只对该极性动作的单极型霍尔IC,避开其他磁极的干扰。此外,开关型霍尔IC内部为逻辑控制电路,如图4所示在输入端放置滤波电容能够提供一个干净供电环境保证内部逻辑能够正常的工作,电容靠芯片越近,滤波效果越好,一般容量在0.1uF-10uF 。许多工程师计算开关霍尔IC与磁极的有效总气隙时常常会遇到困难,TI提供了一个在线计算工具Hall Effect Switch Magnetic Field Calculator,并给出了TI霍尔开关产品在不同规格磁铁下的感应距离,为大家的设计提供参考与便利。 图4.典型应用电路 图5. 有效总气隙计算工具 TI推出的超低功耗DRV5032霍尔效应开关,在TWS耳机里根据客户不同的需求有表6中七个版本可供选择。该IC具有较宽的供电电压1.65-5.5 V,可由电池直接供电。其中采样频率为5 Hz的版本在1.8V的供电条件下电流消耗低至0.54 µA,20 Hz版本在3V的供电条件下电流消耗低至1.6 µA。两种不同的封装规格SOT-23(2.9*1.3)与X2SON(1.1*1.4),适用不同的仓内结构。此外,单极型版本的IC推挽输出节省上拉电阻空间,有两档磁感应灵敏度能够提供准确而稳定的磁开关点。工作的温度范围支持-40 至 +85°C。 表6.DRV5032霍尔开关版本 同时,为帮助工程师快速开发设计,TI提供DRV5032的评估板、相关技术资料以及TWS耳机整体参考设计供设计参考。 DRV5032 超低功耗、1.65V 至 5.5V 霍尔效应开关传感器评估模块 DRV5032评估板用户指南 TWS/无线耳机/头戴式耳机/入耳式耳塞系统解决方案及参考设计 TWS蓝牙耳机介绍及TI低功耗方案    

  • 发表了主题帖: 集成电流感测的优点

           许 多刷式和步进电机应用必须对电流进行监控和调节。对于刷式电机,电流信息可用来确定负载条件的变化或用来限制启动和失速电流。对于歩进电机,高级别的微歩进需要调节每一步的电流。        图1是电流与时间的关系图,显示了刷式直流电机的启动曲线。在此例中,在电机达到小于1安培的稳态条件前,电流被限定为约2安培。如果没有电流调节,同样的电机峰值可以达到14安培以上。因此不仅需要过度设计的电源来支持这一瞬态,还需要对电机驱动器进行额定以可靠地处理峰值电流。 图1.直流电机电流与时间       传统上讲,可以在接地路径中使用外接分流电阻器来实现这种电流限制。监控这些分流器上的电压降,并将其与内部或外部(具体取决于器件)提供的参考电压进行比较。由于满载电流通过这些分流器,所以电阻器必须是功率电阻器,且在尺寸几乎与集成电路本身一样大(尺寸为3.2 mm x1.6 mm)的情况下达到1206,。图2比较了分流器和DRV8870 DC电机驱动器的大小。图3显示了带集成电流感应的DRV8871。在DRV8871中,单个0402电阻器用于设置限流阈值。如图3所示,集成电流感应可以节省电路板和组件。 与功率电阻器相比,低功率信号路径电阻器需要的电路板空间更小,且降低了物料成本(BOM)。此外,电阻器上无功率损耗,并且在一个很可能已经处于热预算压力的设计中又消除一个热源。  图2.带外接分流器的DRV8870 图3.带集成电流感应的DRV8871 既然已经清晰了解了限流和集成电流感应的优点,我们还可以通过IPROPI引脚在最新的刷式直流电机驱动器系列中添加监控功能。DRV8873是刷式电机驱动器系列的最新产品,可提供与流过电桥的电流成比例如的模拟电流输出。该比例电流通过一个小型电阻器,可以使用外部微控制器监测与电流成比例的电压,以确定负载条件的变化并相应地采取措施。有了这种内部电流监控功能,便无需使用外部功率电阻器和如运算放大器一样的调节电路。 最后,由于步进电机传统上需要两个外部感应电阻器才能将电流返馈给驱动器,因此我们可以改进步进电机,使之更好地受益集成电流感应的PCB尺寸和BOM优势。图4对传统驱动器PCB占用空间和从内部电流感应中受益的DRV8886AT进行了比较。 图4.电路板布局减小   只有在PCB布局过程中才能实现的一个不太明显的好处,即选择具有集成感应功能的器件时,可以简化布局。因此,不再需要绕过大型外部分流组件进行布线,也不需要断开需要更大的轨迹来承载器件电流的功率、输出和GND布线。 总之,TI最新系列电机驱动器中的集成电流感应可移除BOM中价格昂贵的功率电阻器,减少电路板尺寸、组件数量,并简化PCB布线。  表1.备选器件表 器件名称 器件描述 DRV8871 带集成电流感应的3.6A刷式直流电机驱动器(PWM 控制) DRV8871-Q1 带集成电流感应的3.6A汽车刷式直流电机驱动器(PWM 控制) DRV8873 带集成电流感应和电流感应输出的10A H桥电机驱动器 DRV8873-Q1 汽车H桥电机驱动器 DRV8876 带集成电流感应和电流感应输出的37V、3.5A刷式直流电机驱动器 DRV8876-Q1 带集成电流感应和调节的汽车H半桥电机驱动器 DRV8884 带1/16微步进和集成电流感应的1.0A步进电机驱动器(STEP/DIR 控制) DRV8885 带1/16微步进和集成电流感应的1.5A步进电机驱动器(STEP/DIR 控制) DRV888AT  带集成电流感应和自适应衰减模式的2A步进电机驱动器

  • 发表了主题帖: 请跟我来-DIY智能家居系统

             随着微功耗处理器以及通讯芯片的发展,以往较为耗能的有线通讯方式越来越阻碍了通讯网络的发展,于是一大批的无线通讯方案应运而生,例如NBIOT,蓝牙4.0,zigbee等等。同时微功耗无线处理器的流行使得传统家电带上了智能的色彩,智能家居必将是未来家庭的必备。某些高科技企业也在揶揄这块市场,纷纷推出了自家的智能家居解决方案,比较知名的有米家方案以及阿里智能的解决方案。但是回到现实的使用上来说,每个家庭的条件环境其实不一样,同样的产品未必在每个家庭上都可以使用方便,所以个性化的定制产品才可以更好的方便我们的生活。         于是在暑假期间,萌生了DIY一套智能家居方案的想法,具有各种智能开关和传感器等节点,并且对接物联平台实现联网控制以及数据的上传。由于家庭中将会使用到的智能设备种类繁多,所以我将采用模块化的设计思路,即采用核心板加外围功能部分的思路,像搭积木一样的构建各个智能设备。大家有同样想制作的想法可以参考。截至发帖前,我完成了智能网关,智能墙壁开关,无线遥控开关以及无线气象站的设计制作,之后有新的设备加入的话,我会及时的更新。 下面是一张我构思的网络拓扑图: 无线通讯方案的选择:zigbee         好早之前就接触过zigbee组网,对于这种低成本低功耗的网络还是抱有很大信心的。这里讲解选择这个网络的几大理由: mesh结构的网络很适合智能家居的控制结构,在入网的任何一个节点都可以访问到所有节点的数据,这点很适合网关控制各个设备。 低功耗使得终端设备甚至可以采用电池供电,使得所有的模组都尽量可能的无线化。 多跳传输,无线方案中最大的问题就是数据发送的不稳定以及障碍物对信号的遮挡导致数据无法正确传输,而ZigBee的多跳恰好解决了这个问题,节点会自动选择优质的传输路线多跳传输,保证信号质量。 zigbee网络确实是好,但是对于我这种比较懒惰的人并不想去学习那复杂的传输理论以及zigbee通讯芯片的编程,于是我选择上网购买ZigBee模块,最后选择了一种小型的串口转zigbee模块,比较方便单片机通讯。 核心板的制作: 说到模块化,那么就需要核心的控制板。本质来说就是将单片机以及购买的zigbee模块集成到一张电路板上,并且预留各种接口,方便后期移植到各种设备上,这样一张电路板就可以适用各种智能家居设备了。 于是一番绘制原理图以及PCB之后,成品大概明朗了: 焊接好的成品如下: 这将会成为以后所有我的智能家居方案的核心控制板。 网关的制作 完成了核心板的制作,网关成为了下一个比较关注的对象,因为家中的所有智能设备的控制以及通讯都会由他来完成,包括链接到互联网上传数据,所以说对于网关的硬件选取也是重中之重。上联互联网,下接zigbee小型通讯网,网关担任了一个家庭控制中心的角色,对于它的选择我认为esp8266是个不错的方案,可以支持arduino ide编程,这对于不太了解网络通讯协议的我来说是个好消息,因为在arduino的编程中,我可以借助强大的库函数来完成我想要的功能。 这样我需要对ESP8266进行片上编程,并调用它的串口和zigbee模块通信,当zigbee的节点收到其他设备发来的数据的时候,esp8266可以对其处理或者通过WiFi上传到云平台,整体的设计思路就是这样。 为了方便网关节点的状态显示以及相关信息读取,为以后的调试提供便利,我给网关添加了一块4.3寸的串口触摸屏,这样方便信息的读取以及调试工作。        完成了zigbee节点核心板的设计以及网关的硬件选择,整个智能家居系统的主要部分就构建完成了,我先不讲解程序的编写,因为我将会在调试好每一个智能设备之后,再对网关进行编写对应设备的接口程序。即完成一个智能设备的开发之后再对接网关,使其加入到家中的zigbee网络,实现联动控制或者联网控制,因为毕竟我使用的ZigBee模组只是起一个通讯的作用,具体的功能实现还是靠核心板上的单片机来完成。这种开发方法叫做迭代开发,对于较为庞大的项目是一种较好的解决方案。 智能开关的制作 下面是介绍智能墙壁开关的设计,核心就是使得家里墙壁开关智能化,可以联网控制,达到场景联动,智能控制等目的。 我尝试就家中的传统开关进行改造,但是发现拆开之后内部空间实在不够,没法完成改装 于是尝试网购新的开关,寻找空间大些的墙壁开关,后来我找到了专门生产触摸智能开关外壳的厂家,购买了几个触摸墙壁开关的外壳,内部空间较大,适合改造 由于是触摸面板,所以我准备使用触摸模块作为输入 关于执行机构,也就是一充当原来机械开关的器件,我准备使用继电器来代替。继电器可以让我使用单片机输出的信号去控制220V交流电压的通断,并且提供良好的隔离以及绝缘性能。 1.代码的编写: 对于 智能开关节点,我将zigbee模块配置成了路由器节点,这样做的好处是,墙壁开关同时扮演了一个路由器的角色,看可以协助一些远距离的终端节点完成多跳数据传输。 同样的,为了响应国家节能减排的号召,我给单片机配置成了空闲模式以节省功耗,但是空闲模式下单片机没法正确及时的检测到触摸按键的按下,所以我使用单片机的外部中断来检测触摸按键,当触摸按键按下时,单片机检测到电平变化,引发中断,唤醒单片机,使得单片机执行相关指令。 当zigbee模块收到来自智能网关的数据时候(例如闭合开关或者断开开关),其输出数据引发的串口中断也会唤醒单片机,这时候单片机会执行收到的指令,随后再次进入空闲模式。 此外,为了更好的检测每个开关的状态,每次开关有动作之后,会将当前的状态上报给智能网关,以便网关检测家中所有的开关状况。 2.开关的测试: 链接zigbee的协调器节点到电脑上,打开智能开关的电源,可以看到每当我触摸开关,对应的继电器都会动作,并且协调器节点串口都会输出一些数据: 下面是一帧数据的解读 测试完毕,智能开关达到了我想要的功能,下面就是针对我购买的外壳设计PCB板了 3.智能开关PCB的设计与制作: 对于购买的外壳,我先找到了一张厂家提供的CAD图纸,上面标有了一些基本尺寸,这样方便我去设计一块合适的PCB板。 将之前在面包板上搭建的电路,绘制成原理图之后效果如下: 转换成PCB文件后,经过简单的元件摆放以及布线后,完成的效果如下: 将交流高压部分和直流低压部分开槽隔离,提供了较好的抗干扰特性。而反面则设有zigbee模块以及单片机的位置。 约几天后,我收到了制作好的板子。 同时到来的还有一些元器件。 焊接过程太繁琐无聊,略去。焊接好之后的效果图 安装上触摸模块之后,使用双面胶将触摸模块粘贴在面板玻璃上。 烧录程序,合上外壳。背后使用标签标明出接线口定义,方便安装。 使用智能开关替代家中的传统开关。 4.网关对应程序的编写: 这部分的程序主要是网关接受物联平台发来的控制指令json字符串,然后解码翻译,最后通过zigbee网络告知智能开关引起相应动作。所以其核心在于接受服务器的json字符串,解释其含义。 同样的,还是使用arduino的json库来处理这些信息,查阅物联平台的通讯协议手册,发现采用如下格式: 所以只需要解读say指令后面附带的指令即可,于是很快的,一个使用else if语句的并列结构就写好了,程序对收到的字符串依次判断,如果相同则发送指令给智能开关。 上传程序到ESP8266,开始测试! 5.综合测试 安装智能开关到位,接上网关的电源,触摸触摸开关,电灯可以正常开启关闭 拿出手机,打开物联平台,按下开启电灯按钮,电灯开启。 测试完毕 至此,我实现了智能开关的设计,电路搭建以及使用网络控制。并且支持各种功能扩展(定时开关,和人体传感器联动等等),升级空间十分大,并且可联网控制,给生活带来了很大方便。 无线遥控开关制作篇 晚上睡觉前,有的墙壁开关距离床上太远,因此不方便关灯,所以我准备设计一款遥控无线开关,可以通过配对的形式完成对家中所有智能设别的控制,类似于随手贴开关。下面是介绍无线遥控开关的设计。 1.电路设计 作为zigbee网络中的终端节点,无线遥控开关需要具有低功耗的运行模式,因此根据我采用的e18zigbee模块的数据手册,将其配置成睡眠模式 拿出之前制作的zigbee最小系统板 无线遥控开关上面共有一个按键用来操作,所以焊接一个按键开关到最小板模块上 另外焊接上电源线,采用纽扣电池供电 用3D打印机打印了盖子 将板子切割一下放进去 组装好后的样子 2.网关对应的配置: 我绘制了一个显示屏的界面 在此界面下,按下墙壁开关的配对按钮 此时显示屏上会显示相关信息,设备编号为1的会显示在第一行,以此类推,超出一页的部分会自动翻页 如果复位按键损坏,还可以使用MAC地址添加方式 点击信息右边的配对按钮,屏幕下方会显示配对中的提示语 此时按下无线遥控开关按钮 即可在显示屏上见到配对成功的提示语 此时使用无线遥控开关即可控制灯的亮灭       实现这个功能的主原理就是无线开关记住了墙壁开关的短地址,这样每次按下按键都会发送一次数据给智能墙壁开关以便控制亮灭。并且由于是电池供电的开关,为了避免在更换电池之后需要重新配对的问题,我使用了单片机内置的eeprom来存储短地址,这样就无需每次上电都要重新配对了。

  • 发表了主题帖: DIY节能插排

          当你的电脑关机了,显示器的指示灯还默默的亮着,音箱也偷偷工作,时不时来点惊悚的刺啦刺啦的干扰声。 强迫症患者每次都要关机,关显示器,关音箱,抵制绝对抵制,抵制这些不友好的设计。 下面,给大家带来一个简易又好用的设计,解放强迫症患者。         小白都能懂的原理解析:电脑主机的开关机时,USB口也是会断电/上电(当然主板支持唤醒的USB口是不掉电),以此,我们可以利用USB口的信号控制插排的开关,以便控制接到插排上设备的开关。 So easy。。。。 有图更明了,上原理图,USB控制继电器,继电器连接插排。 下面就是,依葫芦画瓢,开始制作。 材料: 插排(任意都可以,只要能塞得下一个继电器), USB线(任意手机充电线), 继电器 220V 10A, 小电阻 10欧姆(主要是降低继电器功耗,防止长时间工作,发热), 洞洞板。。。 接着按线路焊接, 裁剪,短小精悍是王道 来!!!8块包邮的插排, 拆开,里面空间够大,赛个继电器妥妥的。 插排打个洞,USB线穿过来,接到继电器的信号输入端; 将继电器控制输出端串联到插排开关和插座之间。 涂上热熔神胶,合上盖子完工。 上机试试,开关机,完美如期的控制了显示器和音箱的电源。 提倡绿色环保,节能省钱,简易实用,解放强迫症的独家设计。 嘻嘻!

  • 2019-10-17
  • 发表了主题帖: Zigbee抓包分析——介绍

    由于我们的网络是Zigbee,所以不得不学会抓包。 会抓包,这个很重要。做我们这行不会抓包,就等同于电子工程师不会示波器、程序员不会GDB。 #正题 抓包器介绍 我司用的抓包软件是Ubiqua,是花了重金买的。主界面如下:  添加抓包器 首先,插上我们的抓包器,博主为 NXP 的 JN5168,用 FTDI 串口转USB 的 Dangle。 点击菜单栏:Device -> Add Device ... ,弹出设备添加框: 选 “NXP”,然后选重 "NXP FTDI Device",再点 “Add Device”,如下: 设置信道 然后点击设备上的开关按钮即可。 正常情况下,主界面就会出现大量的数据显示: 其中如下显示的,表示未解密包: 需要遇到 Transport Key 包方可解密。最简单的方法就是入一个设备进网络。 常用工具 在抓包器中一有些常用的工具: 保存当前数据 滚动显示 单包分解窗显示最新包 清空所有 当前过滤器 启用与关闭过滤器 新建过滤器 编辑当前过滤器 删除过滤器 过滤器 过滤器是必要的,不然人眼受不了。 新建过滤器 点击(7)所示的按钮,弹出如下框: 如果是Zigbee新手,用起来都比较麻烦。还有另一种简单的方法。 比如博主要抓 PANID=5FCC的包,即同一个网络的数据包。 先选中一个数据包样本。然后: Zigbee包结构 ZCL包 如下为ZCL包,开关的属性报告: Zigbee的协议很多与我们以太网络很像: MAC NWK APS ZCL 不详讲,只想提一下几点: PANID 在 MAC 层里 MAC层与NWK层都有Source Address 与 Destination Address,MAC层的是当前包的源地址与目标地址,而NWK的是指真正的源地址到目标地址。类似以太网的IP层与MAC层的关系 Frame Information中有包的信息,包括信号强度 Cluster id 是在 APS 层 ##常见的数据包介绍 如下数据包: Management Permit Joining Request 开启与关闭组网 Beacon Request 请求信标 Beacon 信标 Acknowledgement (MAC) 点对点确认包 Acknowledgement (NWK) 目标到源确认包 Association Request 请求关联 Association Response 关联回复 Transport Key 传输密钥 Device Announce 设备通告 Active Endpoints Request 请求端点个数 Active Endpoints Response 回复端点个数 Simple Descriptor Request 请求端点简单描述 Simple Descriptor Response 回复端点简单描述 Data Request 终端结点向父结点获取数据 Bind Request 请求绑定 Bind Response 回复绑定 Configure Reporting 配置属性报告 Configure Reporting Response 配置属性报告回复 Read Attributes 读属性 Read Attributes Response 读属性回复 Write Attributes 写属性 Write Attributes Response 写属性回复 Report Attributes 属性报告 结语 本文就到介绍到这里,以后再一一介绍设备入网与控制的流程分析。

  • 发表了主题帖: CC2541 迷你开发套件使用心得分享+ my love

    一个SimpleBLEPeripheral项目。用到了UART,蓝牙通信不是用的串口,CC2541实现蓝牙通信可以不用串口。   attWriteReq_t req; req.pValue = GATT_bm_alloc( simpleBLEConnHandle, ATT_WRITE_REQ, 1, NULL ); if ( req.pValue != NULL ) { req.handle = simpleBLECharHdl; req.len = 1; req.pValue[0] = simpleBLECharVal; req.sig = 0; req.cmd = 0; status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );   蓝牙主模块、CC2541连接成功。 CC2541往蓝牙主模块发送数据,蓝牙主模块是可以接收到的。 发送代码: if(BL_Flag==9) { BL_Flag=0; HAL_UART_Transmit (&huart1 ,(uint8_t *)(START),1,1500); flag=1; } if(BL_Flag==1) { BL_Flag=0; HAL_UART_Transmit (&huart1 ,(uint8_t *)(STO),1,1500); } 接收代码: attWriteReq_t req; req.pValue = GATT_bm_alloc( simpleBLEConnHandle, ATT_WRITE_REQ, 1, NULL ); if ( req.pValue != NULL ) { req.handle = simpleBLECharHdl; req.len = 1; req.pValue[0] = simpleBLECharVal; req.sig = 0; req.cmd = 0; status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );

  • 发表了主题帖: 使用LabVIEW,通过WiFi远程控制树莓派~

    这两年Python很火,大数据,人工智能,深度学习很多都用的Python。上大学时候,我也没事自学过,只是没想到如今这么火。   然后我就买了个网上很火的树莓派瞎折腾一下,纯属业余。手里的是3B+,然后我就想,好像可以做个教程,通过WIFI控制树莓派。     学过单片机的人估计都会有体会,学单片机等硬件,入门学习第一课大多是“点LED灯”。所以,我还是点灯吧。   于是我就焊了一个LED灯串了个电阻,然后接在了树莓派的IO口上。最后使用LabVIEW一个按钮控制这个LED灯亮和灭。   控制效果如下图(gif动图)所示。树莓派带了外壳,图中左边是摄像头实时图像,右边是LabVIEW前面板。     从上图可以看到,树莓派只接了一个小米充电宝,然后就是接了这个LED灯,没有连接其他外设。3B+自带WIFI模块,已通过路由器和我电脑组成了局域网。   下面开始介绍了,按步骤来: 1,使用python写TCP Server程序,并在树莓派运行。 2,使用TCP助手,采用TCP Client模式,测试树莓派的Sever能否正常工作。 3,使用LabVIEW的TCP函数,编写程序。     树莓派python写TCP Server,网上百度了下,然后自己修改了下。控制IO口的,自己也是百度了下,修改了下。然后测试运行。   下图代码仅供参考,毕竟我只是瞎改一下代码。     将上述代码保存为TCP.py,在树莓派系统中运行此程序。下图为windows下,远程桌面树莓派(主要我没多的显示器,只一台笔记本),若不使用远程桌面,在windows下运行putty连接也可以。     如上图所示,当运行程序时候,程序首先会侦听等待,当我的电脑端的TCP软件连接上时候,会返回数据。树莓派的python程序,根据发送的是HIGH还是LOW,在终端显示信息,并判断控制LED的IO口的电平。   那么,TCP助手成功了,既然TCP助手可以正常通信,那么就换上LabVIEW编程。大家平时在通信时候,一定要借助其他工具确认某一方无问题,再使用LabVIEW编程,这样容易排查故障。   很多人对TCP可能没搞过,觉得通过WIFI控制似乎很难。WIFI跟有限网络一样,要么UDP,要么TCP,这里是使用的TCP,那么就直接看LabVIEW的范例,使用4个函数,TCP连接,TCP写,TCP读,TCP关闭。这个和串口的类似。我的目前这个程序见下图。大概花了一分钟写了一个。     由于TCP不像串口一样,没有属性节点读取当前字节数,所以我在树莓派的python语句里,发送数据时候,末尾加了回车换行,在TCP读的时候,模式选择了回车换行。实际上,http协议就是有这样的终止符。   这个只是个简单例子,似乎也没什么技术含量,就一个TCP而已。 未来大家可以衍生其他控制。特别是大学里面做技术创新,或者自己业余玩玩的。   现在网上的python代码很容易搜索,LabVIEW的资源其实也是一大堆,想做点啥,自己百度下,修改一下基本差不多了。     那么,为什么我要写这么个文章,原因大概是前天有群在问一个TCP问题。这个人看了下范例,然后瞎改。   这个问题也曾在我多年前刚开始学习TCP的曾疑惑过:   在TCP范例中,TCP客户端,首先TCP读取了4字节,然后强制换换,输入给了后面的TCP读取。为什么是4,而不是其他的数字。上述说的某群里某人就是瞎改这个4,为其他的数字,如19。结果必然是不正确的。我们自己写TCP时候,是不是必须按范例来,当然不是,我上面的程序就没有。     这个问题,相信用过的人都曾想过,不知道是否都想明白过。 这个范例位置,自己搜索TCP,然后选择 Simple TCP。     在庞大的工程,最后都是建立在基础知识上面,很多时候我们看范例就能看明白,只是很多人看不明白,领悟不深刻。

  • 发表了主题帖: Leez AI局域网物体检测

    本帖最后由 Jacktang 于 2019-10-17 09:14 编辑 1 常见的物联网AI计算模式 目前,物联网AI物体检测技术已经非常成熟了,它的计算模式只要有两种,一种是用云端来完成AI计算再把结果发回给终端,一种是直接在终端设备上做边缘计算。 终端上做边缘计算对设备的计算性能要求比较高,于是谷歌推出了Edge TPU,可以以较低的延迟完成AI计算。如果手头没有Edge TPU,也可以使用ARM处理器来跑,就是速度慢很多,不能实时检测。 在云端计算领域,百度AI推出了EasyDL物体检测服务。在这种计算架构下,终端设备的计算量非常小。终端设备只需要负责图像采集,然后把图像发给云端,所有的AI计算都在云端完成,然后云端再把计算结果还给终端设备。 但是,云计算模式也有缺点,那就是带宽和数据延迟。云服务器实际上就是机房的虚拟主机,每台主机的共享网络带宽是受限的;然后,虚拟主机与你隔了几万里,中间又隔了好多个路由器;它距离你的设备越远,网络延迟也就越大。 2 局域网AI计算 如果使用网络计算模式,有没有方法减少这种延迟呢? 很简单,把计算服务器布置在本地就好了。 技术上,我可以给桌面台式机编写一个程序把它变成计算服务器,让它处理来自LeezP710的图像,然后用低延迟的UDP协议发送回去。另外,要注意WIFI转发的延迟也很大,所以尽量使用千兆以太网。正好,我手头这块Leez P710开发板和我的桌面台式机都带有千兆网络接口。 这个开发需求,对我们这种linux老司机来说,非常简单,一晚上就能把功能实现。 是展示真正的技术的时候啦! 3 功能实现 我很快就把猫咪检测的demo做出来了,而且还是个通用度很高、可维护性很好的代码,稍加修改就可变成检测人、狗或车辆的。 程序我都会开源到github,不管你学或不学,学得会或学不会,我的开源方案全套源代码都在那里。 3.1 终端设备 Leez P710上面开启了两个程序,一个是mjpg streamer,把USB摄像头捕获的图像发给局域网的计算服务器。另一个是我编写的clouddetec客户端程序。这两个程序都不涉及AI计算,所以可以跑得飞快。 其中,mjpg streamer来自开源项目,用于实现Leez P710的USB摄像头图像采集,安装方法见我另一篇帖子《USB摄像头填坑记》 LeezP710启动网络视频流的脚本如下   mjpg_streamer -o "output_http.so -w ./www" -i "input_uvc.so -d /dev/video8 -r 640x480 -f 30" 我编写的clouddetec客户端程序的代码如下。   #include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> #include "opencv2/opencv.hpp"   #include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include <netinet/in.h> #include <unistd.h> #include <time.h> #include <arpa/inet.h> #include <netdb.h> #include <errno.h> using namespace cv; using namespace std;   int main() { Mat frame; VideoCapture cap("http://192.168.1.103:8080/?action=stream"); char filename[256]; int i;   struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(6000); addr.sin_addr.s_addr = htonl(INADDR_ANY); int sock; sock = socket(AF_INET, SOCK_DGRAM, 0); bind(sock, (struct sockaddr *)&addr, sizeof(addr));   char buff[64]; struct sockaddr_in clientAddr; int n; unsigned int len = sizeof(clientAddr);       while (1) { n = recvfrom(sock, buff, 64, 0, (struct sockaddr*)&clientAddr, &len); if (n > 0) { char *tmpi = (char*)buff; printf("%s %u says: %c %c %c\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), tmpi[0], tmpi[1], tmpi[2]); i++; cap >> frame; sprintf(filename, "/mnt/ud/detec/%06d.jpg", i); imwrite(filename, frame); } }   return 0; } 以上代码的运行过程是这样的。LeezP710使用opencv捕获自己的网络视频流,但不对图像做任何处理。P710实时侦听6000号端口的UDP数据。服务端检测到猫咪图像后会给P710发送数据。P710收到后才知道检测到猫了,于是把当前的图像保存成jpg图片,放到detec文件夹下。 3.2 云端计算服务 服务端软件opencvudp,是个windows程序,需要用VisualStudio编译,OpenCV用的是带DNN模块的4.1.0版本,代码如下   #include "stdafx.h" #include "opencv2/opencv.hpp" #include <opencv2/dnn/dnn.hpp>   #include <iostream> #include <string>     #include <WS2tcpip.h> #include <WINSOCK2.H>   #include <process.h> #pragma comment(lib,"ws2_32.lib") using namespace cv; using namespace std; using namespace dnn;     int main() { ////加载套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); //创建套接字 SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0); SOCKADDR_IN addrServer; inet_pton(AF_INET, "192.168.1.103", (PVOID *)(&addrServer.sin_addr.S_un.S_addr)); addrServer.sin_family = AF_INET; addrServer.sin_port = htons(6000);   char *Buff = new char [3];//UDP发送的char   String prototxt = "MobileNetSSD_deploy.prototxt"; String caffemodel = "MobileNetSSD_deploy.caffemodel";   Net net = readNetFromCaffe(prototxt, caffemodel);   const char* classNames[] = { "background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor" };   float detect_thresh = 0.10; VideoCapture cap("http://192.168.1.103:8080/?action=stream;dummy=param.mjpg"); //if (!cap.isOpened()) return -1; Mat frame; int xLeftBottom ; int yLeftBottom ; int xRightTop ; int yRightTop ; while (true) { cap >> frame; if (frame.empty()) break; clock_t start_t = clock(); net.setInput(blobFromImage(frame, 1.0 / 127.5, Size(300, 300), Scalar(127.5, 127.5, 127.5), false, false)); Mat cvOut = net.forward(); cout << "Cost time: " << clock() - start_t << endl; Mat detectionMat(cvOut.size[2], cvOut.size[3], CV_32F, cvOut.ptr<float>()); for (int i = 0; i < detectionMat.rows; i++) { int obj_class = detectionMat.at<float>(i, 1); float confidence = detectionMat.at<float>(i, 2);   if (confidence > detect_thresh) { size_t objectClass = (size_t)(detectionMat.at<float>(i, 1));   xLeftBottom = static_cast<int>(detectionMat.at<float>(i, 3) * frame.cols); yLeftBottom = static_cast<int>(detectionMat.at<float>(i, 4) * frame.rows); xRightTop = static_cast<int>(detectionMat.at<float>(i, 5) * frame.cols); yRightTop = static_cast<int>(detectionMat.at<float>(i, 6) * frame.rows);   ostringstream ss; int tmpI = 100 * confidence; ss << tmpI; //ss << confidence; String conf(ss.str());   Rect object((int)xLeftBottom, (int)yLeftBottom, (int)(xRightTop - xLeftBottom), (int)(yRightTop - yLeftBottom)); if (classNames[objectClass] == "cat") { rectangle(frame, object, Scalar(0, 0, 255), 2); //String label = String(classNames[objectClass]) + ": " + conf; //String label = String(classNames[objectClass]); String label = String(classNames[objectClass]) + ": " + conf + "%"; //putText(image, label, Point(xLeftBottom, yLeftBottom - 10), 3, 1.0, Scalar(0, 0, 255), 2); putText(frame, label, Point(xLeftBottom, yLeftBottom + 30), 3, 1.0, Scalar(0, 0, 255), 2);   Buff[0] = 'C';//这是给UDP的buff Buff[1] = 'A'; Buff[2] = 'T';   printf("%c %c %c\n", Buff[0], Buff[1], Buff[2]); //要发送的字符串 char *charBuff = (char *)Buff;//把数组变成char数组 //UDP发送char数组 sendto(sockClient, charBuff, strlen(charBuff) + 1, 0, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); } } } imshow("test", frame); if (cv::waitKey(1) > 1) break; } return 0; } 它的运行过程是这样的。OpenCV捕获来自P710的mjpg stream视频流的图像,通过mobileNet SSD检测图像是否有猫咪。如果检测到有猫,就通过UDP给P710一个反馈信息。反馈信息是个字符数组CAT。服务端还开启了一个监视窗口,可以观察实时的检测图像。 3.3 代码开源地址 4 功能验证 先在计算服务器的windows系统下把服务端程序编译出来并运行。我们在手机上显示一张猫咪的照片,然后把照片给P710的摄像头看。服务端捕获P710的网络图像数据,并成功检测到了猫,然后通过UDP协议给P710发回了数据。测试截图如下: 在P710上编译客户端程序并运行。当接收到来自计算服务器检测到猫咪的数据后,P710会打印调试信息显示接收到的字符数组CAT,并把当前的图像保存成文件。 下图是detec文件夹下,P710保存的文件,可以看到照片上确实有猫。 5 小结 今天设计了这个局域网的低延迟的物联网计算方案。该方案其实都是基于最普通最成熟的互联网技术,只是被用在物联网上,所以变成了看似高深的internet of things技术。 这篇文章的重点是在软件开发,而不是在具体的硬件。因为网络技术本身是通用的,并不用局限于linux或windows,也不局限于桌面X86还是嵌入式设备。项目里所使用的硬件设备,桌面台式电脑、P710嵌入式小电脑,只是用来跑程序的载体罢了。

  • 2019-10-16
  • 发表了主题帖: 设计基于FPGA的串行通用异步收发器

          UART(Universal Asynchronous Receiver Transmitter通用异步收发器)是一种应用广泛的短距离串行传输接口。常常用于短距离、低速、低成本的通讯中。8250、8251、NS16450等芯片都是常见的UART器件。基本的UART通信只需要两条信号线(RXD、TXD)就可以完成数据的相互通信,接收与发送是全双工形式。TXD是UART发送端,为输出;RXD是UART接收端,为输入。   UART的基本特点是:(1)在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。(2)起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接受器数据传输即将开始。     (3)数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),低位(LSB)在前,高位(MSB)在后。(4)校验位(parity Bit):可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。在使用中,该位常常取消。   (5)停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态。(6)位时间:即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有0.5位、1位、1.5位格式,一般为1位。(7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。   (8)波特率:UART的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600=9600bps(位/秒)。   FPGA UART系统组成 :如下图所示,FPGA UART由三个子模块组成:波特率发生器;接收模块;发送模块;      模块设计:系统由四部部分组成:顶层模块;波特率发生器;UART接收器; UART发送器.   异步收发器的顶层模块由波特率发生器、UART接收器和UART发送器构成。UART发送器的用途是将准备输出的并行数据按照基本UART帧格式转为TXD信号串行输出。UART接收器接收RXD串行信号,并将其转化为并行数据。   波特率发生器就是专门产生一个远远高于波特率的本地时钟信号对输入RXD不断采样,使接收器与发送器保持同步。波特率发生器实际上就是一个分频器。可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数。波特率分频因子可以根据不同的应用需要更改。   由于串行数据帧和接收时钟是异步的,由逻辑1转为逻辑0可以被视为一个数据帧的起始位。然而,为了避免毛刺影响,能够得到正确的起始位信号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑0才可认定接收到的是起始位。由于内部采样时钟bclk周期(由波特率发生器产生)是发送或接收波特率时钟频率的16倍,所以起始位需要至少8个连续bclk周期的逻辑0被接收到,才认为起始位接收到,接着数据位和奇偶校验位将每隔16个bclk周期被采样一次(即每一个波特率时钟被采样一次)。如果起始位的确是16个bclk周期长,那么接下来的数据将在每个位的中点处被采样。

  • 发表了主题帖: MCU串口转CAN的思路和方法介绍

           在嵌入式产品开发过程中,可能会面临CAN路数不够的问题。如何选择合适的转换模块解决这个问题呢?以下将为您讲解几款模块的选型方法。   1.    应用场景   CAN总线是优秀的现场总线之一,已由当初的汽车电子扩散到各行各业。从工业自动化到新能源,从轨道交通再到航空航天,CAN总线技术在中国不断的应用和沉淀。     图 1 CAN总线数据帧结构   当应用CAN总线时,我们可能会面临以下问题:主控制器没有支持 CAN 控制器或者 CAN 路数不够。具体问题表现:早期产品通信使用的是 RS485 或 RS232 通信,现阶段需要将产品升级到能支持到 CAN 通信;受制于成本限制,主控 MCU 必须选择低端处理器,本身不带 CAN 控制器;开发的产品中需要的 CAN 路数远远大于 2 路,能支持两路以上 CAN 的 MCU 型号有限或成本过高。     图 2  LPC 系列间 CAN 路数对比      图 3  多路 CAN 应用场景   当 MCU 内部没有支持 CAN 控制器或者所需的 CAN 路数不能满足要求时,可以选择使用其他通信接口拓展 CAN 接口出来。常见的转换方法有串口转 CAN、以太网转 CAN、WIFI 转 CAN 以及光纤转 CAN,本文主要为大家介绍串口转 CAN 的思路和方法。     图 4  CAN 转换器产品   2.    如何选型   串口扩 CAN 的模块大体分为两种形式,一种是单纯的协议控制器芯片实现,如 MCP2515 和 MCP2517;另一种是通过高性能的 MCU 实现。相比于单纯的协议控制器芯片,MCU 方案的协议转换模块拥有以下优势:配置简便,配合上位机或串口指令集,几个简单的串口数据发送即可完成配置;缓存较大,在高速或数据吞吐量大时杜绝丢帧现象发生;性能优异,将复杂的协议转换及帧缓存完全集成于用户 MCU 之外,可减少用户 MCU 负担。   ZLG 立功科技·致远电子推出的串口转 CAN 模块主要有 CANFDSM、CSM300 两个系列,选型工作如何入手,我们从他们之间的区别入手。CANFDSM 是最新一代的串口转 CANFD 模块,在能匹配当前热门的 CANFD 基础上,还能完全兼容传统的 CAN2.0 协议。因此,如果您的产品选定的是 CANFD 协议,则只能使用新一代的 CANFDSM 模块。     图 5  链路层协议区别   如果产品中使用的是 CAN2.0A 或者 CAN2.0B 协议,我们继续对比选择。CANFDSM 不带 CAN 或者 CANFD 收发器,用户需自行增加隔离或者不隔离的收发器模块。而 CSM300 内部集成有 CAN 隔离收发器、CAN 控制器,因此可以直接连接 MCU 与 CAN 总线。     图 6  CSM300 与 CANFDSM 内部器件情况   以上讨论的情况是针对板载需求的应用,对于需要直接应用在设备中的场合又该如何选择呢?CANCOM 或者 CANFDCOM 绝对是您的首选。CANFDCOM 接口卡的 1~2 通道 CAN FD 接口均自带 2500VDC 电气隔离,静电等级为接触放电±8KV,浪涌±1KV,可有效避免因为不同节点地电位不同导致的回流损坏,特别适合于电动汽车与列车的测试。     图 7  串口转 CAN 设备   3.    应用电路   以 CANFDSM-100 为例 ,该类模块通用应用方式如下下。协议转换模块直接与 MCU 通过 UART 的 TX、RX 交叉连接通信,PIN3、PIN4 通过 CAN 隔离收发器 CTM3FD 连接到外部 CAN 总线上。需要注意的是,模块在使用前需要进行参数配置,使用 PIN7 使模块进入配置状态后再配合 MCU 的 AT 指令即可完整参数配置。此外,配合上位机软件亦可快速完成参数配置。          图 8  应用电路 MCU串口转CAN的思路和方法介绍   图 9  CANFDSM-100 管脚定义   4.    协议转换格式   串口转 CAN 模块提供透明转换、透明带标识、自定义协议等转换形式。

  • 发表了主题帖: ReSpeaker Core V2.0 打造蓝牙音响

    本帖最后由 Jacktang 于 2019-10-16 15:24 编辑 拿到新板先开箱看看 了解一下配置 Seeed 的 ReSpeaker Core v2.0 专为语音接口应用而设计。它基于四核 ARM Cortex A7 的 Rockchip RK3229,运行频率高达 1.5GHz,具有 1GB RAM。集成六个麦克风阵列,语音算法包括 DoA (波达方向定位技术),BF (波束成形),AEC (回声消除)等。 ReSpeaker Core v2.0 运行 GNU/Linux 操作系统。得益于功能强大且活跃的社区,可以使用现有软件和工具进行开发,测试和部署,从而实现产品的快速开发。 ReSpeaker Core v2.0 被设计为功能丰富的开发板。电路板由两个主要部分组成,第一部分是包含 CPU,内存 (RAM) 和 PMU 的中央核心模块。第二部分是包含如 eMMC,连接器和无线连接组件等外设的外部载板。可以通过 Seeed 的定制服务来定制其中一部分或两者。 产品特性 ·具有高性能SoC的一体化解决方案 ·1GB RAM & 4GB eMMC ·6 麦克风阵列 ·USB OTG 可外接 USB 设备 ·WiFi b/g/n 和 BLE 4.0 ·检测范围 : 约 5 米 ·Grove 接口 ·3.5mm 音频插孔和 JST2.0 连接器 ·8 通道 ADC,6 个用于麦克风阵列,2 个用于回采 ·基于 Debian 的 Linux 系统 ·C++ SDK 和 Python 封包 ·用于语音算法的 SDK ·  语音算法和功能 : ·  ·关键词唤醒 ·BF (波束成形) ·DoA (波达方向定位技术) ·NS (噪声抑制) ·AEC (回声消除) 和 AGC (自动增益控制)     接口和存储     ① **3.5mm 耳机插孔 : ** 输出音频。可以将有源扬声器或耳机插入此端口。 ② **USB OTG : ** 此 USB 端口用于通过 putty (或其他串口工具) 的串口模式连接到您的计算机。 ③ **USB 电源输入 : ** 此端口用于为 Respeaker Core v2.0 供电。 ④ **扬声器插孔 : ** 用于无源音响的输出音频。Jst 2.0 插座。 ⑤ **UART : ** 可以通过此 UART 端口将 ReSpeaker Core v2.0 与您的计算机连接。 ⑥ **8 GPIO 引脚 : ** 用于扩展应用的 GPIO。 ⑦ **SD 卡槽 : ** 插入 micro-SD 卡。 ⑧ **eMMC : ** Embedded Multi Media Card。您可以将镜像刻录到 eMMC 中,这样 ReSpeaker Core v2.0 可以从 eMMC 引导。 ⑨ **USB Host : ** 您可以通过这两个 USB Host 将 USB 设备 (如 USB 鼠标,USB 键盘和 USB 闪存盘) 插入 ReSpeaker Core v2.0。 Ⓐ **Ethernet : ** 访问互联网。 Ⓑ **HDMI : ** 输出视频。 Ⓒ **Bluetooth 及 WIFI 天线 : ** 用于 WIFI 和蓝牙的板载天线。我们还为 2.4G 天线和 PCB 天线提供了接口。 Ⓓ **Grove 接口 : ** 用于数字或 I2C 的 Grove 接口。   看完了这些基本信息资料,我们要准备一下,如下工具 ·ReSpeaker Core V2.0 ·Wi-Fi 网络 ·4GB (或更大) SD 卡和 SD 读卡器 ·PC 或 Mac ·USB To Uart Adapter (可选的) ·用于供电的 5V 1A Micro-USB 适配器 (可选的) ·两根 Micro-USB 线 首先来烧写系统,我用的是官方的respeaker-debian-9-lxqt-sd-20180801-4gb.img   官方链接http://wiki.seeedstudio.com/ReSpeaker_Core_v2.0/ (PS:这里要注意一下,官方链接中文界面和英文界面下下载出来的系统版本不同) 下载链接https://v2.fangcloud.com/share/7395fd138a1cab496fd4792fe5?folder_id=188000311814&lang=en 烧写系统前需要烧录软件,本人使用WIN7 64bit,官方推荐软件Etcher,下载链接https://www.balena.io/etcher/     系统烧写完成后就是把内存卡插入卡槽,上电(PS:这里注意2根USB线都插上,一个做供电,一个做串口,电脑端口供电不足会影响串口连接) 这步需要安装一个板子的CDC驱动,下载链接https://github.com/respeaker/get_started_with_respeaker/blob/master/files/ReSpeaker_Gadget_CDC_driver.7z 准备好串口工具,官方推荐putty,下载链接(自己百度吧,有绿色板无需破解)   上电了       查看一下端口   打开串口工具 使用 PUTTY,选择 Serial 协议,填入 ReSpeaker Core v2.0 对应的 COM 端口,115200 波特率,8 位,奇偶校验无,停止位 1,流量控制无。     点击OPEN,输入账号respeaker,密码respeaker     首先需要设置WIFI 输入sudo nmtui              # respeaker user needs sudo     带*号是已连接好的wifi,设计完成后退出 输入ip address 查询我们设备分配的网址     现在我们可以使用VNC来登录了     登录后有个界面     该界面下的功能需要自己去摸索。。。。。。 下面内容教如何把它打造成蓝牙音响 激活蓝牙 请输入以下命令更新并激活 ReSpeaker Core v2.0 的蓝牙 : sudo apt update sudo apt upgrade (这个操作是更新蓝牙部分,更新时长根据网络情况) 然后通过以下命令激活蓝牙 : sudo systemctl enable bt-auto-connect.service sudo reboot -f 激活后就可以用手机连接了 连接上后可以作为蓝牙音响使用 你以为就这样了,还有,可以把他作为主设备,加如另一个蓝牙设备,打造成TWS 步骤 1. 输入 bluetoothctl 打开蓝牙对话框。 步骤 2. 输入 scan on 扫描蓝牙设备。 步骤 3. 当 ReSpeaker Core v2.0 找到您的目标设备时,输入 scan off。     下面连接这个设备 步骤 4. 现在使用命令 pair + device ID 将蓝牙设备与 ReSpeaker Core v2.0 匹配。 步骤 5. 当看到消息 Pairing successful 时,输入 connect + device ID。 如果 Connection successful 弹出,配置成功了! 可以输入 exit 或 quit 以退出 shell,然后使用以下命令测试蓝牙设备。 这时候蓝牙播放音乐,2个音响同步 调节音量,输入alsamixer,打开音量控制台,按放向键控制        如您所见,ReSpeaker Core v2.0 背面有一个用户按钮。在这里我们提供了一个 python 演示来展示如何使用它。 ·步骤 1. 输入以下命令 : sudo pip install evdev ·步骤 2. 复制下面的代码并将其保存为 python 文件,我们将其命名为 usrer_button.py。 from evdev import InputDevice,categorize,ecodes   key = InputDevice("/dev/input/event0") for event in key.read_loop():     if event.type == ecodes.EV_KEY:         print(categorize(event)) ·步骤 3. 输入以下命令运行这个演示。 sudo python usrer_button.py     关于python 文件的创建与编写,请学习linux文件操作,本人不熟悉,现学先搞的 背部的跑马灯也可以控制 要激活板载 LED 灯环灯光效果,只需输入下面的命令即可。 $ sudo cp -f /home/respeaker/respeakerd/scripts/pixel_ring_server /usr/local/bin/ $ sudo chmod a+x /usr/local/bin/pixel_ring_server $ pixel_ring_server 现在您会看到 LED 灯环闪烁。 以下内容官方发的,本人未操作成功,不知道哪里出错 完成此部分后,能够通过关键字唤醒 ReSpeaker Core v2.0。 输入以下命令。 $ sudo cp -f /home/respeaker/respeakerd/scripts/avs_cpp_sdk_safe /usr/local/bin $ sudo chmod a+x /usr/local/bin/avs_cpp_sdk_safe $ sudo cp -f /home/respeaker/respeakerd/scripts/pixel_ring_server.service /etc/systemd/system/ $ sudo cp -f /home/respeaker/respeakerd/scripts/avs_cpp_sdk.service /etc/systemd/system/ $ sudo systemctl enable pixel_ring_server $ sudo systemctl enable avs_cpp_sdk $ sudo systemctl start pixel_ring_server $ sudo systemctl start avs_cpp_sdk 最后,呼叫 Snowboy,它会给您一个惊喜 ! 以上是上手试用,关于更高级的应用还需深入开发后

  • 发表了主题帖: CC3200LaunchPad改装红外温度计

    本帖最后由 Jacktang 于 2019-10-16 15:19 编辑        CC3200LaunchPad,如图,就不多评价了,性能啥的应该还可以,不过8266的性价比大家都懂(尤其是价格),一般玩wifi都玩8266,手里这块CC3200LaunchPad吃灰好久了,上边有个红外的温度传感器,TI的TMP006,感觉可以利用一下,做个温度计,省的吃灰。    材料 CC3200LaunchPad TMP1637数码管 杜邦线 microUSB电源线 开发环境 energia,好像是TI推出的,类似arduino的开发环境,库函数很好下载添加,简单粗暴实现功能 硬件连接 注意下载部分需要条线,不知道TI为啥设计这么复杂繁琐 数码管模块连线参考上图注释 没找到CC3200的库,随便用个红色板子画了个示意图: 红外温度传感器:        这个比较复杂,回头我单开一篇聊聊这个传感器,这个设计里我实用的是目标问题,因为感觉和环境温度比较接近 TMP006,TI说这款芯片的介绍是世界上首款单片数字IR MEMS温度传感器,首次为便携式消费电子产品实现非接触温度测量功能。 优势: 1. 体积小 2. 支持-40℃至+125℃宽范围工作温度,测温范围远远超过这个范围,因为红外测温测的是目标温度和环境温度的温差,只要温差电势不超过允许值(5.12mV)就可以 3. 红外测量速度块,这个是我说的,热敏电阻温度变化比较慢,比如从温暖的室内到寒冷的室外,热敏电阻需要一段时间才能准确测量环境温度,红外温度传感器原理不同,所以速度的会快。 测量了一段时间室内温度,和DHT11和DHT21(AM2301)对比,“Object Temperature”目标温度更接近对照传感器。 软件: 调用了这几个库函数 #include <Wire.h> #include "Adafruit_TMP006.h" #include "TM1637.h" Float数据转换显示部分:   dis_temp = (int16_t)objt;   ListDisp[0] = dis_temp/10;   ListDisp[1] = dis_temp%10;   dis_temp = (int16_t)(objt*10);   ListDisp[2] = dis_temp%10;   dis_temp = (int16_t)(objt*100);   ListDisp[3] = dis_temp%10;   tm1637.display(0,ListDisp[0]);   tm1637.display(1,ListDisp[1]);   tm1637.point(1);   tm1637.display(2,ListDisp[2]);   tm1637.display(3,ListDisp[3]); 结构: 找了个翻盖的盒子,正好放下两个东西,竖起来打开盖子,正好可以平稳放在桌面上,再给板子沾个安全带,防止立在桌面上倒下滚出来 最终显示效果: 室温23.94约24摄氏度,中间的小数点,你懂的,能看懂就行哈~

  • 2019-10-14
  • 发表了主题帖: 单片机必须要了解的的几个电路设计

    一、单片机上拉电阻的选择   大家可以看到复位电路中电阻R1=10k时RST是高电平 ,而当R1=50时RST为低电平,很明显R1=10k时是错误的,单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管,即便在截止状态时也会有少量截止电流,当R取的非常大时,微弱的截止电流通过就产生了高电平。   二、LED串联电阻的计算问题   通常红色贴片LED:电压1.6V-2.4V,电流2-20mA,在2-5mA亮度有所变化,5mA以上亮度基本无变化。   三、端口出现不够用的情况   这时可以借助扩展芯片来实现,比如三八译码器74HC138来拓展。   四、滤波电容   滤波电容分为高频滤波电容和低频滤波电容。   1、高频滤波电容一般用104容(0.1uF),目的是短路高频分量,保护器件免受高频干扰。普通的IC(集成)器件的电源与地之间都要加,去除高频干扰(空气静电)。   2、低频滤波电容一般用电解电容(100uF),目的是去除低频纹波,存储一部分能量,稳定电源。大多接在电源接口处,大功率元器件旁边,如:USB借口,步进电机、1602背光显示。耐压值至少高于系统最高电压的2倍。   五、三极管的作用   1、开关作用:   LEDS6为高电平时截止,为低电平时导通。限流电阻的计算:集电极电流为I,则基极电流为I/100(这里涉及到放大作用,集电极电流是基极的100倍),PN结电压0.7V,R=(5-0.7)/(I/100)   2、放大作用:   集电极电流是基极电流的100倍   3、电平转换:   当基极为高电平时,三极管导通,右侧的导线接地为低电平,当基极为低电平时,三极管截止,输出高电平。   六、数码管的相关问题   数码管点亮形成的数字由a,b,c,d,e,f,e,dp(小数点)构成,字模及真值表如上图。   七、上拉电阻   上拉电阻选取原则:   1、从节约功耗及芯片灌电流能力考虑应当足够大;电阻大,电流小。   2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。   3、对于高速电路,过大的上拉电阻可能会导致边沿变平缓。   综合考虑:上拉电阻常用值在1K到10K之间选取,下拉同理。   上下拉电阻:   上拉就是将不确定的信号通过一个电阻嵌位在高电平,下拉同理。   1、电平转换,提高输出电平参数值。   2、OC门必须加上拉电阻才能使用。   3、加大普通IO引脚驱动能力。   4、悬空引脚上下拉抗干扰。   八、按键抖动及消除   按键也是机械装置,在按下或放开的一瞬间会产生抖动,如下图:   消除方法有两种:软件除抖和硬件除抖,其中硬件除抖是应用了电容对高频信号短路的原理。   软件除抖是检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。

统计信息

已有302人来访过

  • 芯币:5126
  • 好友:--
  • 主题:1699
  • 回复:103
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


桃子瑶瑶 2019-10-12
你的实验很有意思
查看全部