2012 ~ 2013 学年 第 2 学期
《 单片机应用技术 》
课 程 设 计 报 告
题 目: 单片机课程设计 专 业: 电气工程及其自动化 班 级:10级电气工程及其自动化2班 姓 名: 赵伟阳、程浩
刘帅、孙轩
指导教师: 林开司 宋洪儒
电气工程系 2013年4月11日
任务书
智能式直流电压表的设计
摘 要
设计了一种基于单片机的智能电压表系统, 主要由时钟电路、调试接口及复位电路、串行接口电路、模拟量线性隔离电路,液晶显
示器电路组成。这种以单片机为核心的新型智能仪表精度高、误差小、性能可靠、价格低廉,能向外输出数字信号并进行数据通信,有很好的应用前景。
An intelligent DC voltmeter system is designed based on single-chip
microcomputer. It comprises of clock circuit,debug interface ,reset circuit, serial interface circuit, analog variable linear isolation circuit and LCD circuit. This appliance based on single-chip microcomputer has high accuracy, small error, reliable performance, and low price. It also can output digital signal and have data communicatin. So it will has a good prospect of application.
关键词:单片机;智能直流电压表;串行接口;液晶显示
目 录
引言……………………………………………………………………………………5
1 整体方案设计………………………………………………………………………5
2 硬件电路设计………………………………………………………………………5 2.1 时钟电路………………………………………………………………………5 2.2 调试接口及复位电路…………………………………………………………6 2.3 串行接口电路……………………………………………………………………6 2.4 模拟量线性隔离电路……………………………………………………………7 2.5 液晶显示电路……………………………………………………………………8
3 系统程序设计………………………………………………………………………9
4 程序清单……………………………………………………………………………9
5 小结…………………………………………………………………………………12
参考文献………………………………………………………………………………13
智能式直流电压表的设计
引言
在现代检测技术中, 常需用高精度智能式电压表进行现场检测。与模拟电压表和数字电压表相比,智能电压表有很多优点。比如,读数准确方便、精度高、误差小、灵敏度高、能将检测到的数据送入微计算机系统,完成计算、存储,控制和显示等功能。随着智能化微机测量和控制技术的迅速发展, 以单片机为核心的智能式电压表已凸显出优势。
1 整体方案设计
该智能式直流电压表以C8051F330D 单片机为核心,通过降压及模拟量线性隔离转换电路将直流0~200V 的输入电压转换为隔离的0~2.0V 的单片机输入信号,通过C8051F330D 的10 位SAR ADC 采样并换算为实际电压值送液晶显示器显示。时钟电路给MCU 提供高精度的时钟信号;C2 接口电路为系统提供全速,非侵入式的系统调试接口;外部复位电路强制MCU 进入复位状态;利用SP3223 转换芯片,扩展与上位机通信的RS-232 串行接口。系统原理框图如图1 所示。
图 1
2 硬件电路设计 2.1 时钟电路
时钟电路如图2 所示。一般情况下, 石英晶振的频率为典型值12MHz ,这样有利于得到没有误差的波特率,电容C1,C2 起稳定振荡频率,快速起振的作用。
图 2
2.2 调试接口及复位电路
图 3
C8051F330D 有一个Silicon Labs 2 线(C2)调试接口,支持Flash 编程, 边界扫描和使用安装在最终应用系统中的器件进行在系统调试。C2 接口使用一个时钟信号(C2CK ) 和一个双向的C2 数据信号(C2D )在器件和宿主机之间传递信息。C2 协议允许C2 引脚与用户功能共享,可以进行在系统调试,Flash 编程和边界扫描外部/RST 引脚提供了使用外部电路强制MCU 进入复位状态的手段. 在/RST 引脚上加一个低电平有效信号将导致MCU 进入复位状态.C2 接口和外复位电路如图3 所示。 2.3 串行接口电路
单片机要想与PC 机之间进行串行通信, 但由于C8051F330D 的工作电压3V , 电平为
TTL 电平,需要转换为RS-232 标准电平后才能和PC 机通信。该控制系统选用由SIPEX 公司生产的低能耗和具有待电工作模式的SP3223ECY 芯片[1]完成串行通信电平转换,实现远程计算机命令控制和存储数据上传。串行接口电路如图4。
SP3223ECY 是SIPEX 公司生产的RS-232 双驱动器/双接收器芯片, 支持EIA/TIA-232 和ITU-TV.28/V.24 通信协议, 片内有一个高效电荷泵, 可在单+3.0~+5.5V 电源下产生±5.5V 的RS-232 电平。满负载时,SP3223ECY 器件可工作于235kb/s 的数据传输率;有负载时的最小数据传输率为120kb/s。3.3V 时仅需0.1μF 的电容。
图 4
2.4 模拟量线性隔离电路
图 5
在单片机应用系统中,输入输出信号的隔离是必要的,对于模拟量信号一般采用隔离放大器, 隔离放大器具有极好的抗共模干扰能力,能有效地阻断现场和数据采集系统之间电的联系,但并不切断它们之间的信号传递。由于隔离放大器产品价格昂贵,普通光耦线性区很短,且采用普通光耦构成的电路难以达到精度要求,而LOC11X (X=0,1,2)线性光电耦合器在伺服模式设计下运行[2],可以补偿发光二极管的非线性时间及温度特性,所以本系统采用由线性光电耦合器LOC11X 构成的线性隔离电路。工作原理如图5。各参
数计算如下:
(1)K1:伺服增益。K1=I1/IF。对于LOC111,当Vcc=2.5V,IF=10mA 时,K1 的典型值为0.007。
(2)K2:正向增益。K2=I2/IF。当Vcc=15V,IF=10mA 时,K2的典型值为0.007。 (3)K3:转移增益。K3= K2/K1。
(4)R1:由于Vin=VA, 所以Vin=I1R1, 又由式K1=I1/IF可知I1= K1IF。假设Vin 最大值为2V , 设定U1输出值为10mA ,因此R1=Vin/( K1IF)取K1的最大值为0.004, 则R1=2V/(0.004×10mA)=50k。
(5)R2:由于Vout=I2R2, 又由式K2=I2/IF可知:I2=IFK2, 则R2=Vout/(IFK2) 。其中IF 的最大值取10mA , K2的最小值取0.004, Vout 取2V , 代入上式可求得R2为50k , 实际的电路采用电阻串联电位器, 阻值取R2+RW=47k+10k。
本电路经调试可得到0.1%以上的线性度。 2.5 液晶显示电路
本设计采用NLSF595 作为液晶显示器与C8051F330D 的接口电路, 如图6。安森美公司的NLSF595 [3] 是一个先进的漏极开路输出CMOS 移位寄存器。采用的是0.6μm 硅片CMOS 制造工艺。通过专线可以直接与控制器连接,所有的管脚具有过压保护功能,不论工作电压是多少,均可允许管脚电压高于Vcc 大7.0V ,而不会造成损害或中断器件工作。器件的工作电压2.0~5.5V,输出电压独立于电源电压,可达0~7.0V。
图 6
3 系统程序设计
本系统的设计中,使用了C8051F330D 的看门狗,只需要编程时在程序段中插入改变看门狗寄存器值的语句就可以保证程序的执行,而在系统死机时则会自动复位。由于在实际使用环境中会存在各种各样的干扰源产生干扰信号,为了防止干扰对系统的影响采用了各种抗干扰的算法。本设计在模拟量的采集过程中采用数字滤波。主程序流程图如图7所示。
4 程序清单
#include #include
#include sfr16 DP = 0x82;
sfr16 TMR3RL = 0X92; sfr16 TNR3 = 0x94; sfr16 ADC0 = 0xbd; sfr16 ADC0GT = 0xc4; sfr16 ADC0LT = 0xc6; sfr16 RCAP2 = 0xca; sfr16 T2 = 0xcc;
sfr16 RCAP4 = 0xe4;
图 7
sfr16 T4 = 0xf4; sfr16 DAC0 = 0xd2; sfr16 DAC1 = 0xd5;
#define BAUDRATE 9600 #define SYSCLK 24500000 #define SAMPLE_RATE 50000 #define INT_DEC 256 /**********/ /*函数声明*/ /***********/
void PORTb_Init (void); void UART0_Init (void); void ADC0_Init (void);
void Timer3_Init (int count); void ADC0_ISR (void);
void Write_CHAR(unsigned char yjchar); void Write_COM(unsigned char yjcom); void LCD_Init(void); void LCD_WR(void) unsigned long vol; int k;
unsigned long result;
unsigned char NCDdata[10]={0x30};
unsigned char xdata tab2[10]=[0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; /**********/ /*主函数*/ /**********/ void main (void) {
unsigned int i;
unsigned int m1,m2,m3,m4; unsigned char aa,bb,cc,dd; PCA0MD &= ~0x40; OSCICN |= 0x30; PORTb_Iint (); UART0_Init ();
Timer3_Init (SYSCLK/SAMPLE_RATE); ADC0_Init (); AD0EN = 1; EA = 1; vol = result;
vol = vol*3300/10; vol =vol/1024; LCD_WR()
}
/***********/
/*PORTb初始化程序*/ /***********/
void PORTb_Init (viod) {
XBR0 |= 0x01; XBR1 |= 0x40; P1MDIN|=0X02; P1SKIP |= 0x02; P0MDOUT|= 0X10; }
/***********/
/*UART0初始化程序*/ /***********/
void UART0_Init (void) {
SCON0 = 0x10; TMOD = 0x20; TH1 = 0x96; TR1 = 1; PCON |= 0x80; TI = 1; }
/************/
/*ADC0初始化程序*/ /************/
void ADC0_Init (void) {
ADC0CN = 0xc5; REF0CN = 0x0e; AMX0P=0X09; AMX0N=0X11; ADC0CF = 0x38; EIE1 |= 0x08; }
/***********/
/*定时器T3初始化程序*/ /************/
void Timer3_Init (int counts) {
CKCON=0x80; TMR3RL = -counts; TMR3 = 0xffff;
EIE1 &= ~0x80; TMR3CN |= 0x40; }
/************/
/*ADC中断处理程序*/ /************/
void ADC0_ISR (void) interrupt 10 {
static unsigned int_dec=INT_DEC; static unsigned long accumulator=0L; ADC0CN &= ~0x20; accumulator=accumulator +ADC0; int_dec--; if (int_dec == 0) { int_dec = INT_DEC; result = accumulator>>8; accumulator = 0L; } }
5 小结
以单片机为核心的智能电压表功能强大,除可以和PC 机通信外.还可以增加参数设置,超限报警等功能,工作可靠,性能稳定,有传统电压表无法比拟的优势,必将逐渐取代传统电压表。
参考文献:
[1] 何立民. MCS-51单片机应用系统设计. 北京:北京航空航天大学出版社, 1993 [2] 李广弟. 单片机基础. 北京:北京航空航天大学出版社, 2001
[3] 张毅刚. MCS-51单片机应用设计. 哈尔滨:哈尔滨工业大学出版社, 1990 [4] 房小翠. 单片机使用系统设计技术. 北京:国防工业出版社, 1999 [5] 胡汉才. 单片机原理及其接口技术. 北京:清华大学出版社, 1996
答辩记录及评分表
2012 ~ 2013 学年 第 2 学期
《 单片机应用技术 》
课 程 设 计 报 告
题 目: 单片机课程设计 专 业: 电气工程及其自动化 班 级:10级电气工程及其自动化2班 姓 名: 赵伟阳、程浩
刘帅、孙轩
指导教师: 林开司 宋洪儒
电气工程系 2013年4月11日
任务书
智能式直流电压表的设计
摘 要
设计了一种基于单片机的智能电压表系统, 主要由时钟电路、调试接口及复位电路、串行接口电路、模拟量线性隔离电路,液晶显
示器电路组成。这种以单片机为核心的新型智能仪表精度高、误差小、性能可靠、价格低廉,能向外输出数字信号并进行数据通信,有很好的应用前景。
An intelligent DC voltmeter system is designed based on single-chip
microcomputer. It comprises of clock circuit,debug interface ,reset circuit, serial interface circuit, analog variable linear isolation circuit and LCD circuit. This appliance based on single-chip microcomputer has high accuracy, small error, reliable performance, and low price. It also can output digital signal and have data communicatin. So it will has a good prospect of application.
关键词:单片机;智能直流电压表;串行接口;液晶显示
目 录
引言……………………………………………………………………………………5
1 整体方案设计………………………………………………………………………5
2 硬件电路设计………………………………………………………………………5 2.1 时钟电路………………………………………………………………………5 2.2 调试接口及复位电路…………………………………………………………6 2.3 串行接口电路……………………………………………………………………6 2.4 模拟量线性隔离电路……………………………………………………………7 2.5 液晶显示电路……………………………………………………………………8
3 系统程序设计………………………………………………………………………9
4 程序清单……………………………………………………………………………9
5 小结…………………………………………………………………………………12
参考文献………………………………………………………………………………13
智能式直流电压表的设计
引言
在现代检测技术中, 常需用高精度智能式电压表进行现场检测。与模拟电压表和数字电压表相比,智能电压表有很多优点。比如,读数准确方便、精度高、误差小、灵敏度高、能将检测到的数据送入微计算机系统,完成计算、存储,控制和显示等功能。随着智能化微机测量和控制技术的迅速发展, 以单片机为核心的智能式电压表已凸显出优势。
1 整体方案设计
该智能式直流电压表以C8051F330D 单片机为核心,通过降压及模拟量线性隔离转换电路将直流0~200V 的输入电压转换为隔离的0~2.0V 的单片机输入信号,通过C8051F330D 的10 位SAR ADC 采样并换算为实际电压值送液晶显示器显示。时钟电路给MCU 提供高精度的时钟信号;C2 接口电路为系统提供全速,非侵入式的系统调试接口;外部复位电路强制MCU 进入复位状态;利用SP3223 转换芯片,扩展与上位机通信的RS-232 串行接口。系统原理框图如图1 所示。
图 1
2 硬件电路设计 2.1 时钟电路
时钟电路如图2 所示。一般情况下, 石英晶振的频率为典型值12MHz ,这样有利于得到没有误差的波特率,电容C1,C2 起稳定振荡频率,快速起振的作用。
图 2
2.2 调试接口及复位电路
图 3
C8051F330D 有一个Silicon Labs 2 线(C2)调试接口,支持Flash 编程, 边界扫描和使用安装在最终应用系统中的器件进行在系统调试。C2 接口使用一个时钟信号(C2CK ) 和一个双向的C2 数据信号(C2D )在器件和宿主机之间传递信息。C2 协议允许C2 引脚与用户功能共享,可以进行在系统调试,Flash 编程和边界扫描外部/RST 引脚提供了使用外部电路强制MCU 进入复位状态的手段. 在/RST 引脚上加一个低电平有效信号将导致MCU 进入复位状态.C2 接口和外复位电路如图3 所示。 2.3 串行接口电路
单片机要想与PC 机之间进行串行通信, 但由于C8051F330D 的工作电压3V , 电平为
TTL 电平,需要转换为RS-232 标准电平后才能和PC 机通信。该控制系统选用由SIPEX 公司生产的低能耗和具有待电工作模式的SP3223ECY 芯片[1]完成串行通信电平转换,实现远程计算机命令控制和存储数据上传。串行接口电路如图4。
SP3223ECY 是SIPEX 公司生产的RS-232 双驱动器/双接收器芯片, 支持EIA/TIA-232 和ITU-TV.28/V.24 通信协议, 片内有一个高效电荷泵, 可在单+3.0~+5.5V 电源下产生±5.5V 的RS-232 电平。满负载时,SP3223ECY 器件可工作于235kb/s 的数据传输率;有负载时的最小数据传输率为120kb/s。3.3V 时仅需0.1μF 的电容。
图 4
2.4 模拟量线性隔离电路
图 5
在单片机应用系统中,输入输出信号的隔离是必要的,对于模拟量信号一般采用隔离放大器, 隔离放大器具有极好的抗共模干扰能力,能有效地阻断现场和数据采集系统之间电的联系,但并不切断它们之间的信号传递。由于隔离放大器产品价格昂贵,普通光耦线性区很短,且采用普通光耦构成的电路难以达到精度要求,而LOC11X (X=0,1,2)线性光电耦合器在伺服模式设计下运行[2],可以补偿发光二极管的非线性时间及温度特性,所以本系统采用由线性光电耦合器LOC11X 构成的线性隔离电路。工作原理如图5。各参
数计算如下:
(1)K1:伺服增益。K1=I1/IF。对于LOC111,当Vcc=2.5V,IF=10mA 时,K1 的典型值为0.007。
(2)K2:正向增益。K2=I2/IF。当Vcc=15V,IF=10mA 时,K2的典型值为0.007。 (3)K3:转移增益。K3= K2/K1。
(4)R1:由于Vin=VA, 所以Vin=I1R1, 又由式K1=I1/IF可知I1= K1IF。假设Vin 最大值为2V , 设定U1输出值为10mA ,因此R1=Vin/( K1IF)取K1的最大值为0.004, 则R1=2V/(0.004×10mA)=50k。
(5)R2:由于Vout=I2R2, 又由式K2=I2/IF可知:I2=IFK2, 则R2=Vout/(IFK2) 。其中IF 的最大值取10mA , K2的最小值取0.004, Vout 取2V , 代入上式可求得R2为50k , 实际的电路采用电阻串联电位器, 阻值取R2+RW=47k+10k。
本电路经调试可得到0.1%以上的线性度。 2.5 液晶显示电路
本设计采用NLSF595 作为液晶显示器与C8051F330D 的接口电路, 如图6。安森美公司的NLSF595 [3] 是一个先进的漏极开路输出CMOS 移位寄存器。采用的是0.6μm 硅片CMOS 制造工艺。通过专线可以直接与控制器连接,所有的管脚具有过压保护功能,不论工作电压是多少,均可允许管脚电压高于Vcc 大7.0V ,而不会造成损害或中断器件工作。器件的工作电压2.0~5.5V,输出电压独立于电源电压,可达0~7.0V。
图 6
3 系统程序设计
本系统的设计中,使用了C8051F330D 的看门狗,只需要编程时在程序段中插入改变看门狗寄存器值的语句就可以保证程序的执行,而在系统死机时则会自动复位。由于在实际使用环境中会存在各种各样的干扰源产生干扰信号,为了防止干扰对系统的影响采用了各种抗干扰的算法。本设计在模拟量的采集过程中采用数字滤波。主程序流程图如图7所示。
4 程序清单
#include #include
#include sfr16 DP = 0x82;
sfr16 TMR3RL = 0X92; sfr16 TNR3 = 0x94; sfr16 ADC0 = 0xbd; sfr16 ADC0GT = 0xc4; sfr16 ADC0LT = 0xc6; sfr16 RCAP2 = 0xca; sfr16 T2 = 0xcc;
sfr16 RCAP4 = 0xe4;
图 7
sfr16 T4 = 0xf4; sfr16 DAC0 = 0xd2; sfr16 DAC1 = 0xd5;
#define BAUDRATE 9600 #define SYSCLK 24500000 #define SAMPLE_RATE 50000 #define INT_DEC 256 /**********/ /*函数声明*/ /***********/
void PORTb_Init (void); void UART0_Init (void); void ADC0_Init (void);
void Timer3_Init (int count); void ADC0_ISR (void);
void Write_CHAR(unsigned char yjchar); void Write_COM(unsigned char yjcom); void LCD_Init(void); void LCD_WR(void) unsigned long vol; int k;
unsigned long result;
unsigned char NCDdata[10]={0x30};
unsigned char xdata tab2[10]=[0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; /**********/ /*主函数*/ /**********/ void main (void) {
unsigned int i;
unsigned int m1,m2,m3,m4; unsigned char aa,bb,cc,dd; PCA0MD &= ~0x40; OSCICN |= 0x30; PORTb_Iint (); UART0_Init ();
Timer3_Init (SYSCLK/SAMPLE_RATE); ADC0_Init (); AD0EN = 1; EA = 1; vol = result;
vol = vol*3300/10; vol =vol/1024; LCD_WR()
}
/***********/
/*PORTb初始化程序*/ /***********/
void PORTb_Init (viod) {
XBR0 |= 0x01; XBR1 |= 0x40; P1MDIN|=0X02; P1SKIP |= 0x02; P0MDOUT|= 0X10; }
/***********/
/*UART0初始化程序*/ /***********/
void UART0_Init (void) {
SCON0 = 0x10; TMOD = 0x20; TH1 = 0x96; TR1 = 1; PCON |= 0x80; TI = 1; }
/************/
/*ADC0初始化程序*/ /************/
void ADC0_Init (void) {
ADC0CN = 0xc5; REF0CN = 0x0e; AMX0P=0X09; AMX0N=0X11; ADC0CF = 0x38; EIE1 |= 0x08; }
/***********/
/*定时器T3初始化程序*/ /************/
void Timer3_Init (int counts) {
CKCON=0x80; TMR3RL = -counts; TMR3 = 0xffff;
EIE1 &= ~0x80; TMR3CN |= 0x40; }
/************/
/*ADC中断处理程序*/ /************/
void ADC0_ISR (void) interrupt 10 {
static unsigned int_dec=INT_DEC; static unsigned long accumulator=0L; ADC0CN &= ~0x20; accumulator=accumulator +ADC0; int_dec--; if (int_dec == 0) { int_dec = INT_DEC; result = accumulator>>8; accumulator = 0L; } }
5 小结
以单片机为核心的智能电压表功能强大,除可以和PC 机通信外.还可以增加参数设置,超限报警等功能,工作可靠,性能稳定,有传统电压表无法比拟的优势,必将逐渐取代传统电压表。
参考文献:
[1] 何立民. MCS-51单片机应用系统设计. 北京:北京航空航天大学出版社, 1993 [2] 李广弟. 单片机基础. 北京:北京航空航天大学出版社, 2001
[3] 张毅刚. MCS-51单片机应用设计. 哈尔滨:哈尔滨工业大学出版社, 1990 [4] 房小翠. 单片机使用系统设计技术. 北京:国防工业出版社, 1999 [5] 胡汉才. 单片机原理及其接口技术. 北京:清华大学出版社, 1996
答辩记录及评分表