您好,欢迎来到99网。
搜索
您的当前位置:首页三花电子膨胀阀C51程序(适用于O型和T型)

三花电子膨胀阀C51程序(适用于O型和T型)

来源:99网


三花电子膨胀阀C51程序(适用于O型和T型)

程序说明

励磁时序:

励磁状态(关阀)励磁状态(开阀)123456781234567811000001100000110111000000001110000111000011100011111100000000000x010x030x020x060x040x0C0x080x090x090x080x0C0x040x060x020x030x01AADDDCCCFFFAFAFCFCDCDADA接电源线线圈数据线Ø1Ø2Ø3Ø4颜色接线P0.0P0.1P0.2P0.3A橙D红C黄F黑对应的十六进制导通的线圈Ø5B蓝 1变量值:

count_max为计数脉冲最大值,调零初始设定560,运行时设定为508,多加8个脉冲的闭阀动作。

ADD_DEC_flag:1正转,0反转

stopADD_flag为脉冲停止增加标志位,表示计数达到508时不再继续增加

stopDEC_flag为脉冲停止减少标志位,表示计数达到0时不再继续减小

count_num为电子膨胀阀发送的脉冲计数,定义int型,char最大 255

count8为电子膨胀阀每组数据发送序号

count5为电子膨胀阀每组数据发送开度1°计数,1°为5个脉冲

定义speed_time=20,控制膨胀阀的励磁速度,要求30-90pps,取50pps,则一个脉冲需要20ms

2程序的编写:

1.起点调整方法:

(1)将阀全闭并调整起点至A相励磁;

P0=0xf0;

P0=vavle_excitation[count8];//调整至A相

(2)切断电源时:通电后,施加560脉冲来进行闭阀动作; count_max=560

(3)控制时:现有开度+8脉冲的闭阀动作。count_max=508

2.停止驱动:在停止的励磁相上再施加励磁0.5sec以上后,停止驱动;

3.开始驱动:施加0.5sec以上的励磁于前回停止运转的励磁相上后,使其开始运转;

4. 倒转驱动方向:在倒转前的励磁相上再施加0.5sec以上的励磁,然后进行倒转驱

动;

5.开阀激励步骤表1从步骤1到8。

6.关阀激励步骤表1从步骤8 到1。

7.步进电机带有永磁铁具有自保持能力,保持开阀不需要通电。

头文件vavle.h

#ifndef __VAVLE_H__

#define __VAVLE_H__

#include \"stc15f2k60s2.h\" // 单片机STC15F2K60S2头文件,可以不再加入reg51.h

#include \"common.h\" // 定义头文件

#include \"delay.h\" // 延时函数头文件

/******************************T系列电磁阀*****************************

#define speed_time 20 //膨胀阀的励磁速度,要求30-90pps,取50pps,则一个脉冲需要20ms

#define Pulse_max 500 //全开脉冲

#define FirstClosePluse_max 560 //关阀时最大脉冲,在500基础上要多关60

#define ClosePluse_max 508 //关阀时最大脉冲,在500基础上要多关8

*/

/******************************O系列电磁阀*****************************

#define speed_time 10 //膨胀阀的励磁速度,要求100-250pps,取100pps,则一个脉冲需要10ms

#define Pulse_max 2000 //全开脉冲

#define FirstClosePluse_max 2200 //关阀时最大脉冲,在2000基础上要多关30

#define ClosePluse_max 2030 //关阀时最大脉冲,在2000基础上要多关30

*/

extern unsigned char speed_time; //膨胀阀的励磁速度,要求30-90pps,取50pps,则一个脉冲需要20ms

//extern int Pulse_max; //全开脉冲

extern int OpenPluse_max; //关阀时最大脉冲,在500基础上要多关60

extern int ClosePluse_max; //关阀时最大脉冲,在500基础上要多关8

extern int ClosePluse;//全闭脉冲-500或-2000

extern int OpenPluse;//全开脉冲500或2000

//extern int Pulse_Init;

//int Pulse_max; //全开脉冲

//int OpenPluse_max; //关阀时最大脉冲,在500基础上要多关60

//int ClosePluse_max; //关阀时最大脉冲,在500基础上要多关8

//int Pulse_Init; //初始化时的脉冲开度

extern unsigned char code vavle_excitation[]; 正转

//ABCD四相对应的I/O口数据,

//接线:A-P0.0,D-P0.1,C-P0.2,F-P0.3

/*定义变量*/

extern int count_num; //电子膨胀阀初始化计数

//extern unsigned int count_max;//电子膨胀阀初始化时为560,初始化完赋值508

extern unsigned char count8; //电子膨胀阀每组数据发送计数

extern unsigned char count5; //电子膨胀阀每组数据发送开度1°计数

extern unsigned char count8_temp; //8拍计数缓

extern unsigned char vavle_flag; //发送数据标志位

extern unsigned int opening_deg; //开度

extern unsigned char ADD_DEC_flag; //1正转,0反转

extern unsigned char button_flag; //按钮标志位

extern unsigned char stopADD_flag;//计数达到500时不再继续增加

extern unsigned char stopDEC_flag;

/*声明函数*/

//void vavle_Init(void);

void step_close(void); //关阀,n为正转圈数

void step_open(void); //开阀,n为反转圈数

void calc_opening_deg(void);//计算并显示开度

#endif

子程序Vavle_Control.c

/************************************************************************************

Copyright, ThunderDays

程序名称: (晶振频率12MHz)

功能说明: 可正常点动加减开度

程序版本:1.0 (2017/07)

************************************************************************************/

#include \"vavle.h\" // 电子膨胀阀头文件

#include

//unsigned char code

vavle_excitation[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; 的I/O口数据,正转

//ABCD四相对应

unsigned char code

vavle_excitation[]={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09}; 的I/O口数据,正转

//ABCD四相对应

//接线:A-P0.0,D-P0.1,C-P0.2,F-P0.3

int count_num=0; //电子膨胀阀脉冲计数,定义int型,char最大 255

unsigned int count_max;//电子膨胀阀初始化时为FirstClosePluse_max,正常闭阀时为ClosePluse_max

unsigned char count8=0; //电子膨胀阀每组数据发送计数

unsigned char count5=0; //电子膨胀阀每组数据发送开度1°计数

unsigned char count8_temp; //8拍计数缓存

unsigned char vavle_flag=0; //发送数据标志位

unsigned int opening_deg=0; //开度

unsigned char ADD_DEC_flag=1; //1正转,0反转

unsigned char button_flag=0; //按钮标志位

unsigned char stopADD_flag=0;//计数达到500时不再继续增加

unsigned char stopDEC_flag=0;

/*电子膨胀阀初始化

void vavle_Init(void) 8个脉冲。

//初始化电磁阀:关阀发560个脉冲,到0脉冲时,再通

{ unsigned int i;

//unsigned int i,N;

ADD_DEC_flag=1; //标志位置1,说明进行关阀操作

//while(count_num<560);

count_max=FirstClosePluse_max;

P0=0xf0;

P0=vavle_excitation[count8];//开始励磁前,在

for(i=0;i{

step_close();

}

P26=1; //蜂鸣器

count8=0; //初始化完调整到A相

stopADD_flag=1;//关阀操作位为1,说明满开度

//count_num=508;

count_max=ClosePluse_max;

LED_CLS_n(2);

for(i=0;i{

step_open();

calc_opening_deg();

}

LED_CLS_n(1);

//TR0 = 0; //定时器0关闭

DelayMS(500);

P0=0x00; //关闭操作

}

*/

/******************************关阀操作,关1个脉冲*****************************/

void step_close(void) //关阀,此程序操作开度1°

{ ADD_DEC_flag=1; //标志位置1,说明进行关阀操作

if(stopADD_flag) //开阀停止标志位为1时,执行此操作。说明开阀已经开到做大开度,关阀时清空此标志位

{stopADD_flag=0;

//count_num=0;

}

if(!stopDEC_flag)

{P0=vavle_excitation[count8++];

P26=0; //蜂鸣器

DelayMS(speed_time); //延时

//stopADD_flag=0;

count_num--;

if(count_num{//count_num=516;

count_num=ClosePluse;

stopDEC_flag=1; //全闭标志位 ,说明膨胀阀已全闭

//break;

}

}

if(count8==8)

count8=0;

//count500_flag=1;

}

/******************************开阀操作,开1个脉冲*****************************/

void step_open(void) //开阀,此程序操作开度1°

{

ADD_DEC_flag=0; //标志位清零,说明进行开阀操作

if(stopDEC_flag) //关阀停止标志位为1时,执行此操作。说明关阀已经关到0°,开阀时清空此标志位

{stopDEC_flag=0; //因关阀时,多加了8个脉冲进行关阀,所以计数值要进行复

位为500,在此基础上进行减数操作

//count_num=Pulse_max;

}

if(!stopADD_flag) //停止开阀标志位

{P0=vavle_excitation[count8--];

P26=0; //蜂鸣器

DelayMS(speed_time); //延时

count_num++;

//stopDEC_flag=0;

if(count_num==OpenPluse_max) //溢出,则赋值为0xffff

{count_num=OpenPluse;

stopADD_flag=1;

}

}

if(count8==255) //溢出,则赋值为7

count8=7;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务