分类
设计开发

无线嵌入平台编程模式

无线嵌入平台(wbed)是TinyWSN无线模块的一种使用方式,用户程序(usr)和系统程序(sys)运行在同一处理器上,用户程序可以独立开发,动态下载,类似unix系统中多进程(multi-process)的模式,下面是wbed sdk的源码链接:
https://gitee.com/tinywsn/fw-stm32l1-wbed-usr
支持GCC和IAR两种开发环境,使用这种模式可以带来很多好处

  • 共有同一硬件平台,系统更加精简,成本可以更低
  • 用户程序和系统程序之间消息通信模式,更加简单和可靠
  • 可以同步高效地工作,包括接收,发送,睡眠,唤醒等等节拍,系统功耗可以更低
  • wbed sdk可以提供底层驱动以及各类常见传感器驱动

编程需注意的事项:

  • 可使用的内存空间通过参数ctx传入,避免使用全局变量
  • 使用可重入的库函数,对于STM32而言,使用LL_DRV,对于glibc,使用其中可重入版本 xxxx_r
  • 使用异步消息模式,避免毫秒以上的轮询等待操作

具体实现可以参考下面的例程

接口消息定义和说明
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-intf/

例1-简单的上下行数据的收发
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex1/

例2-单总线DHT1X温湿度传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex2/

例3-模拟输出的光敏电阻传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex3/

例4-I2C总线AM2320温湿度传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex4/

例5-单总线DS18B20温度传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex5/

例6-I2C总线BH1750光照传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex6/

例7-I2C总线SHT2X温湿度传感器
http://www.tinywsn.net/wordpress/index.php/docs/manual/node/node-wbed/node-wbed-ex7/

更多传感器支持增加中…

分类
设计开发

TinyGW软件的接口定义

TinyGW是网关软件的一个简易实现,主要完成TinyWSN和MQTT之间双向数据转换,节点数据采集的传感器数据,通过网关TinyGW发送到MQTT服务器,各种MQTT的客户端(PC端,Android端,等等)接受传感器数据,同时还可以发起下行的控制。为了便于客户端展示和输入,确定数据的格式为文本,同时由于TinyWSN空中数据帧有效负载比较小(41字节),命令和数据格式尽可能短。下图是TinyGW在MQTT注册的接口, xxxx是在TinyGW在cfg.jsn中配置的标识。

类型topic说明
publictinygw_xxxx/node_tx节点发布数据
subscribetinygw_xxxx/node_rx节点接受数据
publictinygw_xxxx/gate_tx网关发布数据
subscribetinygw_xxxx/gate_rx网关接受数据

node_tx格式

测量告警:addr/type, data [,data]
type -> val | ala
data -> id, digits [scale unit]
id -> t | rh | irf | irb | vib | snd | smk | heat | rain | ang | lgt
scale -> f | p | n | u | m | k | M
unit-> C | % | V | A

命令响应:addr/rsp, obj, val
obj -> led | wdt

node_rx格式

设置查询:addr/cmd, obj [,val] [/flag]
cmd -> set | qry
obj -> led | wdt
flag -> b | f

gate_tx格式

设置查询:cmd, obj [,val]
cmd -> dsc
obj -> wsn

gate_tx格式

命令响应:rsp, obj ,val
obj -> wsn
val -> init

通知消息:urc ,obj ,val
obj -> wsn
val -> done

网关软件TinyGW的功能具体描述:
http://www.tinywsn.net/wordpress/index.php/docs/manual/gateway/gateway-tinygw/

分类
设计开发

一种CRC代码生成工具

在数据通讯领域,为了保证数据的正确,就不得不采用检错的手段,CRC是最常见的一种,它的有长度8位,16位,32位的各种生成多项式,输入和输出还可能翻转,可以直接bit操作或表驱动进行编解码,手工编写编解码程序不但繁琐,而且容易出错。
pycrc是一种基于python的CRC嵌入C代码生成器,它下载链接
https://pycrc.org/, 它可以直接输出符合C89, ANSI, C99的C代码,它是一个命令行工具,下面是它的一些常见选项

选项说明
--width=NUMuse NUM bits in the Polynomial
--poly=HEXuse HEX as Polynomial
-reflect-in=BOOLreflect the octets in the input message
xor-in=HEXuse HEX as initial value
--reflect-out=BOOLreflect the resulting checksum before applying the XorOut
--xor-out=HEXxor the final CRC value with HEX
--algorithm=ALGOchoose an algorithm from {bit-by-bit, bbb, bit-by-bit-fast, bbf, table-driven, tbl, all}

生成接口

typedef uint16_t crc_t;

typedef uint16_t crc_t;

crc_t crc_init( void);

crc_t crc_update( crc_t crc,
const unsigned char *data,
size_t data_len);

crc_t crc_finalize( crc_t crc);

使用示例

#include “pycrc_generated_crc.h”
#include <stdio.h>

int main(void)
{

static const unsigned char str1[] = "1234";
static const unsigned char str2[] = "56789";
crc_t crc;

crc = crc_init();
crc = crc_update(crc, str1, sizeof(str1) - 1);
crc = crc_update(crc, str2, sizeof(str2) - 1);
/* more calls to crc_update... */
crc = crc_finalize(crc);

printf("0x%lx\n", (long)crc);
return 0;

}

在线CRC计算器

https://crccalc.com/

分类
设计开发

iMX6UL的Boot模式

拨码开关

配置说明

拨码示例

NAND flash

In case the NAND memory is the boot devices, this implies that the boot partition must be organized in order fulfill the bootrom requirements. Specifically, it contains:

  • A 1MB area (named Flash Control Block, FCB) which, in turn, includes
    • A data structure called NAND Control Block (NCB)
    • Three addresses which indicate where are located
      • The Discovered Bad Block Table (DBBT) which is the data structure used to manage the bad blocks of the NAND flash
      • The first copy of the firmware to load
      • The second (redundant) copy of the firmware to load
  • The DBBT
  • The first copy of the firmware
  • The second copy of the firmware.

u-boot对于Kernel和DTB区域中的坏块进行管理,rootfs中的坏块由UBIFS文件系统进行处理。

分类
设计开发

一种交互式BOM工具

在开发过程中,手工焊接/贴片是一件繁琐的工作,KiCAD的一个插件interactivehtmlbom,可以提供帮助,它可以生成交互式的BOM表,物料可以按标号或按值进行归类,在浏览物料过程可以直接定位在PCB板中的位置,它的代码链接
https://github.com/openscopeproject/InteractiveHtmlBom/

而且它还支持EasyEDA, Eagle and Fusion360。并且KiCAD还可以直接导入Eagle的工程,然后进行生成BOM。

分类
设计开发

几种常见的开关电路

三极管和MOS管常常在电路中充当开关作用,根据管子的位置有两种配置:高管(2,4)和低管(1,3),如下图所示

高管的控制电路如下所示

低管的控制电路如下所示

如果控制电压和电源电压不兼容,可以前面加一级三极管驱动,如下图所示

三极管和MOS管做开关用时候的区别:
1、三极管用电流控制,MOS管属于电压控制。
2、成本问题:三极管便宜,MOS管贵。
3、功耗问题:三极管损耗大。
4、驱动能力:MOS管常用来电源和大电流地方开关电路。

实际上就是三极管比较便宜,用起来方便,常用在数字电路开关控制。MOS管用于高频高速电路,大电流场合,以及对基极或漏极控制电流比较敏感的地方。一般来说低成本场合,普通应用的先考虑用三极管,不行的话考虑MOS管。

分类
设计开发

另外一种电路仿真软件

目前常用的电路仿真软件有Multisim、LTspice IV、Ti-Tina, 其中后两种可以免费下载使用,它们各有自己特点,现在另外一种商用电路仿真软件Micro-Cap 12也提供免费下载使用。
http://www.spectrum-soft.com/download/download.shtm
它不但包含了丰富的器件库,提供常规的瞬态分析,直流分析和交流分析等等,它还有一些自己的新特性。

参数扫描

设置选定参数扫描步进, 可以把它对系统的影响直接显示结果中,方便用户评估参数对系统的影响。

滤波器设计

它包含了有源和无源滤波器的辅助设计,只有给的滤波器的种类,增益,带宽,截止频率以及纹波要求等等,它直接输出原理图和器件参数。

有源滤波

无源滤波

News:

Effective 7/4/2019, Spectrum Software is closed. Micro-Cap is now free.

Technical support will be available for at least 90 days via email at Support.

You can download the latest versions of Micro-Cap here: Download
You can choose either the executable program or the entire installation CD for MC10, MC11, and MC12. If you have an earlier version, download and use MC12. These new versions do not require the security key, so they make Micro-Cap free to the entire engineering community.

Thank you for the honor and privilege of serving you for the last 39 years.

Spectrum Software

分类
设计开发

传感器常见的1-wire总线

美国的达拉斯半导体公司(DALLASSEMICONDUCTOR)推出的单总线(1-Wire Bus)技术,由于接口简单,被广泛应用在传感器接口中。下图是接口是open drain,需要外接上拉电阻,如下图所示

接口的时序要求如下所示

接口总线控制权如下图所示

在总线的驱动实现上通常采用如下几种

  • GPIO(查询或中断)+时钟counter方法
  • Timer的输入output compare+input capture

Maxim Integrated网站上介绍了一种用UART实现1-wire总线的方法:Using a UART to Implement a 1-Wire Bus Master
简单可以直接用上拉电阻

或使用外置open drain电路

通过调整UART的波特率来实现总线时序要求

总之,通过UART来操作1-wire总线,可以大大简化对时序的控制过程。

分类
设计开发

SMITH图设计阻抗匹配

进行匹配阻抗的设计可以利用SMITH图软件来辅助设计,前提是需要利用矢量网络分析仪获取当前特征阻抗,如下图所示红色是阻抗图,绿色是导纳图;上半圆表示感性负载,下半圆表示容性负载,中间红线表示纯电阻;

串联器件看阻抗图:
(1)串联电感顺时针移(增加感性)
(2)串联电容逆时针移(增加容性)
并联器件看导纳图:
(1)并联电感逆时针移(增加感性)
(2)并联电容顺时针移(增加容性)  
总之,都是往增加该器件属性的方向移动;

例如特性阻抗50Ω,当前P1点阻抗Z=41-j32 Ω,P1点需要往中心点靠,可以先阻抗图顺时针转,再导纳图顺时针转,即通过串电感,再并电容。如下图,串联16.2nH电感到P2点,再并联3.0pF电容到P3点。

平时做阻抗匹配时不可能完全做到匹配后反射系数为0,通常希望反射系数绝对值小于1/3(这时对应RL≈-10dB,VSWR≈2,反射率≈11%),即下图蓝色区域。

分类
设计开发

常见晶振分类和应用

晶振类型很多,根据不同性能可以分为有源晶振和无源晶振、有源晶振分温补晶振、压控晶体振荡器、压控温补晶体振荡器。无源晶振分两种材质石英晶振和陶瓷晶振。

根据晶振的功能和实现技术的不同,可以将晶振分为以下四类:

1)恒温晶体振荡器(OCXO)

这类型晶振对温度稳定性的解决方案采用了恒温槽技术,将晶体置于恒温槽内,通过设置恒温工作点,使槽体保持恒温状态,在一定范围内不受外界温度影响,达到稳定输出频率的效果。

2)温度补偿晶体振荡器(TCXO)

其对温度稳定性的解决方案采用了一些温度补偿手段,主要原理是通过感应环境温度,将温度信息做适当变换后控制晶振的输出频率,达到稳定输出频率的效果

3)普通晶体振荡器(SPXO)

这是一种简单的晶体振荡器,通常称为钟振,其工作原理是去除“压控”、“温度补偿”和“AGC”部分,完全是由晶体的自由振荡完成。这类晶振主要应用于稳定度要求不高的场合。

4)压控晶体振荡器(VCXO)。

这是根据晶振是否带压控功能来分类,带压控输入引脚的一类晶振叫VCXO,以上三种类型的晶振都可以带压控端口。

下图是SX126X参考设计中无源晶振和有源晶振的应用实例