电力电子装置电流检测与过流保护系统设计(5)

2018-12-22 21:56

第4章 系统软件设计

#include \extern u8 ADCResult;

void INT0ISR(void) interrupt 0 //外部中断0服务函数 {

ADCResult = ADC0804ReadADResult(); // 取得ADC转换 结果 }

void INT0Initial(void) {

IT0 = 1; //指定外部中断0下降沿触发 EX0 = 1; //使能外部中断 }

4.3.3 初始化MCU程序

根据系统要求,单片机要有外部中断、定时器计数,因此初始化单片机时要初始化外部中断以及定时器来实现上述功能。

初始化MCU程序如下: #include \ void MCUInitial(void) {

GlobalInterruptDisable(); // 禁止全局中断 INT0Initial(); // 初始化外部中断 Timer0Initial(); // 初始化Tmer0

GlobalInterruptEnable(); // 允许全局中断 }

4.3.4 ADC0804启动、读取转换程序

ADC0804的启动:ADC0804中的A/D转换转换器在满足一定条件是开始一个转换过程,这个条件就是:在实现片选WR=0的前提下,引脚上出现一个上升沿。

实现A/D转换的时序如图8,实现WR=0后,使用一个上升沿信号就可以启动转换过程。图中TR2是时间延迟,时间TR3是转换时间。ADC0804转换结果的读取:在A/D转换结束以后,ADC0804的RD引脚将给出一个低脉冲,如果把这个引脚直接连接到单片机的外部中断引脚,这个低脉冲将引起单片机中断,单片机可以在中断处理程序中读取ADC0804的转换结果。

-15-

东北电力大学自动化工程学院学士学位论文

图4.2 ADC0804的时序转换

图4.3 ADC0804转换器的工作时序

ADC0804启动、读取程序如下: #include \ void ADC0804Start(void) {

iADC0804WR = 0;

iADC0804WR = 1; // 上升沿启动ADC0804转换 }

void ADC0804Initial(void) {

iADC0804WR = 1;

-16-

第4章 系统软件设计

iADC0804RD = 1; // 初始状态为WR,RD均为高电平 }

u8 ADC0804ReadADResult(void) {

u8 ADTemp;

iADC0804RD = 0; // 低电平为读数状态 ADTemp = iADC0804DATA; // 读取数据口 iADC0804RD = 1;

return ADTemp; // 返回ADC转换结果 }

4.3.5霍尔传感器ACS712的计算函数程序

查找ACS712数据手册可得到计算函数为如下 #include \

float ACS712ReadCurrent(u8 ADCValue) {

return (float)30*(ADCValue-127) / 101; }[9]

4.3.6七段数码管显示程序

系统选用4个共阴极数码管来分别显示检测电流的十位、个位、小数点后一位、小数点后俩位,再将计算结果转换成BCD码并在数码管中显示出来。

7段数码管显示程序: #include \ u8 DisplayBCD[4];

u8 code SelectTable[]={0x70,0xB0,0xD0,0xE0}; void HEXTOBCD(u16 Hex) {

DisplayBCD[3] = Hex/1000; // 千位 DisplayBCD[2] = Hex00/100; // 百位 DisplayBCD[1] = Hex0/10; // 十位 DisplayBCD[0] = Hex; // 个位

-17-

东北电力大学自动化工程学院学士学位论文

}

void DisplaySevenSegment(u16 DisplayData) {

static u8 Sel; u8 P0Temp;

HEXTOBCD(DisplayData); // 转换成BCD码 P0Temp = P0; P0Temp &= 0xF0;

P0Temp |= DisplayBCD[Sel]; // 要显示的BCD码 P0Temp &= 0x0F;

P0Temp |= SelectTable[Sel]; // 选中一只数码管 P0 = P0Temp;

if (++Sel > 3) // 四个数码管轮流显示 { Sel = 0; } }

4.3.7主程序

主程序用来调用上述子程序,包括初始化单片机、初始化ADC0804等等 #include \ u8 ADCResult; float Current; u16 CurInt;

void PowerOnInitial(void) {

ADC0804Initial(); // 初始化ADC0804 }

void main(void) {

MCUInitial(); // 初始化MCU

PowerOnInitial(); // 初始化上电默认状态 while(1)

-18-

第4章 系统软件设计

{

Current = ACS712ReadCurrent(ADCResult); // 根据ADC的转换结果计算出电流值

CurInt = Current*100; // 电流值*100以便显示 DisplaySevenSegment(CurInt); // 显示电流值 } -19-

}


电力电子装置电流检测与过流保护系统设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:尔雅 社会心理学课后习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: