本帖最后由 csaaa 于 2018-2-8 14:59 编辑
最近一个项目需要驱动很多很多的辊台(动力滚筒),多个辊台之间还有很多生产机械,需要做大量的组态工作,为了使系统模块化,我尝试将不同的生产机器的辊**立开来处理,变成一个个的小系统,系统之间用电平的形式控制交通。这样可能会用到一堆的PLC,我这次尝试使用简单的单片机来解决这个问题,有人说我又回到了故过去,我不这么认为。过去的单片机可不比现在便宜,开发起来也很麻烦,现在的单片机开发环境可是好太多了,挑战主要在于抗干扰的问题,这个问题的本质还是做好隔离的问题。由于我对C语言的熟悉程度远高于那个梯形图,开发一个功能的时间我觉得比PLC还要快。这次以一款用于常见的动力传送滚筒所用的控制器为例介绍一下:
这个动画是这个辊台的运动形式,很简单吧。
设计的电路板PCB:
电路图,所有器件都与外面用光耦隔离,电源用隔离降压24v-5v电源
这个是模块的引脚定义:下面的一排是输入引脚,上面的是输出引脚
应用到电柜中
主程序:
//引脚定义
#define KEEPOUT PA3_OUT
#define Q1 PC6_OUT
#define Q1N PC5_OUT
#define Q2 PC4_OUT
#define Q2N PC3_OUT
#define Q3 PB4_OUT
#define Q3N PB5_OUT
//#define OUT_DET PD6_IN //出检测
//#define IN_OK PD5_IN //进完成
//#define IN_DET PD4_IN //进检测
#define EN PD3_IN //使能
//#define KEEPOUT_IN PD2_IN //前级忙检测
#define MRUN 1//motor run
#define MSTOP 0//motor stop
#define KEEP 1//给上一级低电平
#define NOKEEP 0
#define SW_ON 1//MOS开启导通
#define SW_OFF 0//MOS 截止
#define DEFTimeout 20//默认超时
#define MAXCNT 1
#define MaxAvgCnt 20 //滤波采样数
void restore(void){
KEEPOUT=NOKEEP;
Q1=MSTOP;
Q1N=!Q1;
Q2=MSTOP;
Q2N=!Q2;
Q3=MSTOP;
Q3N=SW_OFF;
}
//辊台A程序
void guntai(void){
if (GET_IN_DET()==0){
IN_DET=0;
}else{
IN_DET=1;
}
if (IN_DET==0){//进入光电有
//进入电机启动
timeout=0; //每次进入或出检测到就清空一次
Q1=MRUN;
}else{//进入光电没有
if (last_in!=IN_DET)prod_count++;
}
last_in=IN_DET;
if(GET_OUT_DET()==0){
OUT_DET=0;
}else{
OUT_DET=1;
}
if(OUT_DET==0){//如果出口?
last_out=OUT_DET;
timeout=0;
if (GET_KEEPOUT_IN()==0){
Q1=MSTOP;
}else{
Q1=MRUN;
}
}else{
if ((last_out!= OUT_DET) && (prod_count > 0)){
prod_count--;
if (prod_count==0)Q1=MSTOP;
}
last_out=OUT_DET;
}
if (prod_count>0){
if(prod_count>=MAXCNT){//如果超过最大数量,直接输出阻止
KEEPOUT=1;
}else { //否则,给后级的信号取决于前级
KEEPOUT=!KEEPOUT_IN;
}
OUT_DET=GET_OUT_DET();
if (OUT_DET>0){//如果前级没有阻止 或者板还没到出口,都持续走
Q1=MRUN;
}else{
if(GET_KEEPOUT_IN()==0){
//Q1=MRUN;
timeout=0;
}else{
Q1=MRUN;
}
}
if(timeout>DEFTimeout){
Q1=MSTOP;
prod_count=0;
}
}else{//没有物品,不阻止
KEEPOUT=NOKEEP;//如果既没有板又没有进入则停止
if(timeout>DEFTimeout/2){
Q1=MSTOP;
prod_count=0;
}
}
}
void main(void)
{
init();
restore();
while(1)
{
if (EN==0)
guntai();
}//end while
}
由于权限问题,无法发视频和链接,有兴趣就看我主页吧
|