|
以下是转贴内容:
由于时常接到用户要求开发单片机控制项目,为了简化工作,专门设计了一款基于AVR单片机的控制系统。
为了提高通用性,设计思想是模拟PLC,采用光藕隔离输入,继电器晶体管混合输出,适用大部分工业控制场合:
设计规范:
电源:适合工业标准的24V直流输入,带反接保护
8路输入:其中2路可以中断,2路可以使用模拟量
8路输出:4路大电流晶体管,其中一路可以PWM,另4路继电器输出,可以直接带市电负载
通信:RS485
为了简化使用时的开发工作,输入输出的功能预先写好子程序,使得使用变得简单快捷
使用实例:交通信号灯演示程序。
以下是完整的主程序文件,主c语言程序不要包含main(), 并且要使用大写BEGIN()函数,看头文件就明白了。
#include "EC0608RT.H"
void BEGIN(void)
{
if(LD_B(MW32, BIT6))OUT_Y6;
if(LD_B(MW32, BIT7))OUT_Y7;
STL
tmr1S[1] = 15;
SET_STEP = 1;
S1
// 方向1绿灯状态
SET_Y0;
RST_Y2;
RST_Y4;
SET_Y5;
if(tmr1S[1] == 0){tmr1S[1] = 5; SET_STEP = 2;}
S2
if(timer_c2 >= 50)OUT_Y0;
if(tmr1S[1] == 0){tmr1S[1] = 2; SET_STEP = 3;}
S3
RST_Y0;
SET_Y1;
if(tmr1S[1] == 0){tmr1S[1] = 15; SET_STEP = 4;}
S4
// 方向2绿灯状态
RST_Y1;
SET_Y2;
SET_Y3;
RST_Y5;
if(tmr1S[1] == 0){tmr1S[1] = 5; SET_STEP = 5;}
S5
if(timer_c2 >= 50)OUT_Y3;
if(tmr1S[1] == 0){tmr1S[1] = 2; SET_STEP = 6;}
S6
RST_Y3;
SET_Y4;
if(tmr1S[1] == 0){tmr1S[1] = 15; SET_STEP = 1;}
SEND
MB[0] = PORTB;
MB[1] = PORTD;
MB[2] = tmr1S[1];
MW[3] = Cn[7];
MW[4] = Cn[6];
MW[5] = MADC[1];
return;
}
PCB成品图 (原文件名:2008710651226955.jpg)
原理图 (原文件名:20087106425256898.jpg)
完整工程文件,注意EC0608RT.h,好东西都在里面ourdev_348285.zip(文件大小:50K) (原文件名:一种基于AVR的控制系统.zip)
原理图PDF文件ourdev_348286.pdf(文件大小:35K) (原文件名:ec0808sch.pdf) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|