现在位置 >首页 > 所有 AVR单片机介绍 分类文章
基于AVR单片机的卫星地面测控系统设计
引言
本文介绍了单片机Atmega128在一种卫星地面测控系统中的应用,该系统利用Atmega128完成了10路模拟信号的测量、4路脉冲信号的频率测量以及脉冲宽度的测量,由单片机上的16位定时计数器输出两路与输入信号具有相位关系的信号,并通过外扩串口与其它测试模块及工控机进行通信。由于要求系统能够连续稳定工作3年,并且数据不能丢失,因此,在设计时采用了双电源冗余热备份的方案,并且采用两个工控机同时接收数据并互为备份的设计方案。
硬件设计
Atmega128属于Atmel公司的AVR系列单片机,是一种高性能、低功耗的8位控制器,执行大多数指令只需要一个时钟周期。其最高主频可达到16MHz;自带128KB可在线编程的闪存、4KB的EEPROM、4KB的SRAM,程序可进行加密;自带JTAG接口,便于程序的调试;集成外设:两个8位定时计数器、两个16位定时计数器、两个8位PWM通道、6个16位PWM通道、8个10位 ADC通道、一个I2C接口、两个可编程异步串行接口、一个SPI接口、一个看门狗定时器和8个外部中断源。
卫星地面测控系统主要由电源模块、电子机箱、测试箱、工控机以及红外地球敏感器构成,其中两台电源并联, 输出串联二极管。在整个测控系统中,测试箱的控制功能是通过Atmega128完成的。
测试系统以AVR单片机为核心,外围电路由串口通信、ADC采样和DAC输出等部分构成。
单片机与工控机之间通过RS-232标准总线进行数据通信,在设计中采用电平转换芯片MAX202来实现二者的电平兼容。为了能够和测试系统的其它模块进行串口通信,采用Xicor公司的双串口芯片ST16C2552外扩了两个串口,由于与外扩串口通信的是-12V~+12V的信号,不是标准电平,因此,要另外设计电平转换电路。使用Altera公司的可编程逻辑器件EPM7128实现对DAC和ADC的逻辑控制;使用BB公司的12位ADC实现对遥测信号的测量;采用BB公司的12位DAC芯片DAC7615产生电地球波信号。
具体功能如下:
ADC测量:将输入的10路模拟信号经过阻抗匹配后连接到通道选择器,再接到ADC芯片ADS7835的信号输入端,ADC的输出信号以及控制信号经过光隔离接到EPLD逻辑,在逻辑内部实现对ADC启动信号、转换通道的选择,以及对时钟信号、数据信号的控制。
DAC 输出:单片机通过逻辑芯片实现对DAC的片选、时钟、数据等信号的控制,DAC的输出信号通过光隔离后,再经过运算放大器进行阻抗匹配后才接到整个测试系统的其它模块。DAC参考电压的稳定性至关重要,如果参考电压稳定性差,将导致整个DAC的输出波动很大,达不到输出精度要求,因此,通过一个稳压芯片 AD584给DAC提供参考电压。
频率测量:电测箱需要对2路基准信号和2路光栅信号进行测量,利用AVR单片机的外部中断和计数器1、3实现测量。将2路基准信号分别接到单片机的外中断INT0和INT1,将光栅信号分别接到单片机的计数器1和3。在电测箱需要实现的各项功能中,电地球波的输出是一个难点,因为需要电地球波的输出与基准信号具有相位关系,并且要求输出具有可变相位、幅度和斜率的信号,本文通过计数器1和3的比较中断实现电地球波的输出。
串口通信:通过单片机自带的两个异步串口,并经过电平转换与上位工控机通信,通过双串口芯片ST16C2552外扩两个串口与测试系统的其它模块通信,此外,为保证系统的可靠性,所有的信号均经过光隔离。
软件实现
单片机软件
运行在单片机的底层软件主要负责ADC的采集、DAC的输出以及串口的通信,下面详细介绍各个部分:
1、光栅频率测量:测量模拟基准一个周期内的光栅个数
在程序中,每次进入外中断0的处理程序void int0_isr(void)(即基准脉冲上升沿到来时)调用void do_gd_opt_frq()函数测量光栅频率。
在do_gd_opt_frq ()函数中,先把前一次读取计数器1的计数值保存在全局变量time1_prev中,再读取计数器1的值并保存在time1_next中,因为两次中断的间隔就是模拟基准的周期,有一个光栅脉冲计数器1就加1,所以,前后两次的差值就是一个模拟基准周期内光栅的个数。
2、模拟基准幅度
在INT0的中断处理函数中置一个全局标志refoa_gd_flag = 0xff,在一个100s的定时器的中断处理函数中查询此全局标志,若置位,则对模拟基准的ADC通道连续采样400次,采样后清 refoa_gd_flag标志并置采样结束的标志refoa_gd_finished = 0xff。在主程序main()函数中不断查询refoa_gd_finished标志,若置位,则调用do_refoa_high()函数求出模拟基准幅度,然后清标志。在do_refoa_high()函数中求出采样400个点中的最大值和最小值,两者之差即为模拟基准幅度。
3、模拟基准周期:测量一个模拟基准周期的毫秒值
在一个1ms的定时器溢出中断处理函数中,全局的计数变量ref_gd_count加1,ref_gd_count初始化为0。在外中断0的处理函数 int0_isr()中读取ref_gd_count的值,即为模拟基准的周期,再把ref_gd_count清零。这样,只有第一次测量值是无效的,以后均为有效的模拟基准周期。
4、模拟基准宽度
在INT0的中断处理函数中置全局变量refoa_width_gd_ count=0,在100s的定时器中断中查询外中断0的引脚是否为高电平,是高电平则refoa_width_gd_count加1,直至变为低电平,refoa_width_gd_ count的值就是模拟基准的宽度。
5、电地球波
在do_ein()函数中处理工控机串口传过来的电地球波信息,如果是停止电地球波命令(state=0),通过DA电地球波直接输出高电平并清除电地球波使能标志位ein_gd_enable。如果是开始电地球波命令(state=1),把相位、宽度、幅值、斜率等信息赋给全局变量保存,并且计算出步距和斜率上各个点的输出值,置位电地球波使能标志 ein_gd_enable。
电地球波的产生是以模拟基准为基准的,在INT0的中断处理函数中设置计数器的比较中断并使能。
T0与T1 之间是地球波的相位,T2与T5之间是地球波的宽度。在T1时刻进入计数器1的比较中断timer1_compa_isr(),全局变量 ein_count_gd初始化为0,若ein_count_gd不等于1,则设置比较中断寄存器初值为下一步距点,并通过DA输出,若下一个比较中断到来ige ein_count_gd不等于1,则继续设置比较中断寄存器初值为下一个步距,并输出幅值,直到斜率上所有的幅值输出完毕,置ein_count_gd 等于1并设置比较中断寄存器,使T4进入比较中断。T4进入比较中断,并按照前述方法输出斜率上所有的幅值,完毕则禁止比较中断并置 ein_count_gd=0xff。
软件编译与下载
由于单片机程序是采用C语言设计完成的,因此,需要用Image Craft公司的ICCAVR编译器进行编译,生成COF文件,再用AVR STUDIO调试软件和双龙公司的AVR JTAG仿真器进行调试。调试完成后,利用单片机的JTAG接口写入内部闪存即可。
上位工控机软件
运行在工控机上的软件主要负责处理AVR单片机通过串口传送过来的数据并进行超差、报警的检查,然后把数据存储在ACCESS数据库中,以便查看。该软件能够设置电地球波的幅度、宽度、相位,并能自主控制电地球波的产生或停止。
上位工控机软件采用VC6.0编写,其中的数据库部分采用ADO技术。ADO是Microsoft公司为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO [...]
AVR单片机在多回路数据采集器中的应用
1 引言
AVR系列单片机[1]是ATMEL公司于1997年推出的具备高速处理能力的单片机,它采用Harvard总线结构,程序存储器和数据存储器分离,可对具有相同地址的程序存储器和数据存储器进行独立寻址的功能。AVR单片机具有良好的集成性能,具备在线编程接口等功能,在自动控制、智能仪表、数据采集系统、家用电器等中有广泛的应用。
ATmega系列单片机属于AVR中的高档产品,它承袭了AT90所具有的特点,并在AT90的基础上,增强了更多的接口功能,而且在省电性能、稳定性、抗干扰性及灵活性方面都更加周全和完善。ATmega128单片机是目前ATmega系列单片机中功能最强的一个型号,最高工作频率可达16MHZ,具有高速运行处理能力。它的芯片内部集成了较大容量的存储器和丰富强大的硬件接口电路,并且软件上有效支持C高级语言及汇编语言。针对目前国内工业电力监控行业中多用户数据采集的需求,研发了一种基于ATmega128单片机的多回路、高精度、快速数据采集器,主要是监测电流、报警、状态信息,再根据这些信息形成反馈控制信息,具备远程操作能力,不仅可以用于新的电力监控系统中,而且可以方便的取代原有网络系统中的设备,具有广阔的市场前景。该数据采集器的关键技术在于ATmega128微处理器芯片内A/D转换器的硬件接口设计及AD采集处理软件编程。
2 ATmega128单片机的主要特征及其片内A/D转换器
ATmega128是一款采用低功耗CMOS工艺生产的基于AVR RISC 结构的8位单片机,其主要性能有:高性能、低功率的8位AVR微控制器,先进的RISC精简指令集结构。ATmega128单片机芯片内集成了较大容量的非易失性程序和数据存储器以及工作存储器;丰富强大的外部接口性能;特殊的微控制处理器性能。其主要优点是芯片本身自带看门狗电路,片内程序Flash及8通道复用的10位A/D转换器;通用I/O接口具有很强的驱动能力,可省去一部分驱动电路,节约了系统成本;附带同步串行接口SPI,可以实现与PC机的联网通讯功能;采用符合IEEEstd.1149.1标准的JTAG测试接口来实现程序的下载和系统的调试,因而系统的开发调试十分方便;即使已被应用于现场,也可以随时进行一定程序的修改。
ATmega128有一个10位的逐次比较的A/D转换器,ADC与一个8通道的模拟多路复用器连接,能够对以PORTC口作为ADC输入引脚的8路单端电压输入进行采样。ADC包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。ADC还有一个噪声抑制器,在休眠模式下进行A/D转换时,应用该特性可以降低由MCU内核和I/O外围设备引入的噪声。ADC功能单元有独立的专用模拟电源引脚AVCC供电。AVCC和VCC的电压差别不能大于0.3V。ADC转换的参考电源可采用芯片内部的参考电源,或采用AVCC,也可采用外部的参考电源,外部参考电源由引脚AREF接入,同时AREF引脚外部并接一个电容来提高ADC的抗噪性能。ADC还包含一个预分频器,可以对输入的系统时钟进行分频,以获得适合的ADC时钟。一次常规的A/D转换需要13个ADC时钟周期,ADC为用户提供了内部中断方式的处理,可以满足实时性的要求。
近年来ATmega128单片机以优良而稳定的性能广泛应用于各种电力系统智能自动化仪表中。
3 多回路数据采集器的总体结构
多回路数据采集器系统主要由微处理器、AD采集处理部分、参数设置、输出单元、LED显示和通讯接口等功能模块组成。
考虑到模拟信号及开关量信号的数目、速度、精度的要求,系统结构的精简、成本以及今后软硬件的升级需要,该采集器系统的微处理器功能模块由ATmega128单片机来实现。 AD采集处理部分是本系统设计的关键部分,它需要采集8路输入信号,每路输入信号有:1个电流有效值(0~6A),两个有源开关量输入(报警信号和状态信号输入)。参数设置部分主要设置本设备地址和通讯波特率,可设置本设备地址范围为1~63,通讯波特率范围为4800~38400波特,以满足用户多种不同需求。这一功能由软件编程来实现。输出单元同样有8路输出,每路有2个开关量输出,用继电器提供两个无源触点来实现。为了避免外部干扰对信号影响,信号的输入和输出单元使用高速光电耦合电路。显示部分用LED显示报警信号与状态检测信号输入、系统电源的通断信号以及通讯信号的工作情况。通讯接口单元采用RS485接口电路,是一种RS232/RS485转换器。该数据采集器系统与PC机通过采用ModBus/RTU协议实现通信联网功能。
4 系统AD采集处理的实现
4.1A/D转换器的硬件接口连接
ATmega128单片机的内部资源非常丰富,有128KB的闪速存储器可以编程,4K字节的SRAM和4K字节的EEPROM来存储变量,一般情况下,不需要扩展外部的ROM和RAM。
系统的硬件制板主要分为一块CPU主控板和八块I/O接口板。CPU主控板主要包括八路电流信号的采集模块、参数设置模块、电源模块、通讯接口模块及JTAG接口模块等。将八路开关量的输入和输出单元分别制成八块I/O接口板,每块I/O接口板包括两个有源开关量信号和两个继电器触点输出信号。I/O接口板采用与CPU主控板可脱卸方式连接,主要优点在于实际使用时可灵活选配,方便实用,节省了硬件成本,且仪器出故障时便于维修更换。
由于电力系统中要测量的常常是大电流,被测的电流需经过一级变压器后才能接入CPU主板,成为主板中电流互感器的模拟输入信号。模拟信号经过CD4051多路开关,并由LF124四运算放大器将模拟电流小信号放大。每路的最大输入电流允许为6A。放大后的模拟信号利用微处理器提供的内部ADC进行模数转换处理,并将10位转换结果放在ADC数据寄存器ADCH和ADCL中。在连续采样模式下,ADC连续取样,并不断更新ADC数据寄存器。本系统的关键技术在于八路模拟信号共用同一个放大电路,既可解决一致性问题,又可节约硬件成本。同时八路模拟输入信号全部用模拟多路开关进行隔离,避免信号之间的相互干扰。为了确保采集的速度,需ATmega128微处理器对八路模拟信号进行连续高速巡回检测,并在模拟多路开关切换时进行软件消抖。由于系统被测交流电流变化缓慢,在组成对模拟信号的自动巡回检测模块时,没有加入采样/保持器电路。对八路模拟信号还采用数字滤波和分段线性补偿等软件技术,增强抗干扰性,使信号采样保持在最佳线性状态,以保证测量的精确度。
所有输入、输出开关量信号都采用光电隔离器实现系统与现场信号的隔离,提高系统的
抗干扰能力。I/O接口板中报警和状态信号灯工作时电源供电都为DC24V,LED显示对报警和状态信号有无进行实时的状态报告。I/O接口板提供的2个继电器触点输出信号,有信号输出时,继电器触点将闭合。其中继电器采用OMRON G6B-114AP,体积小,触点允许接通的最大信号为:5A,250V(交流)或 5A ,30V(直流)。
一般微处理器本身不具备串行通信接口功能,因此,可以通过外接串行接口电路加以扩展。在采集器的通讯接口电路设计中,系统的通讯接口电路部分需要配备有RS485接口,接口芯片采用Sipex的工业级带高静电保护的芯片SP485EEN,使通信更可靠。该系统具备远程操作能力,可以实现远程输入/输出。
4.2 数据采集和AD处理的软件实现
数据采集是该多回路数据采集器软件编程部分的主要模块,在循环执行数据采集程序的同时,还间隔地调用了时钟定时中断子程序,数字滤波子程序和分段线性补偿子程序等。系统上电执行初始化程序,复位个端口。通过操作按键确定了采集系统时间段的初始时间之后,系统开始对0~7通道间隔1s时间采集一次电流值,调用数字滤波子程序进行滤波得到精确的数值。再通过数据转换和处理后送微处理器的数据存储器,等待PC机的读取。
数据采集处理的实现采用AVR单片机C编辑器——ICCAVR编程,以下是系统查询读AD子程序和AD处理的部分程序。
1.查询读AD子程序
#define ADC_VREF_TYPE 0×00 // Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion
ADCSRA|=0×40; // Wait for [...]
时钟芯片SD2200ELP与AVR单片机的接口设计
在提升机制动闸瓦间隙实时在线检测的设计中,需要保存故障时间和故障数据。大部分仪器仪表中都要使用时钟芯片,但是很多的实时时钟芯片(如PCF8563)没有掉电保护,须外接晶振和电池,比较麻烦。而深圳兴威帆电子技术有限公司生产的SD2200ELP是内置32 KBE2PROM的串行实时时钟芯片,不需要外接器件支持,连线简单、可靠,提供的数据精确,断电后也能继续工作。微控制器采用Atmel公司的ATmegal6单片机,利用AT-megai6的硬件TWI接口可直接对SD2200ELP进行操作,无需软件模拟I2C方式,使用方便、可靠。
1 SD2200L简介
SD2200L系列(包括SD2200B/C/D/E/FLP)是一种具有内置晶振、支持I2C总线的高精度实时时钟芯片。SD2200ELP是SD2200L系列中的一种,该芯片可保证时钟精度为±5ppm(在-10~50℃下),即年误差小于2.5min。芯片内置时钟精度调整功能,可以在很宽的范围内校正时钟的偏差;内置32KB串行非易失性E2PROM;可在3.0~5.5V下工作,擦写次数可达100万次,数据保存时间为十年;内置一次性电池,可保证在外部掉电情况下时钟使用寿命超过五年。
2 硬件设计
SD2200ELP既有实时芯片的功能,又可以存储数据到内置E2PRROM中。因为SD2200ELP是I2C总线接口方式,所以其硬件接口设计非常简单,可以大大简化单片机外围器件。AVR的TWI总线实质上就是I2C总线,只是名称不一样。
3 软件设计
如果外围器件是I2C接口类型,而单片机没有I2C接口,那么必须用软件模拟的方式来实现。AVR单片机功能很强,它带有TWI接口,可以直接利用ATmegal6的硬件I2C接口来对外围I2C器件进行操作,非常方便、有效。这样可以节省模拟I2C程序,为用户编程省去很多麻烦。下面是使用ATmegal6对内置E2PROM的实时时钟芯片SD2200ELP读/写的程序设计,均是在ICCAVR开发环境下编写。
3.1 ATrnegal6的TWI总线接口
两线接口TWI很适合于典型的处理器应用。TWI协议允许系统设计者只用两根双向传输线就可以将128个不同的设备互连到一起。这两根线是时钟线SCL和数据线SDA。外部硬件只需2个上拉电阻,每根线上1个。所有连接到总线上的设备都有自己的地址。
TWI总线可以工作于4种不同的模式:主机发送器(MT)、主机接收器(MR)、从机发送器(ST)以及从机接收器(SR)。在后面将介绍的连续读E2PROM操作中就使用了MT和MR模式。
3.2 实时时钟读取
其中高4位称为“器件代码”,它代表实时时钟的器件地址,固定为“0110”。C2、C1、C0构成对实时时钟操作的8条指令。
实时数据寄存器是一个56位的存储器,它以BCD码方式存储,包括年、月、日、星期、时、分、秒的数据。实时数据的读/写操作都通过发送或接收年(实时数据读写方式1)数据的第一位“LSB”开始执行的。
3.3 E2PROM的读/写
SD2200ELP的E2PROM操作指令与实时时钟的器件代码是不一样的。当CPU要对SD12200L中的E2PROM进行操作时,首先发出开始信号给SD2200L,然后CPU发出包括4位器件代码10lO、3位页选码000、1位读/写指令的8位数据(即“从器件地址”)。一位读/写指令表明进行何种操作(读操作为1,写操作为O)。
3.3.1 对E2PROM的页写操作
写操作可分为:单字节写操作和页写操作。单字节写操作指每次只写入一个字节的数据;页写操作指一次可以写入多个字节的数据。值得注意的是,SD2200L是一个系列,不同类型对应着不同数量的E2PROM。例如在页写操作下,SD2200ELP单个写周期内E2PROM可以被写入64字节的数据。在某监测仪器应用中,需要保存故障值和故障发生时间,故采用页写方式。
3.3.2 对E2PROM连续读操作
读操作有3种方式:立即地址读操作、随机地址读操作和连续读操作。ATmegal6为完成从SD2200ELP内置串行E2PROM中读取数据,必须将几种TWI模式组合起来。由于内置E2PPROM的存储容量大小不同,因此在进行读操作时,其操作方式有所不同。在查询故障值和故障时间时,需要读出保存在E2PRoM的数据,故采用连续读操作。与页写操作类似,SD2200ELP最多连续读64字节的数据。
4 总结
SD2200ELP可以方便地结合AVR单片机的TWI总线实现日期显示功能。并且因其内置32 KBE2PROM,可以保存时间和相应数据;具有电路简单、占用资源少、程序简洁、调试方便、功耗低等特点。经过实际的现场运行证实了该设计方法是可靠、有效的。对本文的设计方案和程序稍加修改后,可以用在各种需要此功能的数字控制和监控检测系统中。
AVR单片机的通用USB接口模块设计
引言
USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。随着嵌入式系统的发展,嵌入式微处理器需增加通用的USB接口,以便实现与PC等USB主机系统的通信。针对这样的需求,这里采用PHILIPS公司的USB接口器件PDIUSBD12和Atmel公司的AVR系列单片机ATmega8设计一种通用的USB接口模块。该模块可方便为各种嵌入式微处理器增加USB接口,从而实现与USB主机系统的高速通信。
2 系统硬件设计
该系统模块的控制核心是AVR高速单片机ATmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口线驱动能力强和片内集成外设资源丰富等特点,其内部集成有可进行ISP下载编程的Flash,EEPROM、熔丝位和锁定位。AVR单片机的ISP下载电缆制作简单、成本低廉,还有免费的下载软件(例如PONyProg)支持。PDIUSBD12是一款高性价比USB接口器件,完全符合USB1.l规范,易于与各种微处理器接口。
由于AVR单片机具有高速性,可利用I/O端口线以软件方式模拟PDIUSBD12的时序,对其读写。这种方式可根据不同的微处理器速度灵活控制PDIUSBD12的时序和地址,无需译码电路,从而简化硬件设计,降低成本。
由于ATmega8片内集成了UART,SPI,I2C等接口,该接口模块可利用这些接口与其他系统通信,使得该接口模块成为通用的接口转换器。
3 USB固件程序设计
本系统模块的USB固件程序采用符合ANSI C标准的GCC编译器设计,结合分层次的模块化结构,可移植性强,只需稍微修改硬件接口层即可将其移植到别的硬件平台,可重复利用代码。
USB固件程序设计是基于状态机和标准的前后台式程序架构。首先编写硬件接口层hal.c和PDIUSBD12器件的命令接口层,以供上层模块调用。硬件接口层含有对PDIUSBD12写指令和读写数据的函数,以供上层模块调用。当CPU不同时,只需修改这些函数即可。由于CPU访问PDIUS-BD12与普通存储器一样,只需根据硬件连接关系,在硬件抽象层中编写对PDIUSBD12写指令、写读数据的函数,供上层调用即可。实现PDIUSBD12的命令接口层需调用硬件抽象层函数,供上层模块调用。再设计前后台程序及标准设备请求程序模块。
用户可根据需要增加相应的状态标志位,如UART,SPI,I2C等接口收发数据完成标志来满足各种情况下的需要,然后定义一个结构体变量用于存放USB的标准设备请求。
在前台主程序中首先初始化全局变量和其他外围设备,然后在while(1)的死循环中检测状态变量值有无变化,根据不同的状态变量值调用下层的相应函数完成相关操作。在后台的中断服务程序中,根据读取的中断寄存器值一方面将PDIUSBD12接收到的数据移入CPU内存或将内存中的数据写入PDIUSBD12发送端点的缓冲区;另一方面根据具体情况改变状态变量值。
当前台主程序检测到状态变量收到SETUP包事件bEvent_flags.bits.setup_packet为1时,该标志位清零,再调用标准设备请求模块stdreq.c的control_handler()函数完成对USB设备的枚举。
设计标准设备请求模块,首先利用结构体定义USB枚举所需的各种描述符,以供不同设备请求使用,其次编写11个标准的设备请求处理函数。本层请求模块重要函数是协议控制子程序control han-dler(),它根据ControlData中标识的不同USB设备请求类型调用11个函数中的任意一个。除此之外,本层请示求模块还实现中断服务程序调用的控制端点接收与发送中断处理函数。
4 系统集成与应用
4.1 PC机驱动程序与应用程序的设计
利用该系统模块实现PC机通讯,需对PC机编写相关驱动程序和应用程序,可利用DriverStudio软件生成该系统模块在Windows环境下的驱动程序。应用程序的设计可使用诸如VB、VC、Delphi以及应用普遍的虚拟仪器软件开发工具LabVIEW等软件开发工具,直接调用驱动程序生成的动态链接库中的API函数,可根据具体任务编写相关应用程序。
4.2 应用于其他系统
利用AVR单片机的多种外设接口特点,例如UART、SPI、I2C接口等可以有效地实现与其他微处理器的通信,将该模块嵌入各种系统,实现与其他器件的通讯。固件程序中预留有UART、SPI、I2C等接口程序,只需通过简单的跳线连接就可选择相应的接口,从而实现应用系统增加USB接口。
4.3 固件程序移植其他平台
由于固件程序最大限度考虑到可移植性,所以将固件程序稍加修改即可应用于各种已拥有C语言编译器的微处理器,实现PDIUSBD12直接与微处理器的通讯。
移植固件程序主要工作有:根据硬件连接关系,修改硬件抽象层中的3个读写函数,实现CPU与器件之间的通信;通过调用PDIUSBD12命令接口层的读取芯片ID函数返回值是否为0×1012,测试CPU与器件之间的通讯是否正常。
5 在数据采集器中的应用
由于ATmega8片内集成有逐次比较型ADC,具有6路的模拟输入通道,所以只需要针对采集的物理量选用相应传感器,并将输出信号调整至0~Vcc的范围内就可利用该模块实现USB数据采集器。AVR单片机集成有ADC自带采样保持电路,具有内部参考电压和基于睡眠模式的噪声抑制器,从而大大提高ADC精度,实现高精度的数据采集。而设计只需在相应的固件程序巾增加获取ADC结果的函数,并设置相应的状态标志位即可完成USB数据采集器的设计。
6 结束语
以ATmega8和PDIUSBD12为核心,实现通用的USB接口模块设计,并应用于基于USB接口的数据采集器中。实验结果表明,该USB接口模块运行稳定可靠,通信速度快,易于修改移植,满足嵌人式系统对USB接口的需求,并能快速为各种微处理器增加USB接口,具有广泛的应用前景。
基于AVR单片机的多通道温湿度传感器检定系统
随着地面自动气象站的投入业务使用,山东省的大监自动气象站和区域自动气象站已经建成1 500多个,使我省的业务水平大幅提高,随着业务量增加的同时,也给计量检定工作能力提出了新的要求。但近些年来温湿度传感器的检定很大程度上仍停留在人工检定阶段。这种检定方法耗时、检定效率低,因此迫切设计出一套自动检定温湿度传感器的系统,为了改善这种状况,在VC 6.0环境下使用MSComm通信控件和数据库技术,开发了自动站温湿度传感器数据采集及处理系统,实现8路温湿传感器的数据批量采集,用以提高温湿度传感器的检定效率和准确度。
1 系统的整体结构及功能描述
该设计以AVR单片机和高精度A/D转换芯片ADS1232为核心,能对温湿度传感器进行检定。该温湿度传感器是温度和湿度一体化的传感器,温度检测的原理为利用PT100对温度进行测量。这样就需要将铂电阻信号转换成电压信号实现温度的采集。该设计采用REF200激发出200μA的恒流电流。湿度中输出0~1 V的电压,对应0%~100%的湿度。为了达到对温湿度值的高精度采集。在此采用高精度的24位A/D转换器ADS1232来实现。该设计通过检测温湿度传感器输出的信号,实现对此温湿度传感器的检定,单片机读取的传感器输出信息,通过串口送入计算机中显示。
2 硬件设计
2.1 系统硬件综述
该系统硬件电路由单片机电路、恒流源激发电路、8路选择电路、高精度A/D转换电路ADS1232电路、串行通信电路等组成。
2.2 系统控制核心
该系统采用ATmeGA16单片机。该单片机是一种低功耗8位RISC指令集单片机,具有丰富的片内外设,内置512 B E2PROM,I/O驱动能力强,特别适合低功耗型仪器仪表的控制。
单片机通过对高精度A/D转换芯片ADS1232实现对传感器的温度和湿度的信息采集,并与标准值进行比较,通过比较实现对待检定传感器的检定。
为了实现单片机与PC机的通信的同步性,采用外部7.372 8 MHz晶振作为主时钟。
2.3 恒流源激发电路
该设计中采用REF200产生200μA的恒流源激励,用于激励PT100产生电压信号,恒流源芯片REF200具有单通道输出(100±0.5)μA的高精度,并且具有±25 ppm/℃极低的温度漂移,这一特点使REF200非常适合用于此温湿度传感器中PT100的检测。
2.4 温、湿度8路通道选择电路
温、湿度8路通道选择电路采用通道数字控制模拟电子开关CD4051实现1~8的选择。将REF200的输出电流信号接入CD4051的3号管脚,单片机的I/O口输出控制信号控制4051的A,B,C引脚来实现X分别与X0~X7通道选通。
2.5 高精度A/D转换电路
该设计中采用24位A/D转换芯片ADS1232实现对温度和湿度输出的电压信号进行转换。ADS1232有两路采集通道,这样一个ADS1232就可以实现温湿度的同时转换。将温度和湿度的电压信号分别接入AINP1,AINN和AINP2,AINN2即可实现电压的采集,为了获得较高的电压基准,设计采用REF3133作为ADS1232的A/D转换电压基准。
3 系统程序设计
3.1 单片机程序
上电后主程序初始化寄存器(设置所用到的I/O口的输入/输出方式、外部中断寄存器、串口通信协议等),最后打开串口接收中断使能。当进入串口中断时判断当前检定几路传感器,然后依次采集各路通道的温度和湿度值,将采集到的值通过串口发送到PC机上上位机软件显示。
3.2 软件系统的主要功能与实现
该系统主要通过温湿度传感器的数据采集,实现对其的校准。整个系统在VisualC++6.0环境下开发,利用串口通信技术实现数据批量采集,使用数据库技术实现数据在SQL Server数据库中的存储与查询,使用VC中的DataGrid控件、DataCombo控件、ADO控件实现数据显示,数据查询,校准证书、检定证书打印,使用VC调用Excel实现校准数据记录表输出。
3.3 人机界面
3.3.1 温湿传感器检定界面
为了方便使用和操作,Visual C++设计了人机界面。运行该系统,进入主界面,菜单由文件、检测、查询、帮助组成。点击检测系统可以进入温湿传感器检测系统。可以根据需要选择不同的传感器个数(1~8)。依据检定要求填写检测环境以及温湿传感器信息,选择并打开COM口,依次对30%,40%,55%,75%,95%从低到高然后从高到低进行正/反程检定。
3.3.2 数据查询
该系统中的查询界面有数据查询和检验结论查询两部分组成。所有的数据查询都可以根据传感器编号或者检测日期进行查询。使用两个“Adodc”控件分别为“DataCombo”控件和“DataGrid”控件提供数据。利用SELECT语句实现查询功能。
在数据查询界面中,可以实现数据表格导出至Excel中以及数据的打印。
4 结语
该系统适用于温湿度传感器的批量校准,集数据采集、数据存贮、证书打印于一体,与实验室内通过自动气象站采集器校准温湿度传感器相比,具有存贮数据方便、实时数据动态刷新、证书自动打印等优点,大大降低了检定人员的工作量,节约了人力资源。
基于AVR单片机的某车型CAN总线系统设计
引言
现场总线技术[1]是目前自动化控制领域发展比较迅速的一门技术,其中CAN(Controller Area Network)总线[2]是在国际上应用最广泛的现场总线之一。近几年随着汽车电子行业的发展,现代汽车中CAN总线已经成为必须采用的装置之一。本文以ATMEL公司新近生产的一款内置CAN控制器的单片机——AT90CAN128为基础,设计了一款车载CAN总线系统,通过CAN智能测控仪表对车中部分单元参数量进行实时监控,使各单元之间协调运转。另外,传输线束大大简化,可靠性得到了极大的提高,有效节约了线束安装空间和系统成本。
1 AT90CAN128特性概述
1.1 基本特性
AT90CAN128[3]是基于AVR RISC结构的8位低功耗CMOS微处理器,它采用了先进的指令集以及单周期指令执行时间,其数据吞吐率高达1 MIPS/MHz,其内核具有丰富的指令集和32个通用工作寄存器。所有寄存器都直接与ALU相连接。通过将8位RISC CPU与系统内可编程的Flash集成在一个芯片内,为许多嵌入式控制应用提供了灵活而低成本的方案。
1.2 内置CAN控制器概述
AT90CAN128内置有完全符合CAN2.0A和2.0B标准协议的CAN控制器。采用MOb(消息对象)方式进行数据的发送和接收,共有15个MOb,它们具有相同的属性:有11位标识符(2.0A协议),也可扩展至29位(2.0B议);8位数据缓冲(静态分配);Tx,Rx帧缓冲或自动响应配置;时间标识。
MOb是一个CAN消息帧的描述符。它包括处理一个CAN消息帧的所有信息。这意味着一个MOb可以看成一个对象,来描述一条CAN消息。MOb的数目是从0到14。它们相互独立,但在多重比较的时候,低位的MOb会获得优先权。每个MOb都被安置在一个页中来保存。页的序号就是MOb的序号。
2 车载CAN总线控制系统[4]的设计
由于对实时性要求比较高,所以采用高速CAN总线,信息传输速度为500kbps,连接的主要对象有:驾驶员计算机、发动机、自动变速器、安全气囊、仪表信号采集系统、联合制动系统等。由于各个节点作用不同,所以在硬件搭建和软件设计以及通信协议的制定上都采用了相应的方案。
联合制动单元接收由驾驶员计算机终端发送的CAN总线消息命令,根据对液力制动扭矩、机械制动扭矩、合成扭矩等参数进行检测的状态,经过电液控制算法计算,实现前驱、后驱制动控制。对正常制动回路油位、紧急制动回路油位的报警等信息,通过CAN总线反馈给驾驶员计算机终端。
2.1 联合制动单元硬件电路组成
以AT90CAN128单片机作为控制系统核心,外围设有8路光隔模拟量输入、4路模拟量输出、多路光隔开关量输入、输出、LED报警及CAN总线收发器,总线的接口芯片选用的是Philips公司的PCA82C250。
2.2 通信协议制定
2.2.1 各终端消息标识符的定义
采用CAN扩展帧的29位标识符进行定义,其中P为3位优先级;R为保留扩展位;8位的BW为报文类型代码;8位的BD为目标地址或报文类型扩展码;8位的BY为发送报文源地址。部分设备节点名称和分配地址如下:主驾驶员终端地址10、副驾驶员终端地址20、联合制动单元地址30。
2.2.2 各消息类型和命令值内容的定义
驾驶员计算机终端对联合制动单元的控制消息内容为2个字节——命令类型和命令值。命令类型包括:状态查询命令(数据0×1,命令值0×0)、前/后驱制动命令(数据0×2/0×3,命令值0×0)、联合制动单元前/后驱制动信息确认(数据0×4/0×5,命令值0×0)等。
联合制动单元提供给驾驶员计算机终端的消息内容包括:联合制动单元状态信息(7字节,分别为液力制动扭矩、机械制动扭矩、合成扭矩、速度以及紧急回路和正常油压的数值,以及正常制动回路油位和紧急制动回路油位的报警状态)、联合制动单元报警信息(2字节,分别为正常制动回路油位报警和紧急制动回路油位的报警)、联合制动单元制动返回消息(2字节,分别为收到的前驱或后驱制动命令的命令数据和命令值)等。
2.3 软件设计(CAN总线通讯部分)
2.3.1 初始化部分
初始化前将CAN通用控制寄存器的最高位置1(复位模式)。完成后,回到操作模式。
下面给出了CAN控制器的初始化程序:
void CAN_INIT ( void )
{
CANGCON = 0×80 ; /*进入复位模式并且复位MOb*/
while ( ENFG == 1 ) ; /*测试CANGSTA中的ENFG位是否为0*/
CANGIE [...]
爱特梅尔推出13款AVR UC3 32位微控制器
爱特梅尔(Atmel)宣布推出32位AVR UC3产品组合的三个不同产品系列共13款新型器件。获奖的AVR UC3微控制器(MCU)具有高性能、可执行数字信号处理(DSP)指令、提供USB接口、安全加密和电容式触摸支持等特性。除了现有UC3 L和UC3 A系列中的新器件外,还提供了新的UC3 D系列微控制器。现在,爱特梅尔的AVR UC3产品组合包括:
· AVR UC3L:获奖的超低功耗32位微控制器,新产品包括新的存储器选项和附加的USB功能。
· AVR UC3D:针对入门级32位应用的全新产品系列,包括支持电容式触摸的硬件。
· AVR UC3A4:高性能、高处理能力UC3系列器件,配备高速USB和128kB SRAM。这些器件还备有可选256位AES加密/解密模块。
AVR UC3L――超低功耗32位微控制器
AVR UC3L是爱特梅尔采用picoPower 技术的32位微控制器系列,该系列器件适用于便携式消费电子和电池供电应用、板控制器、游戏操纵杆、远程控制和人机接口设备。AVR UC3 L系列在工作模式的耗电量低至165 μA/MHz,实时时钟(RTC)运行状态低至600 nA,深度睡眠模式下则低9 nA。picoPower器件可提供真正的1.62V运行,在1.62V电压下所有模拟模块、振荡器和闪存均具备全部功能。picoPower技术的梦游(SleepWalking )功能使得外设能够做出智能决策,并直接唤醒CPU,而所有UC3L器件现已具备这项功能。这样可以在外设层面分析和考核数据,因而可以延长CPU处于睡眠模式的时间,从而显着降低总体功耗。
UC3 L系列具有支持电容式触摸按键和滑条的内置电容式触摸外设,以及一个新型胶粘逻辑控制器。两者均可省去外部组件。为了保护敏感数据,FlashVault 代码保护功能可对片上闪存进行部分编程并锁定,实现安全的片上软件知识产权存储。爱特梅尔扩展了目前提供的UC3L0存储器选项,提供128kB和256kB闪存。这些新型器件还具有32kB内部SRAM。新型UC3L4器件与现有UC3L0器件引脚兼容。UC3L4增加了与UC3L系列的全速USB设备连接。新型UC3L4器件备有64kB、128KB和256KB板上闪存选项,并提供最高32kB的内部SRAM。
AVR UC3D ―― 用于消费应用的入门级32位微控制器
新型AVR UC3D 是入门级32位微控制器系列,非常适合需要低功耗电容式触摸的产品设计,以及其它消费和工业应用。该系列器件为设计人员提供了丰富的功能集,包含硬件QTouch 电容式触摸接口、USB全速器件、 带有日历的RTC、10位ADC、USART、SPI、TWI、PWM和I2S。UC3D微控制器集成了梦游(SleepWalking)技术,可通过外设从睡眠模式唤醒。在电容式触摸应用中,该器件可进入睡眠模式,并被接近触摸唤醒。UC3D微控制器的电容式触摸模块支持硬件中的多达25个信道,每个信道可配置为按键、滑条和转盘。多个触摸信道可以集合在一起,从而在不同通道要求不同灵敏度水平的应用中实现更好的性能和更大的灵活性。
通过将传感器捆绑成组,设计工程师可以使用不同的表面材料,并且简化实施方案。胶粘逻辑控制器包含可编程逻辑和查找表,可以连接通用I/O(GPIO)引脚,能够减少外部组件的数目,并进而减少系统成本和电路板空间。UC3D与UC3 B系列引脚兼容。UC3B具有更高的存储密度和USB OTG功能,并为需要更多功能性和更高性能的现有UC3D客户提供了移植路径。
AVR UC3A4 ―― 达到速度和安全性平衡
新型AVR UC3A4是高性能、高处理能力32位微控制器系列,非常适合需要高安全性的高速应用,如PC外设、电子令牌(e-token)、高速通信网关和音频应用。该器件从闪存运行时性能水平最高达到1.51 DMIPS/MHz,并提供高速USB OTG。AVR UC3A4带有128KB的板上SRAM,其中64KB SRAM直接与32位AVR CPU连接以增强性能优化,并带有两个连接在高速总线上的32kB SRAM块。这两个存储块在物理上是分开的,但是在地址变换中是连续的,从而允许实时兵乓缓冲(ping-pong buffering)以提高性能。板上高速USB OTG利用了SRAM配置,以确保高性能和高处理能力。
其它特性包括存储器至存储器DMA控制器、SD/SDIO卡支持和带有ECC接口的MLC [...]
时钟芯片SD2200ELP与AVR单片机的接口设计
在提升机制动闸瓦间隙实时在线检测的设计中,需要保存故障时间和故障数据。大部分仪器仪表中都要使用时钟芯片,但是很多的实时时钟芯片(如PCF8563)没有掉电保护,须外接晶振和电池,比较麻烦。而深圳兴威帆电子技术有限公司生产的SD2200ELP是内置32 KBE2PROM的串行实时时钟芯片,不需要外接器件支持,连线简单、可靠,提供的数据精确,断电后也能继续工作。微控制器采用Atmel公司的ATmegal6单片机,利用AT-megai6的硬件TWI接口可直接对SD2200ELP进行操作,无需软件模拟I2C方式,使用方便、可靠。
1SD2200L简介
SD2200L系列(包括SD2200B/C/D/E/FLP)是一种具有内置晶振、支持I2C总线的高精度实时时钟芯片。SD2200ELP是SD2200L系列中的一种,该芯片可保证时钟精度为±5ppm(在-10~50℃下),即年误差小于2.5min。芯片内置时钟精度调整功能,可以在很宽的范围内校正时钟的偏差;内置32KB串行非易失性E2PROM;可在3.0~5.5V下工作,擦写次数可达100万次,数据保存时间为十年;内置一次性电池,可保证在外部掉电情况下时钟使用寿命超过五年。
2硬件设计
SD2200ELP既有实时芯片的功能,又可以存储数据到内置E2PRROM中。因为SD2200ELP是I2C总线接口方式,所以其硬件接口设计非常简单,可以大大简化单片机外围器件。AVR的TWI总线实质上就是I2C总线,只是名称不一样。
3软件设计
如果外围器件是I2C接口类型,而单片机没有I2C接口,那么必须用软件模拟的方式来实现。AVR单片机功能很强,它带有TWI接口,可以直接利用ATmegal6的硬件I2C接口来对外围I2C器件进行操作,非常方便、有效。这样可以节省模拟I2C程序,为用户编程省去很多麻烦。下面是使用ATmegal6对内置E2PROM的实时时钟芯片SD2200ELP读/写的程序设计,均是在ICCAVR开发环境下编写。
3.1ATrnegal6的TWI总线接口
两线接口TWI很适合于典型的处理器应用。TWI协议允许系统设计者只用两根双向传输线就可以将128个不同的设备互连到一起。这两根线是时钟线SCL和数据线SDA。外部硬件只需2个上拉电阻,每根线上1个。所有连接到总线上的设备都有自己的地址。TWI协议解决了总线仲裁的问题。
TWI总线可以工作于4种不同的模式:主机发送器(MT)、主机接收器(MR)、从机发送器(ST)以及从机接收器(SR)。在后面将介绍的连续读E2PROM操作中就使用了MT和MR模式。
3.2实时时钟读取
实时数据寄存器是一个56位的存储器,它以BCD码方式存储,包括年、月、日、星期、时、分、秒的数据。实时数据的读/写操作都通过发送或接收年(实时数据读写方式1)数据的第一位“LSB”开始执行的。
3.3E2PROM的读/写
SD2200ELP的E2PROM操作指令与实时时钟的器件代码是不一样的。当CPU要对SD12200L中的E2PROM进行操作时,首先发出开始信号给SD2200L,然后CPU发出包括4位器件代码10lO、3位页选码000、1位读/写指令的8位数据(即“从器件地址”)。一位读/写指令表明进行何种操作(读操作为1,写操作为O)。
3.3.1对E2PROM的页写操作
写操作可分为:单字节写操作和页写操作。单字节写操作指每次只写入一个字节的数据;页写操作指一次可以写入多个字节的数据。值得注意的是,SD2200L是一个系列,不同类型对应着不同数量的E2PROM。例如在页写操作下,SD2200ELP单个写周期内E2PROM可以被写入64字节的数据。在某监测仪器应用中,需要保存故障值和故障发生时间,故采用页写方式。
3.3.2对E2PROM连续读操作
读操作有3种方式:立即地址读操作、随机地址读操作和连续读操作。ATmegal6为完成从SD2200ELP内置串行E2PROM中读取数据,必须将几种TWI模式组合起来。由于内置E2PPROM的存储容量大小不同,因此在进行读操作时,其操作方式有所不同。在查询故障值和故障时间时,需要读出保存在E2PRoM的数据,故采用连续读操作。与页写操作类似,SD2200ELP最多连续读64字节的数据。
4总结
SD2200ELP可以方便地结合AVR单片机的TWI总线实现日期显示功能。并且因其内置32 KBE2PROM,可以保存时间和相应数据;具有电路简单、占用资源少、程序简洁、调试方便、功耗低等特点。经过实际的现场运行证实了该设计方法是可靠、有效的。对本文的设计方案和程序稍加修改后,可以用在各种需要此功能的数字控制和监控检测系统中
AVR单片机在跳频系统数字信号处理中的应用
ATmega103单片机是ATMEL公司推出的精简指令集(RISC)AVR(ADVANCE RISC)系列单片机产品,这是一种增强型RISC结构,采用了CMOS技术的8位微控制器?该结构能有效支持高级语言以及密集度极大的汇编器代码程序。
跳频系统(FH)是指载波频率按某种跳频图案(跳频序列)在很宽的频带范围内跳变的通信系统,由于该系统具有抗干扰、抗多径和抗衰落性等能力,故在军用和民用领域都得到了广泛的应用。本系统方案中,信号处理模块主要完成跳频模式(FH)下有关数字信号的处理,包括话音编解码、话音组织及与同步有关的操作等,这些技术目前是跳频系统的关键技术之一。
本文介绍ATmega103单片机的特点及其在FH系统数字信号处理模块中的使用方法,同时详细介绍SPI(Serial Peripheral Interface)的特点和应用。
1 ATmega103单片机概述
ATmega103是基于AVR RISC结构的8-bit低功耗CMOS微处理器,它吸取了PIC系列及8051系列单片机的优点,并作了重大改进,其特点如下:
●供电电压为2.7~6V,主频最高可达12MHz;
●具有120条指令,大多数指令执行时间为单个时钟周期;
●带有128k字节片内可下载的Flash存储器(SPI串行下载1000次寿命)和4k字节的片内RAM以及4k字节的片内EEPROM;
●有32条可编程I/O线、8条输入线和8条输出线;
●具有32个8位通用寄存器;
●内含2个8位定时器和1个16位定时器;
●带有可编程串行UART+SPI接口;
●具有内部中断源和8个外部中断源;
●带有8通道10位A/D转换器、片内模拟比较器以及看门狗等电路;
●可在线编程。
ATmega103因其上述特点使其成为一种适合于多功能、快速,且具有高度灵活性和高性价比的微控制器。
2 跳频信号处理对单片机的要求
跳频信号处理模块是FH电台的关键部分之一,主要用于完成电台的同步及有关数据处理组织等任务。单片机是该模块的核心,模块的许多功能都是在单片机的直接或间接参与下完成的。综合考虑,单片机在该模块中的作用大致如下:
(1)完成大量数据交换,因为电台在工作时需要接收或传送大量其它单片机以及模块内部的有关参数数据;
(2)完成快速实时处理功能,因为模块对许多信息要求立即处理,例如TOD(Time of Day)信息、话音数据、实时工作频率计算等。
(3)用于数据交换,包括单片机接口、TOD、同步信息、控制状态参数数据接口等。
(4)完成大量运算。一般电台在FH工作方式时,每跳都需要计算TOD、工作频率、接收或发送数据的重新组织。
(5)通过足够的I/O口来提供多种控制状态线,以供电台及模块内部使用。
(6)通过片内大量数据来存储区存取运算过程中产生的大量中间数据。
3 设计思路
根据电台FH信号处理模块对单片机的要求,如果选用89C5X系列单片机,不但在实现功能上比较困难(如运算速度、I/O口数量等),而且所需的外围扩展电路也必须增加(如RAM,通信口等)。而选用ATmega103单片机则能较好地满足设计要求,因此,本设计选用ATmega103单片机来实现信号处理模块的功能。
此外,在实际使用中,还需注意软件设计。为了便于调试、维护及功能扩展,该系统采用模块化程序设计方案;而且考虑到软件的可靠性,还增加了容错和冗余设计;同时,针对数据接口多的特点,程序中还设计了简明、通用性的接口通信协议。
4 Atmega103的SPI在FH中的应用
由上述描述可知,SPI在设计中占有重要的地位,模块内部的主要控制和数据交换都由其完成,下面详细介绍SPI在模块中的设计方法。
4.1 SPI的工作原理
ATmega103和外设之间可通过SPI进行高速同步数据传输。其中,SCK为主机的时钟输出和从机的时钟输入。把数据写入主机SPI数据寄存器的操作将启动SPI时钟产生器,此时,数据将从主机的MOSI移出,并从从机的MOSI移入,移完一个字节后,SPI时钟停止,并设置发送结束标志。此时如果SPCR的SPIE(SPI中断使能)置位,则引发中断。选择某器件为从机时,可将从机选择输入端SS拉低。主从机的移位寄存器可以看成是一个分布式的16 位循环移位寄存器。当数据从主机移向从机的同时,数据也将从从机移向主机,从而在移位过程中实现主从机的数据交换。
SPI的主要寄存器包括控制寄存器SPCR、状态寄存器SPSR、数据寄存器SPDR。其中SPCR用于设置SPI的中断使能、数据传输顺序、主从机选择、时钟相位和时钟速率等;SPSR为SPI中断标志,用于标志写冲突。SPDR寄存器用于在寄存器文件和SPI移位寄存器之间传递数据。写该寄存器时,将先对数据传送进行初始化,读该寄存器时,读到的将是移位寄存器接收缓冲区的值。
4.2 SPI的程序设计
在该FH信号处理模块中,单片机通过SPI与FPGA交换数据。FPGA选用Xinlix公司的XCV100。下面具体介绍几个主要的子程序:
(1)SPI的初始化
程序在复位时,通常都要对SPI口进行初始化。单片机设置若为主机。SPI的数据顺序为LSB?低位?在前。SCK时钟空闲时为低电平,在SCK的下降沿采样数据;时钟为系统时钟的1/128。那么,具体的初始化程序如下:
reset:ldi rx,$0
out spsr,rx ?;清SPI中断标志,写冲突标志
ldi rx,$0f7;
out spcr, [...]
基于AVR单片机数字功率跟随技术
引言
目前地球的五大问题,包括能源失衡、产油国独裁、失控的气候变迁、能源匮乏、生物多样性消失等,都是因为人类大量使用并依赖传统的能源所造成,而且五大问题环环相扣、迫在眉睫,再不积极采取行动,全人类都将陷入无法想像的浩劫,所以发展替代能源已不仅仅是解决高油价的方案,而是人类能在地球上永续生存下去的最关键要素。煤炭、石油是我国利用的主要能源,它们的巨量消费不仅是大气污染的主要来源,还有其不可再生性,使得它们会逐渐被可再生能源所代替。我国大部分地区有着丰富的风能和太阳能资源,但限于科技的发展程度,它们一直未能得到有效地利用。近些年,随着电子技术和硅材料研究的不断进步,促进了对风能、太阳能的开发利用,市场前景相当广阔。在此前提下,研制了智能化、模块化、一体化的新一代风、光互补综合电源系统。
1 风光互补发电系统
风、光互补电源系统主要有风力发电机、太阳能电池板、蓄电池组和电源综合控制柜组成。其设计理念是利用太阳能电池板和风力发电机双发电系统对蓄电池组(48V)充电,再把直流电逆变成AC 220V/50Hz的交流电,成为我们常用的交流电源。蓄电池组的充电方式决定其使用寿命的长短,但是风能的突然性和太阳能的时间性注定发电系统不能输出可靠稳定的直流电,若对其不加处理地直接对蓄电池组充电,不仅大大缩短蓄电池组的寿命,而且不能有效地利用风能和太阳能。因此,在充电过程中引入了基于ATMEGA8单片机数字功率跟随技术的控制系统,不仅大大提高了发电系统的稳定性,而且提高了电源系统的可靠性。
2 充电系统组成
以风机为例,充电系统主电路采用日产某公司的直流变换模块PH600S28048,直流输入电压:200~400V,输出电压:43~6lV遥控可调。风机为三相线电压220V输出,蓄电池组的充电电压范围:46~57V。充电的恒流和功率跟随有ATMEGA8来完成。
3 系统工作原理
ATMEGA8是 AVR高档单片机,内部集成了可选择频率可校准的RC振荡器,8K FIASH程序存储器、1K SRAM数据存储器、512字节的E2PROM。8通道10位A/D转换,3个PWM输出通道可作为D/A输出,内部可编程的看门狗定时器等。通过霍尔电流传感器把充电电流转换成0~5V的标准信号,经A/D转换成数字信号送CPU处理,并通过PBl脚.PWM输出控制光藕PC817的道通度控制充电机的输出电压,从而通过简单的数字PI调节达到恒流的目的。不过充电机恒流工作有一个重要的前提条件就是输入能源必须有足够大的功率。但是自然界风能、太阳能的随栅陛、突然性使恒流充电难以实现。特别是风能,如果风速特别大而充电机仍然输出不变的电流(负载不变)会损坏风机。如果风速小功率不够就会导致充电机无法正常工作,时而关断,时而开通。造成此种现象是因为充电模块PH600S工作正常输入电压范围为DC 200~400V。为了克服此情况就加入了数字功率跟随技术,以风机输入电压300V经A/D转换数字为基准来调整负载大小(输出电流)做数字PI调节,从而达到充电机正常工作。
4 软件设计思想
程序的编写采用AVR单片机专用的汇编语言,模块化设计。
全部程序代码由模拟量的数字采集,中值滤波、数字比较、PWM输出等组成。关键是数字比较构成简单的PI调节且电流环嵌套与电压环之内。
程序流程如下:以电流环为例做一介绍:由PH600S系列模块组成的硬件充电机输出电流由0~5V信号线性调节,电流给定信号(0~5V)由ATMEGA8单片机PBl口输出10位PWM脉宽调制波形,再经RC滤波产生。将M8单片机的T/Cl控制寄存器TCCRlA设置值83H,TCCRlB控制寄存器为 05H也就定义PBl口输出10位快速的PWM波形。T/C1计数寄存器TCNTI(TCNTlH:TCNT1H)值便从0000一OlFFH之间变换。脉冲输出占空比(输出电压)由比较控制寄存器OClA设定值与TCNTl寄存器计数值比较产生;OClA的内容由0000—0lFFH可变设定也就决定输出电压由0~5V线性可调。OClA值由电压环做模拟PI调节运算后给定,这样电压环和电流环的互相嵌套便构成了功率的恒定跟随,从而提高了风、光互补发电的效率。
5 结语
太阳能充电电路和风机的功率跟随原理是一样,只不过太阳能电池板的输入电压低,变化比较缓慢,已采用PH30048—48模块作主回路。利用ATMEGA8单片机作控制,日产某公司的直流变换模块为主电路做成的风光互补发电系统,已在上海的花鸟岛某驻军运行2年多,十分稳定,受到了军部领导的好评。
