内核驱动 ds1621¶
支持的芯片
Dallas Semiconductor / Maxim Integrated DS1621
前缀: ‘ds1621’
扫描地址: 无
数据手册: 可从 www.maximintegrated.com 公开获取
Dallas Semiconductor DS1625
前缀: ‘ds1625’
扫描地址: 无
数据手册: 可从 www.datasheetarchive.com 公开获取
Maxim Integrated DS1631
前缀: ‘ds1631’
扫描地址: 无
数据手册: 可从 www.maximintegrated.com 公开获取
Maxim Integrated DS1721
前缀: ‘ds1721’
扫描地址: 无
数据手册: 可从 www.maximintegrated.com 公开获取
Maxim Integrated DS1731
前缀: ‘ds1731’
扫描地址: 无
数据手册: 可从 www.maximintegrated.com 公开获取
- 作者
Christian W. Zuckschwerdt <zany@triq.net>
Jan M. Sendler <sendler@sendler.de> 提供了宝贵贡献
Aurelien Jarno <aurelien@aurel32.net> 在 Jean Delvare <jdelvare@suse.de> 的帮助下移植到 2.6 版本
模块参数¶
polarity int 输出极性
0 = 高电平有效,
1 = 低电平有效
描述¶
DS1621 是一种(一个实例)数字温度计和恒温器。它具有高低温限制,可由用户定义(即编程到片上非易失性寄存器中)。温度范围为 -55 摄氏度到 +125 摄氏度,增量为 0.5 摄氏度。您可以将其转换为华氏温度范围 -67 到 +257 华氏度,步长为 0.9 华氏度。如果未提供极性参数,则使用原始值。
至于恒温器,其行为也可以通过极性切换进行编程。一方面(“加热器”),当达到或低于低温限制时,芯片的恒温器输出 Tout 将触发并保持高电平,直到达到或超过高温限制。另一方面(“冷却器”),则相反。这样,“加热器”等同于“低电平有效”,而“冷却器”等同于“高电平有效”。请注意,DS1621 数据手册在这一点上有些误导,因为设置极性位并不会简单地反转 Tout。
其次,在大量测试中,即使与精确的温度读数相比,Tout 也显示出高达 +/- 0.5 度的容差。不过,请务必设置至少 1.0 摄氏度的高温与低温限制差值,以避免 Tout“跳动”!
当达到或超过高限或低限时,警报位会被设置;一旦离开相应的温度范围,模块就会重置它们。
报警寄存器绝不适合用来了解 Tout 的实际状态。它们只会告诉你它的历史,即自上次上电或复位以来,是否有任何限值曾被达到或超过。请注意:在测试时,发现 Tout 的状态可以在没有任何警报设置的情况下发生变化。
由于没有版本或供应商识别寄存器,因此这些设备没有唯一的标识。因此,需要显式设备实例化才能正确识别和实现设备功能(此地址范围内的每个地址一个设备:0x48..0x4f)。
DS1625 与 DS1621 引脚兼容且功能等效,但 DS1621 旨在取代它。DS1631、DS1721 和 DS1731 也与 DS1621 引脚兼容,并提供多分辨率支持。
此外,DS1721 数据手册称温度标志(THF 和 TLF)在内部使用,然而,当实际温度超过最小或最大设置(默认分别设置为 75 和 80 度)时,这些标志确实会被设置和清除。
温度转换¶
DS1621 - 750ms(旧设备可能需要长达 1000ms)
DS1625 - 500ms
DS1631 - 分辨率为 9..12 位时分别为 93ms..750ms。
DS1721 - 分辨率为 9..12 位时分别为 93ms..750ms。
DS1731 - 分辨率为 9..12 位时分别为 93ms..750ms。
注意: 对于 DS1621,内部访问非易失性寄存器可能持续 10ms 或更短(其他设备未经证实)。
温度精度¶
DS1621: +/- 0.5 摄氏度 (从 0 到 +70 摄氏度)
DS1625: +/- 0.5 摄氏度 (从 0 到 +70 摄氏度)
DS1631: +/- 0.5 摄氏度 (从 0 到 +70 摄氏度)
DS1721: +/- 1.0 摄氏度 (从 -10 到 +85 摄氏度)
DS1731: +/- 1.0 摄氏度 (从 -10 到 +85 摄氏度)
注意
其他温度下的精度请参考设备数据手册。
温度分辨率:¶
如上所述,DS1631、DS1721 和 DS1731 提供多分辨率支持,这是通过 R0 和 R1 配置寄存器位实现的,其中
R0..R1¶
R0 |
R1 |
|
---|---|---|
0 |
0 |
9 位,0.5 摄氏度 |
1 |
0 |
10 位,0.25 摄氏度 |
0 |
1 |
11 位,0.125 摄氏度 |
1 |
1 |
12 位,0.0625 摄氏度 |
注意
设备首次上电时,默认分辨率设置为 12 位。
DS1631、DS1721 或 DS1731 的分辨率模式可以通过用户空间,通过设备“update_interval”sysfs 属性进行更改。此属性会将输入值的范围标准化到数据手册中定义的设备最大分辨率值,如下所示
分辨率 |
转换时间 |
输入范围 |
---|---|---|
(C/LSB) |
(毫秒) |
(毫秒) |
0.5 |
93.75 |
0....94 |
0.25 |
187.5 |
95...187 |
0.125 |
375 |
188..375 |
0.0625 |
750 |
376..无限 |
以下示例展示了如何使用“update_interval”属性更改转换时间
$ cat update_interval
750
$ cat temp1_input
22062
$
$ echo 300 > update_interval
$ cat update_interval
375
$ cat temp1_input
22125
$
$ echo 150 > update_interval
$ cat update_interval
188
$ cat temp1_input
22250
$
$ echo 1 > update_interval
$ cat update_interval
94
$ cat temp1_input
22000
$
$ echo 1000 > update_interval
$ cat update_interval
750
$ cat temp1_input
22062
$
如图所示,ds1621 驱动程序通过步进函数自动调整“update_interval”用户输入。写入操作后读回“update_interval”值可提供设备使用的转换时间。
在数学上,分辨率可以通过以下函数从转换时间中导出
g(x) = 0.5 * [minimum_conversion_time/x]
其中
‘x’ = ‘update_interval’的输出
‘g(x)’ = 每 LSB 的摄氏度分辨率。
93.75ms = 最小转换时间