基于ATtiny13的模拟量隔离采集
时间:11-25
来源:EDN
点击:
1 概 述
在工控应用中,模拟信号采集通常需要采用隔离技术,以避免大型电气设备启合或切换过程中造成的电源和地线波动影响弱电控制系统。常见的模拟量隔离方法主要有隔离放大器、电磁隔离和光电隔离3种方式。隔离放大器,精度很好,但成本高;电磁隔离,设备体积较大,精度较差。
光电隔离技术是一种非常有效的抗干扰手段。光耦作为常见的光电隔离器件,主要用于数字量隔离传输。如果使用光耦传输模拟量,那么要求光耦的非线性度非常小,以保证输入的模拟信号的线性,绝大部分的光耦都很难达到。为了实现对模拟量的光电隔离采集,必须先进行模/数(A/D)转换,才能将转换后的数字量经由光耦传递给下一级电路。
传统方法,直接使用A/D芯片进行模/数转换,然后经光耦传输。按接口形式,A/D芯片可分并行和串行访问2种方式。并行A/D芯片采集精度越高,并行数据线占用的光耦数目越多,而且需要配以控制A/D转换操作相应的隔离信号,这种方式接线多,占用资源也多;串行A/D芯片可以节省不少光耦,但需要复杂的时序才能完成对A/D的读写操作。
本文提出一种使用集成A/D的微型单片机AT-tiny13进行模拟量隔离采集,使用单根数据线完成数据传输。模拟量隔离采集采用了简化的UART通信方式,即单工通信方式,只需要发送线TXD,无需接收线RXD。这样,单根数据线就能承担发送A/D转换值任务,接收方只要具备硬件UART或软件UART(接收),就可以轻松获取隔离模拟量值。
2 ATtiny13简介
ATtiny13具有1 KB Flash,64字节EEPROM,64字节SRAM,6个通用I/O口线,32个通用工作寄存器,1个具有比较模式的8位定时器/计数器,片内/外中断,以及4路10位ADC。
3 硬件设计
模拟量隔离采集电路如图1所示。ATtiny13有2路10位ADC可控选择,本设计中只使用了1路ADC。光耦PC817用于传输A/D转换值。CLKI代表从外部引入的时钟源。
4 软件UART
ATtiny13内部没有集成UART功能。为了弥补这一缺陷,可以使用软件控制I/O引脚模拟UART功能,按照设定的采集速率将A/D转换值经光耦隔离输出。
4.1 异步串行协议
采用UART异步串行协议通信时,数据按顺序逐位输出。接收方通过监测起始位(低电平有效)和停止位(高电平有效)来判断一帧信息的起始与结束。数据帧中还可包括若干数据位和奇偶校验位。异步串行协议的起始位与停止位必须使用,其余各位可调整位长度。异步串行协议格式如下:
本文定义帧格式为:起始位(1位),数据位(5位),无奇偶校验位,停止位(1位)。ATtiny13自带精度为10位的A/D转换器,而数据位设定为5位宽度,所以需要连续发送2次异步串行通信帧,才能将一次A/D转换值传送完整。按照高位先出的方法,前1次发送A/D转换值的高5位,后1次发送低5位。
4.2 波特率设置
波特率是UART异步串行通信中非常重要的参数。通信双方必须以约定好的速率通信,才能保证通信成功。波特率与异步串行协议中"位"所占用的时间密切相关。对于二进制信号,数据帧中每一位的占用时间就是波特率的倒数。因此,如何精确确定每一位的时间宽度,成为确保串口通信成功的关键因素。
ATtiny13没有集成UART,但内部含有一个8位定时器/计数器,可利用软件控制该定时器产生波特率。MCU自带的RC振荡器可以作为时钟源,但是振荡频率存在最大±10%的误差,并且受温度影响较大。这样会造成波特率不稳,通信时可能出现接收不到数据,或者丢数据位、出现乱码和错码的情况。ATtiny13从外部引入了7.372 8 MHz有源晶振时钟信号,从而保证了主时钟频率的稳定性。
异步通信波特率可按式(1)计算。
式中:XTAL为引入的主时钟频率;Baud为需设置的波特率;C为定时器时钟分频系数;n为8位定时器/计数器的预加载比较值。定时器/计数器工作在CTC模式(比较匹配时清零定时器)。
XTAL即7.372 8 MHz,Baud设定为9 600,定时器时钟信号为主时钟4分频(即C=4),可得n=192。据此,8位定时器/计数器从0计到192时,产生比较中断,软件控制发送新的一位信息。
4.3 数据发送
UART异步串行协议规定了在没有数据帧发送时,通过逻辑"1"表示目前处于闲置状态。如果有数据需要发送,首先将发送线TXD拉低成逻辑"0",并保持一个基本时间单位;之后根据待发送数据的二进制数值,依次逐位输出。本设计中未使用奇偶校验位,相关处理略去。5位数据发送完毕后,紧接着将TXD拉高为逻辑"1",表示该帧结束。软件UART发送流程如图2所示。
在工控应用中,模拟信号采集通常需要采用隔离技术,以避免大型电气设备启合或切换过程中造成的电源和地线波动影响弱电控制系统。常见的模拟量隔离方法主要有隔离放大器、电磁隔离和光电隔离3种方式。隔离放大器,精度很好,但成本高;电磁隔离,设备体积较大,精度较差。
光电隔离技术是一种非常有效的抗干扰手段。光耦作为常见的光电隔离器件,主要用于数字量隔离传输。如果使用光耦传输模拟量,那么要求光耦的非线性度非常小,以保证输入的模拟信号的线性,绝大部分的光耦都很难达到。为了实现对模拟量的光电隔离采集,必须先进行模/数(A/D)转换,才能将转换后的数字量经由光耦传递给下一级电路。
传统方法,直接使用A/D芯片进行模/数转换,然后经光耦传输。按接口形式,A/D芯片可分并行和串行访问2种方式。并行A/D芯片采集精度越高,并行数据线占用的光耦数目越多,而且需要配以控制A/D转换操作相应的隔离信号,这种方式接线多,占用资源也多;串行A/D芯片可以节省不少光耦,但需要复杂的时序才能完成对A/D的读写操作。
本文提出一种使用集成A/D的微型单片机AT-tiny13进行模拟量隔离采集,使用单根数据线完成数据传输。模拟量隔离采集采用了简化的UART通信方式,即单工通信方式,只需要发送线TXD,无需接收线RXD。这样,单根数据线就能承担发送A/D转换值任务,接收方只要具备硬件UART或软件UART(接收),就可以轻松获取隔离模拟量值。
2 ATtiny13简介
ATtiny13具有1 KB Flash,64字节EEPROM,64字节SRAM,6个通用I/O口线,32个通用工作寄存器,1个具有比较模式的8位定时器/计数器,片内/外中断,以及4路10位ADC。
3 硬件设计
模拟量隔离采集电路如图1所示。ATtiny13有2路10位ADC可控选择,本设计中只使用了1路ADC。光耦PC817用于传输A/D转换值。CLKI代表从外部引入的时钟源。
![]() |
ATtiny13内部没有集成UART功能。为了弥补这一缺陷,可以使用软件控制I/O引脚模拟UART功能,按照设定的采集速率将A/D转换值经光耦隔离输出。
4.1 异步串行协议
采用UART异步串行协议通信时,数据按顺序逐位输出。接收方通过监测起始位(低电平有效)和停止位(高电平有效)来判断一帧信息的起始与结束。数据帧中还可包括若干数据位和奇偶校验位。异步串行协议的起始位与停止位必须使用,其余各位可调整位长度。异步串行协议格式如下:
![]() |
本文定义帧格式为:起始位(1位),数据位(5位),无奇偶校验位,停止位(1位)。ATtiny13自带精度为10位的A/D转换器,而数据位设定为5位宽度,所以需要连续发送2次异步串行通信帧,才能将一次A/D转换值传送完整。按照高位先出的方法,前1次发送A/D转换值的高5位,后1次发送低5位。
4.2 波特率设置
波特率是UART异步串行通信中非常重要的参数。通信双方必须以约定好的速率通信,才能保证通信成功。波特率与异步串行协议中"位"所占用的时间密切相关。对于二进制信号,数据帧中每一位的占用时间就是波特率的倒数。因此,如何精确确定每一位的时间宽度,成为确保串口通信成功的关键因素。
ATtiny13没有集成UART,但内部含有一个8位定时器/计数器,可利用软件控制该定时器产生波特率。MCU自带的RC振荡器可以作为时钟源,但是振荡频率存在最大±10%的误差,并且受温度影响较大。这样会造成波特率不稳,通信时可能出现接收不到数据,或者丢数据位、出现乱码和错码的情况。ATtiny13从外部引入了7.372 8 MHz有源晶振时钟信号,从而保证了主时钟频率的稳定性。
异步通信波特率可按式(1)计算。
![]() |
式中:XTAL为引入的主时钟频率;Baud为需设置的波特率;C为定时器时钟分频系数;n为8位定时器/计数器的预加载比较值。定时器/计数器工作在CTC模式(比较匹配时清零定时器)。
XTAL即7.372 8 MHz,Baud设定为9 600,定时器时钟信号为主时钟4分频(即C=4),可得n=192。据此,8位定时器/计数器从0计到192时,产生比较中断,软件控制发送新的一位信息。
4.3 数据发送
UART异步串行协议规定了在没有数据帧发送时,通过逻辑"1"表示目前处于闲置状态。如果有数据需要发送,首先将发送线TXD拉低成逻辑"0",并保持一个基本时间单位;之后根据待发送数据的二进制数值,依次逐位输出。本设计中未使用奇偶校验位,相关处理略去。5位数据发送完毕后,紧接着将TXD拉高为逻辑"1",表示该帧结束。软件UART发送流程如图2所示。
- 12位串行A/D转换器MAX187的应用(10-06)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- 12位串行A/D转换器的原理及应用开发(10-09)
- 在射击探测器中增加口径确定功能的简单电路(11-13)
- 一种折叠共源共栅运算放大器的设计(11-20)
- 深入解析:模拟前端模/数转换器的三种类型 (11-26)