深入理解AMetal,掌握蜂鸣器和温度采集接口设计

周立功单片机 2018-01-17 08:29 次阅读

周立功教授新书《面向AMetal框架与接口的编程(上)》,对AMetal框架进行了详细介绍,通过阅读这本书,你可以学到高度复用的软件设计原则和面向接口编程的开发思想,聚焦自己的“核心域”,改变自己的编程思维,实现企业和个人的共同进步。

第八章为深入理解AMetal,本文内容为8.3 蜂鸣器接口和8.4 温度采集接口。

8.3 蜂鸣器接口

>>> 8.3.1 定义接口

1. 接口命名

由于操作的对象是蜂鸣器(buzzer),因此,接口命名以“am_buzzer_”作为前缀。对于蜂鸣器,基本的操作是打开和关闭蜂鸣器,可定义相应的两个接口名为:

  • am_buzzer_on

  • am_buzzer_off

特别地,在一些应用场合,还需要类似蜂鸣器“嘀一声”这样的操作,即鸣叫一定的时间后自动停止。可以定义其接口名为:

  • am_buzzer_beep

  • am_buzzer_beep_async

这里定义了两个接口,都是用于蜂鸣器鸣叫指定的时间,二者的区别在于函数返回的时机不同。am_buzzer_beep 会等待鸣叫结束后返回,am_buzzer_beep_async 不会等待,函数立即返回,蜂鸣器鸣叫指定时间后自动停止。

显然,对于am_buzzer_beep_async 接口,在最开始的蜂鸣器接口设计中,很可能是不会想到的,该接口是在大量实际应用中得出的,由于在一些特殊的应用场景,不希望程序被阻塞,因此,需要提供am_buzzer_beep_async 这样的异步接口。

2. 接口参数

在LED 通用接口的设计中,由于在一个系统中,可能存在多个LED,这就必须使用某种方法区分不同的LED,如使用了唯一ID 号led_id 表示来区分系统中的多个LED。按照这种逻辑,是否也需要一个buzzer_id 来区分不同的蜂鸣器呢?

蜂鸣器的功能单一,是一种发声器件,在一个具体应用中,发声器件往往只有一个,没有必要使用多个蜂鸣器。因此,蜂鸣器可以看做系统的一个单实例设备,基于此,也就无需使用类似于buzzer_id 这样的参数来区分多个蜂鸣器了,对于打开和关闭蜂鸣器的接口,则无需任何参数,即:

  • am_buzzer_on(void);

  • am_buzzer_off(void);

特别地,对于am_buzzer_beep 和am_buzzer_beep_async 接口,虽无需参数来区分多个蜂鸣器,但由于其功能是鸣叫一定的时间,因此,还需要一个用于指定鸣叫时长的参数。

  • am_buzzer_beep(uint32_t ms);

  • am_buzzer_beep_async (uint32_t ms);

其中,ms 用于指定鸣叫时长,单位为毫秒。

3. 返回值

接口无特殊说明,直接将所有接口的返回值定义为int 类型的标准错误号。基于此,蜂鸣器控制接口的完整定义详见表8.5。

表8.5 蜂鸣器通用接口(am_buzzer.h)

其对应的类图详见图8.8。

图8.8 蜂鸣器接口类图

>>> 8.3.2 实现接口

1. 抽象的蜂鸣器设备类

蜂鸣器共计4 个通用接口,其中,am_buzzer_beep()和am_buzzer_beep_async()接口可以直接基于am_buzzer_on()和am_buzzer_off()接口实现,am_buzzer_beep()的实现详见程序清单8.24。

程序清单8.24 am_buzzer_beep()的实现

程序中,首先使用am_buzzer_on()打开蜂鸣器,若打开蜂鸣器失败(返回值为负数),则直接返回相应的错误号,若打开成功,则使用am_mdelay()延时指定的时间,最后关闭蜂鸣器。对于am_buzzer_beep_async()接口,其需要立即返回,不能在函数内部直接使用延时函数,可以基于软件定时器实现,范例程序详见程序清单8.25。

程序清单8.25 am_buzzer_beep_async()的范例程序

程序中,首先使用am_buzzer_on()打开蜂鸣器,若打开蜂鸣器失败(返回值为负数),则直接返回相应的错误号,若打开成功,则启动软件定时器,定时时间为指定的鸣叫时间,启动定时器后,函数立即返回。软件定时器定时时间到后,需要调用自定义回调函数__beep_timer_callback(),在回调函数中,关闭了软件定时器和蜂鸣器,鸣叫结束。

显然,软件定时器在使用前,需要初始化,以将__beep_timer_callback()函数作为其定时时间到后的回调函数,如:

初始化语句放在哪里呢?这里仅仅展示了使用软件定时器实现am_buzzer_beep_async()函数的范例,后文再介绍初始化软件定时器的合适时机。

由于am_buzzer_beep()和am_buzzer_beep_async()接口可以直接基于am_buzzer_on()和am_buzzer_off()实现,因此实现蜂鸣器接口的核心是实现am_buzzer_on()和am_buzzer_off()接口,按照LED 或HC595 的设计方法,可以抽象对应的两个方法。即:

虽然按照这种设计方法是完全可行的,但是考虑到on 和off 是一组相互对称的接口,功能是同属一类的,具有很大的相似性,因此,可以仅抽象一个方法,使用一个布尔类型的参数区分操作是打开还是关闭,比如:

可见,定义抽象方法并不一定是原封不动的按照接口定义抽象方法,可以作适当的调整,只要基于抽象方法,能够实现通用接口即可。

虽然只有一个抽象方法,但是为了保证结构的统一,也为了方便后续扩展(如新增抽象方法等),往往还是将抽象方法放到一个虚函数表中。即:

类似地,将抽象方法和p_cookie 定义在一起,即为抽象的蜂鸣器设备。如:

在前面实现am_buzzer_beep_async()接口时,使用到了软件定时器,显然,软件定时器是用于实现一个蜂鸣器鸣叫功能的,是与蜂鸣器设备相关的,其不应定义为全局变量,取而代之的是,直接定义在抽象设备结构体中,即:

抽象设备中定义的抽象方法需要由具体的蜂鸣器设备来完成,am_buzzer_on()和am_buzzer_off()接口则可以直接基于抽象方法实现。

在定义蜂鸣器接口时,由于蜂鸣器是单实例设备(系统中只有一个),因此没有在接口中定义区分蜂鸣器对象的参数,如ID 号或者句柄参数等,那么,在实现接口时,如何找到相应的设备呢?由于在系统中只有一个蜂鸣器设备,因此,可以直接使用一个全局变量来指向蜂鸣器设备,am_buzzer_on()和am_buzzer_off()的实现详见程序清单8.26。

程序清单8.26 am_buzzer_on 和am_buzzer_off ()的范例程序

其中,__gp_buzzer_dev 是指向蜂鸣器设备的指针,初始没有任何有效的蜂鸣器设备,因此初始值为NULL。显然,要正常使用蜂鸣器,就必须使__gp_buzzer_dev 指向有效的蜂鸣器设备,这就需要由具体蜂鸣器设备实现pfn_buzzer_set 抽象方法。

为了完成__gp_buzzer_dev 的赋值,需要定义一个设备注册接口,用于向系统中注册一个有效蜂鸣器设备:

其中,为了方便向系统中添加一个蜂鸣器设备时,避免直接操作蜂鸣器设备的各个成员,将需要赋值的成员通过参数传递给接口函数。其实现详见程序清单8.27。

程序清单8.27 向系统中添加蜂鸣器设备

该程序首先判定参数的有效性,然后完成了抽象设备中抽象方法和p_cookie 赋值,接着给全局变量__gp_buzzer_dev 的赋值,使其指向有效的蜂鸣器设备,最后,初始化了抽象设备中的软件定时器,便于实现异步的蜂鸣器鸣叫接口,由此可见,软件定时器的初始化操作是在添加一个蜂鸣器设备时完成的。

显然,接下来,就需要基于抽象的蜂鸣器设备派生具体的蜂鸣器设备,在具体的蜂鸣器设备中,完成抽象方法pfn_buzzer_set 的实现,并使用am_buzzer_dev_register()接口向系统中添加一个蜂鸣器设备,使得用户可以使用蜂鸣器通用接口操作到具体有效的蜂鸣器。

为了便于查阅,如程序清单8.28 所示展示了蜂鸣器设备接口文件(am_buzzer_dev.h)的内容。其对应的类图详见图8.9。

程序清单8.28 am_buzzer_dev.h 文件内容

图8.9 抽象的蜂鸣器设备类

2. 具体的蜂鸣器设备类

以使用PWM 输出控制蜂鸣器发声为例,简述具体蜂鸣器设备的实现方法。首先应该基于抽象设备类派生一个具体的设备类,其类图详见图8.10,可直接定义具体的蜂鸣器设备类,如:

图8.10 具体的蜂鸣器设备类

am_buzzer_pwm_dev_t 即为具体的蜂鸣器设备类。具有该类型后,即可使用该类型定义一个具体的蜂鸣器设备实例,即:

特别地,由于蜂鸣器是单实例设备,不能够使用该类型定义多个实例,因此,可以直接在具体设备实现的文件内部定义一个蜂鸣器设备实例,无需用户使用该类型自定义设备实例。基于此,am_buzzer_pwm_dev_t 类型无需开放给用户,可以直接定义在.c 文件中,由于am_buzzer_pwm_dev_t 类型无需开放给用户,仅内部使用,因此可以修改类型名为双下划线“__”开头,如在am_buzzer_pwm.c 文件中定义设备类型以及对应的设备实例如下:

在使用PWM 输出控制蜂鸣器时,需要知道PWM 的句柄,通道号等相关信息,这些信息需要保存在设备中,因此更新设备类型的定义如下:

显然,这些成员需要初始化后才能使用,定义初始化函数的原型为:

其中,pwm_handle 为标准的PWM 服务句柄,chan 为PWM 通道号,duty_ns 和period_ns分别指定了输出PWM 波形的脉宽和周期,决定了蜂鸣器鸣叫的响度和频率,比如,AM824-Core 板载的蜂鸣器。

若使用SCT 输出PWM,由于PIO0_24 对应SCT 的通道1,因此初始话函数的调用形式如下:

程序中,使用了am_lpc82x_sct0_pwm_inst_init()函数获取到了PWM 句柄,使用了通道1,并设定输出PWM 的周期为400000ns,即 2.5KHz (1000000000 / 400000),脉宽恰好为周期的一半,即输出PWM 的占空比为50%。初始化函数的实现范例详见程序清单8.29。

程序清单8.29 初始化函数实现范例

该程序首先判定了参数的有效性,然后完成了设备实例中相关成员的赋值,接着调用了am_buzzer_dev_register()函数,将蜂鸣器设备添加到系统中,最后配置了PWM 输出通道的脉宽和周期。添加设备时,将p_funcs 赋值为&__g_buzzer_pwm_drv_funcs,p_cookie 赋值为具体设备的地址,即p_cookie 指向了设备自身。__g_buzzer_pwm_drv_funcs 中包含了抽象方法的具体实现,完整定义详见程序清单8.30。

程序清单8.30 抽象方法的实现

为了便于查阅,如程序清单8.31 所示展示了蜂鸣器设备接口文件(am_buzzer_pwm.h)的内容。

程序清单8.31 am_buzzer_pwm.h 文件内容

由此可见,与其它具体设备的接口文件(详见程序清单8.14、程序清单8.17 和程序清单8.23)相比,不同的是,其没有包含具体设备类型的定义,初始化接口的第一个参数,也不是指向具体设备的指针。这是由于蜂鸣器是单实例设备,系统中最多只能定义一个,因此直接在实现文件的内部完成了设备实例的定义,相关类型无需开放给用户。同理,由于是单实例设备,初始化函数初始化的必然是文件内部定义的设备实例,无需额外使用指向设备的指针指定要初始化的设备。

至此,详细介绍了LED 通用接口、HC595 接口和蜂鸣器接口,它们代表了AMetal 中典型的3 种类型的设备接口。

  • LED 通用接口:使用唯一ID 区分不同设备;

  • HC595 接口:使用句柄区分不同的设备,句柄本质上是指向设备的指针;

  • 蜂鸣器接口:不使用任何参数区分不同设备,是一种单实例设备。

8.4 温度采集接口

>>> 8.4.1 定义接口

1. 接口命名

由于操作的对象是温度(temperature),为了缩短接口名,将temperature 缩写为temp,因此,接口命名以“am_temp_”作为前缀。对于温度采集,主要的操作就是读取当前温度。可定义接口名为:

  • am_temp_read

2. 接口参数

显然,一个系统中可能存在多个温度传感器,可以简单的使用句柄来区分不同的温度传感器,因此第一个参数的类型定义为温度传感器句柄,和HC595 设备类似,其应该定义为指向抽象温度设备的指针,假定抽象温度设备的类型为am_temp_dev_t,则handle 的类型可以定义为:

读取温度接口的核心功能是返回当前的温度值,首先需要定义温度值的类型,然后再确定温度值的返回方式:通过返回值返回或通过出口参数返回。

通常使用1 位小数表示温度值,比如,37.5℃,由此可见,温度值需要使用小数表示,但要求的精度并不高,往往只会精确到小数点后一位,因此温度值可以使用float 类型表示。

由于AMetal 运行的实际硬件平台往往是以低端的Cortex-M0、Cortex-M0+和Cortex-M3等作为内核的芯片,这些芯片没有硬件浮点运算单元,浮点运算的效率很低。因此,AMetal平台中,不建议使用浮点类型,据此,可以使用整数表示温度值,同时,为了保证一定的精度,使用整数表示扩大1000 倍后的温度值。如实际温度为37.5 度,则使用整数37500 表示。使用这种方法巧妙的避免了使用浮点类型,但也能保证实际温度的精度为小数点后三位。由于温度可能存在负值,因此,使用有符号的32 位数据来表示温度值,即温度值的类型定义为int32_t。

在通用接口中,返回值往往定义为int 类型的错误号,且使用负数表示出错,显然,如果使用返回值直接返回温度,用户将无法区分温度为负数和读取温度出错的情况。为此,使用一个输出参数,用以返回温度值,即定义一个int32_t 类型的指针作为输出参数:

  • am_temp_read(am_temp_handle_t handle, int32_t *p_temp)

其中,handle 为温度传感器的句柄,p_temp 为输出参数,用于返回当前的温度值,其表示的温度值为实际温度值的1000 倍。

3. 返回值

接口无特殊说明,直接将所有接口的返回值定义为int 类型的标准错误号。基于此,完整的读取温度接口的原型为:

其对应的类图详见图8.11。

图8.11 温度采集接口

>>> 8.4.2 实现接口

1. 抽象的温度采集设备类

根据读取温度接口,可以定义相应的抽象方法,并将其存放在一个虚函数表中:

类似地,将抽象方法和p_cookie 定义在一起,即为抽象的温度采集设备。比如:

显然,具体的温度采集设备直接从抽象的温度采集设备派生,然后由具体的温度采集设备根据实际的硬件,实现读取温度的抽象方法。

在读取温度接口中,使用了handle 作为第一个参数,其本质上是指向设备的指针,读取温度接口可以直接调用抽象方法实现,详见程序清单8.32。

程序清单8.32 读取温度接口实现

在接口实现中,没有与硬件相关的实现代码,仅仅是简单的调用了抽象方法。抽象方法需要由具体的温度采集设备来实现。类似地,由于读取温度接口的实现非常简单,往往将其实现直接以内联函数的形式存放在.h 文件中。

为便于查阅,如程序清单8.33 所示展示了抽象温度采集设备接口文件(am_temp.h)的内容,其包含了抽象温度采集设备相关的抽象方法定义、类型定义和接口实现,对应的类图详见图8.12。

图8.12 抽象的温度采集设备类

程序清单8.33 am_temp.h 文件内容

2. 具体的温度采集设备类

以使用LM75B 温度传感器实现温度采集为例,简述具体温度采集设备的实现方法。首先应该基于抽象设备类派生一个具体的设备类,其类图详见图8.13,可直接定义具体的温度采集设备类。比如:

图8.13 具体的温度采集设备类

am_temp_lm75_t 为具体的温度采集设备类,具有该类型后,即可使用该类型定义一个具体的温度采集设备实例:

LM75B 是标准的I2C 从机器件,需要知道LM75B 的从机地址,才能使用I2C 总线读取LM75B 中的温度数据。由于从机地址与LM75 外部引脚电平相关,因此LM75 的地址信息需要由用户根据实际硬件电路设置。将需要由用户提供的设备相关信息存放到一个新的设备信息结构体类型中。比如:

当使用AM824-Core 上板载的LM75B 时,LM75B 的7 位I2C 从机地址为1001A2A1A0,由于A0、A1、A2 均与地连接为低电平,因此可得板载LM75B 的7 位从机地址为1001000,即:0x48。基于此,板载LM75B 对应的设备实例信息可以定义如下:

同理,在设备类中需要维持一个指向设备信息的指针。此外,由于使用I2C 接口从LM75B中读取温度数据时,LM75B 相当于是一个I2C 从设备,为了使用I2C 接口与之通信,需要为LM75B 定义一个与之对应的I2C 从设备,新增两个成员,完整的温度采集设备定义即为:

显然,在使用I2C 接口从LM75B 中读取温度之前,需要完成设备中各成员的赋值,这些工作通常在驱动的初始化函数中完成,定义初始化函数的原型为:

  • p_lm75 为指向am_temp_lm75_t 类型实例的指针;

  • p_devinfo 为指向am_temp_lm75_info_t 类型实例信息的指针。

handle 为I2C 句柄,便于使用I2C 接口读取温度数据,初始化函数的返回值即为温度采集设备句柄,其调用形式如下:

返回值即为温度采集设备的句柄,可以作为温度采集接口的第一个参数(handle)的实参,初始化函数的实现范例详见程序清单8.34。

程序清单8.34 初始化函数实现范例

该程序首先建立了标准的I2C 从设备,便于后续使用I2C 接口读取数据,然后初始化了p_info 成员,接着完成了抽象温度采集设备中p_funcs 和p_cookie 的赋值,最后返回设备地址作为用户操作温度采集设备的句柄。pfuncs 赋值为了&__g_temp_lm75_drv_funcs,其中包含了读取温度抽象方法的具体实现,完整定义详见程序清单8.35。

程序清单8.35 抽象方法的实现

在读取温度的实现函数__temp_lm75_read()中,首先使用I2C 接口从LM75B 中读取出当前的实际温度值,详见程序清单8.35(6);接着对数据进行简单处理,两字节数据整合为一个16 位有符号的温度值temp,详见程序清单8.35(10 ~ 11);最后,确认p_temp 指针有效后,将temp 乘以125,再除以32,最终的结果作为输出的温度值。

为什么将temp 乘以125,然后再除以32 呢?这是因为LM75B 中直接读取的数据时实际温度值的256倍,即:实际温度= temp / 256。

而温度采集接口需要返回的温度值是实际温度的1000 倍,即:

* p _ temp=实际温度*1000 = temp/ 256*1000 = temp*1000/ 256

化简可得:

为了便于查阅,如程序清单8.36 所示展示了具体温度采集设备(LM75B)接口文件(am_temp_lm75.h)的内容。

程序清单8.36 am_temp_lm75.h 文件内容

热门推荐

原文标题:周立功:深入理解AMetal——蜂鸣器接口和温度采集接口

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

i.MX28x系列无线工控板中的IoT-A28LI主板整体布局

基于AWorks平台的ARM9与Cortex-A系列工控主板,具有丰富的扩展接口,可以扩展zigbe....

的头像 ZLG致远电子 发表于 05-19 08:56 464次阅读
i.MX28x系列无线工控板中的IoT-A28LI主板整体布局

基于AWorks平台A3352系列无线核心板设计方案

基于AWorks平台的A6G2C(Cortex-A7内核)与A3352(Cortex-A8内核)系列....

的头像 ZLG致远电子 发表于 05-18 08:56 488次阅读
基于AWorks平台A3352系列无线核心板设计方案

ms%2==0,ms%10==0为什么可以作为长按按键技术处理?

发表于 05-18 00:11 290次阅读
ms%2==0,ms%10==0为什么可以作为长按按键技术处理?

周立功CANTest软件

发表于 05-17 13:41 106次阅读
周立功CANTest软件

M3352核心板及评估底板及产品设计框图

为了便于用户快速开发产品,ZLG致远电子研发设计了基于AWorks平台的,集MCU、DDR3、Nan....

的头像 周立功单片机 发表于 05-16 09:09 702次阅读
M3352核心板及评估底板及产品设计框图

集MCU、DDR、NandFlash、硬件看门狗等等于一体核心板

为了便于用户快速开发产品,ZLG致远电子研发设计了基于AWorks平台的,集MCU、DDR、Nand....

的头像 周立功单片机 发表于 05-15 09:15 908次阅读
集MCU、DDR、NandFlash、硬件看门狗等等于一体核心板

AWorks开发者越来越多,却只有极少数了解其精髓

迄今为止,知道AWorks的开发者越来越多,却只有极少数了解其精髓,在即将发布之际,周立功教授撰写了....

的头像 ZLG致远电子 发表于 05-07 08:34 1086次阅读
AWorks开发者越来越多,却只有极少数了解其精髓

周立功的AWorks哲学思想

苹果之所以成为全球最赚钱的公司,关键在于产品的性能超越了用户的预期,且因为大量可重用的核心领域知识,....

的头像 人间烟火123 发表于 05-04 14:38 1393次阅读
周立功的AWorks哲学思想

基于Ametal平台开发,快速完成开发设计!

传统旋钮采用机械式结构,面板上需要开孔,长时间使用易磨损、进灰尘等,采用新型吸附式磁旋钮可以轻松解决....

的头像 周立功单片机 发表于 05-04 09:11 1160次阅读
基于Ametal平台开发,快速完成开发设计!

隔离电源自主搭建VS模块方案设计

电源是电子系统的心脏,工业应用中,为系统前级或接口供电的电源一般都要求有高的抗干扰性能,各种隔离型的....

的头像 ZLG致远电子 发表于 04-27 08:46 1472次阅读
隔离电源自主搭建VS模块方案设计

容量Flash器件编程设计,体验极速高效的全新烧录感受!

它拥有极致速度、高效压杆;它自带独立操作系统,省去PC机方便产线部署;它拥有独特的母片分析”“文件分....

的头像 周立功单片机 发表于 04-24 08:42 1336次阅读
容量Flash器件编程设计,体验极速高效的全新烧录感受!

MCU控制蜂鸣器演奏音乐小程序

程序功能:MCU控制蜂鸣器演奏歌曲《祝你平安》 ,拨码开关设置:将BUZZER位拨至ON,其余位拨至....

的头像 算法&编程学院 发表于 04-20 09:17 745次阅读
MCU控制蜂鸣器演奏音乐小程序

开发板产生不同频率声音的程序(两个定时器的使用)

程序功能:用固定频率的方波驱动蜂鸣器,共16种音调;在蜂鸣器发出不同音调的同时,LED发光以二进制数....

的头像 算法&编程学院 发表于 04-20 09:12 449次阅读
开发板产生不同频率声音的程序(两个定时器的使用)

只需七步,就可了解逻辑分析仪测试

时序和协议是数字系统调试的两大关键点,也是逻辑分析仪最能发挥价值的地方。如何使用逻辑分析仪快速地完成....

的头像 ZLG致远电子 发表于 04-19 09:44 1053次阅读
只需七步,就可了解逻辑分析仪测试

隔离反激和非隔离BUCK应用设计方案

在产品设计时,倘若没有考虑应用环境对电源隔离的要求,产品到了应用时就会出现因设计方案的不当导致的系统....

的头像 周立功单片机 发表于 04-13 08:35 1850次阅读
隔离反激和非隔离BUCK应用设计方案

储能行业如何有效解决电能质量问题?

时下,储能行业正在大力发展,锂离子电池和铅蓄电池是该领域应用最多的两种技术,但除了电池,还有哪些问题....

的头像 ZLG致远电子 发表于 04-11 09:30 894次阅读
储能行业如何有效解决电能质量问题?

一文看懂自制简易蜂鸣器的方法和步骤

本文开始介绍了蜂鸣器的概念,其次阐述了蜂鸣器原理与选购技巧,最后详细介绍了自制简易蜂鸣器的方法和步骤....

发表于 04-08 17:30 986次阅读
一文看懂自制简易蜂鸣器的方法和步骤

基于Proteus单片机的音乐演奏实现系统

本文提出的一种基于 Proteus 的单片机演奏音乐的方法,非常简单实用,且该方法基于软件来实现的....

发表于 04-08 09:27 225次阅读
基于Proteus单片机的音乐演奏实现系统

解决芯片量产问题,MCU成最大焦点

随着越来也多的电子厂商不断为物联网(IoT)推出新产品,全球MCU出货量正出现巨大成长动能。特别是当....

的头像 ZLG致远电子 发表于 03-30 08:49 2077次阅读
解决芯片量产问题,MCU成最大焦点

滤芯防伪技术,可以分布式读取8处防伪标签

空气净化器、净水器市场发展迅猛,很多品牌商都抢占到了自己的份额。但在实际使用过程中却发现很多用户长期....

的头像 周立功单片机 发表于 03-28 08:29 940次阅读
滤芯防伪技术,可以分布式读取8处防伪标签

一款跨界核心板,让物联网设计如MCU系统便捷

M1052跨界核心板让设计者如开发普通MCU系统般简便,却拥有528MHz主频处理器的“不凡”性能。

的头像 ZLG致远电子 发表于 03-23 08:29 2786次阅读
一款跨界核心板,让物联网设计如MCU系统便捷

勇敢的芯伴你玩转Altera FPGA连载55:蜂鸣器开关实例

发表于 03-21 17:24 470次阅读
勇敢的芯伴你玩转Altera FPGA连载55:蜂鸣器开关实例

三句话讲清环路分析,轻松检测控制系统稳定性

尽管环路分析是检测控制系统稳定性的重要手段,但是测试过程中有诸多细节需要注意。如何快速理解环路分析的....

的头像 ZLG致远电子 发表于 03-21 08:04 1191次阅读
三句话讲清环路分析,轻松检测控制系统稳定性

单片机驱动蜂鸣器三极管导通了吗,新手不懂

发表于 03-20 17:21 455次阅读
单片机驱动蜂鸣器三极管导通了吗,新手不懂

勇敢的芯伴你玩转Altera FPGA连载54:PWM蜂鸣器驱动之FPGA配置芯片固化

发表于 03-19 21:01 546次阅读
勇敢的芯伴你玩转Altera FPGA连载54:PWM蜂鸣器驱动之FPGA配置芯片固化

面对大烧录量和严格性能要求,如何高效快速生产汽车零组件

一辆光鲜亮丽的汽车上有琳琅满目的电子部件,每一个电子部件往往都拥有它自己的芯片,每个芯片又有它独立的....

的头像 ZLG致远电子 发表于 03-19 08:44 2689次阅读
面对大烧录量和严格性能要求,如何高效快速生产汽车零组件

PWM蜂鸣器驱动之FPGA在线下载配置图解

如图7.20所示,在弹出的Hardware Setup页面里,选择当前硬件为USB Blaster,....

的头像 电子技术应用ChinaAET 发表于 03-18 10:15 768次阅读
PWM蜂鸣器驱动之FPGA在线下载配置图解

勇敢的芯伴你玩转Altera FPGA连载53:PWM蜂鸣器驱动之FPGA在线下载配置

发表于 03-16 15:35 747次阅读
勇敢的芯伴你玩转Altera FPGA连载53:PWM蜂鸣器驱动之FPGA在线下载配置

周立功现身说法:谈工程师如何克服职业痛点培养对市场的前瞻性

为什么很多工程师创业失败?其根本原因不是资金,而是因为不了解市场,对市场缺乏一定前瞻性的认识,做出来....

的头像 工程师人生 发表于 03-14 10:53 465次阅读
周立功现身说法:谈工程师如何克服职业痛点培养对市场的前瞻性

PWM蜂鸣器驱动之引脚分配

在Pin Planner界面最下面出现的“Node Name”一列中,有我们的3个信号接口,这里“L....

的头像 电子技术应用ChinaAET 发表于 03-13 10:09 840次阅读
PWM蜂鸣器驱动之引脚分配

Zigbee无线模块在流速计上的应用方案

新时代的智慧城市,要求全面提升监控力度和智能化管理水平。我国广阔的水域,将会建设更多无人值班监测点,....

的头像 ZLG致远电子 发表于 03-12 09:40 2437次阅读
Zigbee无线模块在流速计上的应用方案

如何通过技巧快速进行选型?电源设计浅谈

电容是开关电源中的再普通不过的器件,它可以用来降低纹波噪声,可以用来提高电源的稳定性以及瞬态响应性,....

的头像 ZLG致远电子 发表于 03-10 09:34 3319次阅读
如何通过技巧快速进行选型?电源设计浅谈

ZLG携手NXP举行i.MX RT 跨界处理器全国巡回研讨会

2018年3月20号—4月3号,ZLG将携手NXP在全国6大城市(广州、深圳、上海、杭州、南京、北京....

的头像 ZLG致远电子 发表于 03-09 15:24 1259次阅读
ZLG携手NXP举行i.MX RT 跨界处理器全国巡回研讨会

MCU+MPU双处理器架构在电力馈线终端中应用

目前市面上大多电力FTU产品均采用MCU+MPU双处理器架构,以利用MCU的实时性和MPU上运行的稳....

的头像 周立功单片机 发表于 03-05 08:41 1631次阅读
MCU+MPU双处理器架构在电力馈线终端中应用

一个好电源设计,为何要非常重视输出纹波噪声

纹波噪声是衡量电源的一个重要指标,一个好的电源必须要把输出纹波噪声控制在一个合理的范围内。但一般有哪....

的头像 ZLG致远电子 发表于 03-05 08:35 2235次阅读
一个好电源设计,为何要非常重视输出纹波噪声

以太网无法取代CAN的原因是什么?

CAN总线通过物理信号来进行连接,而以太网则是交换机连接。CAN总线的结构非常简单,仅需拉两条线而已....

发表于 03-02 09:48 249次阅读
以太网无法取代CAN的原因是什么?

勇敢的芯伴你玩转Altera FPGA连载50:PWM蜂鸣器驱动之综合、实现与配置文件产生

发表于 03-01 19:30 1003次阅读
勇敢的芯伴你玩转Altera FPGA连载50:PWM蜂鸣器驱动之综合、实现与配置文件产生

工业通讯现场,为何最担心浪涌产生的瞬态过压和过流!

各位工程师在工业通讯现场,最担心的是通讯网络因浪涌产生的瞬态过压和过流,导致总线通讯网络出现发送错误....

的头像 周立功单片机 发表于 02-28 08:42 1500次阅读
工业通讯现场,为何最担心浪涌产生的瞬态过压和过流!

勇敢的芯伴你玩转Altera FPGA连载49:PWM蜂鸣器驱动之引脚分配

发表于 02-27 21:50 999次阅读
勇敢的芯伴你玩转Altera FPGA连载49:PWM蜂鸣器驱动之引脚分配

勇敢的芯伴你玩转Altera FPGA连载48:PWM蜂鸣器驱动之功能概述

发表于 02-23 19:50 760次阅读
勇敢的芯伴你玩转Altera FPGA连载48:PWM蜂鸣器驱动之功能概述

如何通过占空比的方式来控制蜂鸣器声音大小

发表于 02-22 17:44 568次阅读
如何通过占空比的方式来控制蜂鸣器声音大小

如何解决照明灯具的测试测量痛点

家用照明灯具在出厂时,都是需要经过测量装备严格的检测,当照明灯在正常工作或特定模式下时,电压、电流和....

的头像 电子发烧友网工程师 发表于 02-20 03:28 1981次阅读
如何解决照明灯具的测试测量痛点

电压波动与电压闪变对比分析

电压闪变与波动,两个形影不离的兄弟,经常一起出现在我们的视野中。闪变外向,我们可以从外表觉察到它的变....

的头像 电子发烧友网工程师 发表于 02-16 09:40 1066次阅读
电压波动与电压闪变对比分析

如何确保对吸尘器的心脏进行可靠“体检”

人类正是由于心脏不断地跳动才得以生存;吸尘器也是一样,只有心脏安好,才能更好的吸尘。人类为了确保身....

的头像 电子发烧友网工程师 发表于 02-15 03:33 1010次阅读
如何确保对吸尘器的心脏进行可靠“体检”

组建RS-485总线网络时,终端电阻实战案例

RS-485总线具有结构简单、成本低等优点,但各位工程师在组建RS-485总线网络时,为提升整个网络....

的头像 周立功单片机 发表于 02-08 09:51 2638次阅读
组建RS-485总线网络时,终端电阻实战案例

分析电能质量分析仪一个案例中的测试效果

小到家庭,大到企业,能耗问题一直以来都是大家所关注重视的问题。中国企业的能耗一直很高,国家也努力促使....

的头像 ZLG致远电子 发表于 02-08 09:44 2367次阅读
分析电能质量分析仪一个案例中的测试效果

ZLG致远电子E6000率先支持新国标 电压暂降和短时中断的定义

国家标准2013年第25号批准发布公告,由国网福建电科院负责编制的国家标准《电能质量电压暂降与短时中....

的头像 电子发烧友网工程师 发表于 02-05 11:11 1915次阅读
ZLG致远电子E6000率先支持新国标 电压暂降和短时中断的定义

电子产品性能提升中,如何防止“安全”掉链子

最火手游“王者荣耀”将玩家分成“青铜、白银、黄金...”等段位。笔者从青铜开始打到最强王者。是不是电....

的头像 ZLG致远电子 发表于 02-05 09:44 2168次阅读
电子产品性能提升中,如何防止“安全”掉链子

互联网温控器芯片应用及整体方案

LG致远电子基于NXP的KL16、Semtech的SX1278芯片开发的低功耗、高性能的LoraNe....

的头像 周立功单片机 发表于 02-05 09:19 2140次阅读
互联网温控器芯片应用及整体方案

一款优质电源必然具备:启动性设计

一款优质电源必然具备启动性能好、转换效率高等特点,但你有没有想过宽压电源的输入电压范围那么广,而电源....

的头像 ZLG致远电子 发表于 02-02 09:33 5152次阅读
一款优质电源必然具备:启动性设计

几种驱动蜂鸣器的编程示例

介绍几种在S3F9454/9444下驱动蜂鸣器的编程示例,供参考 A.第一种,普通IO高低电平驱动法....

的头像 算法&编程学院 发表于 01-30 18:27 1281次阅读
几种驱动蜂鸣器的编程示例

如何制作柜子开合报警装置 防盗更安全

防盗报警系统就是利用物理方法或电子技术,自动探测监测区域内是否有侵入行为,便自动产生报警信号。如何在....

的头像 人间烟火123 发表于 01-30 08:32 718次阅读
如何制作柜子开合报警装置 防盗更安全

基于vhdl蜂鸣器程序设计详解

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“F....

发表于 01-29 15:08 403次阅读
基于vhdl蜂鸣器程序设计详解

计数报警器电路设计方案汇总(多款模拟电路设计原理图详解)

本文主要介绍了计数报警器电路设计方案汇总(多款模拟电路设计原理图详解),方案二主要由直流电源电路(整....

发表于 01-29 10:30 730次阅读
计数报警器电路设计方案汇总(多款模拟电路设计原理图详解)

蜂鸣器报警器电路图大全(五款模拟电路设计原理图详解)

本文主要介绍了蜂鸣器报警器电路图大全(五款模拟电路设计原理图详解)。方案二电路是通过运算放大器进行驱....

发表于 01-29 09:36 6399次阅读
蜂鸣器报警器电路图大全(五款模拟电路设计原理图详解)

为什么你的手机实际内存比标称内存要少很多

现在市面上存在NAND FLASH和eMMC这两种的大容量存储介质,就是各类移动终端及手机的主要存储....

发表于 01-29 07:40 846次阅读
为什么你的手机实际内存比标称内存要少很多

如何使用RTC实时时钟进行应用场景开发

虽然该程序的逻辑与程序清单6.70 所示的应用程序基本一致,但由于使用的接口是特殊功能控制接口,与具....

的头像 周立功单片机 发表于 01-25 09:15 2056次阅读
如何使用RTC实时时钟进行应用场景开发

13.56MHz读写卡模块通信接口及选型指南

论选择I2C 或UART 通信方式,只要基于实例句柄编程,则应用程序与具体的通信方式无关。

的头像 周立功单片机 发表于 01-25 09:09 2414次阅读
13.56MHz读写卡模块通信接口及选型指南

键盘与数码管接口典型应用电路及寄存器

当矩阵扩大到一定数目时,逐行扫描的方法会显得费时,如果需要对2 个以上的按键“同时”操作时,则处理起....

的头像 周立功单片机 发表于 01-22 09:27 2576次阅读
键盘与数码管接口典型应用电路及寄存器