用单片机控制步进电机还有气缸的工作,是如何实现的!
1.做一个治具,连续测试六个产品,治具上要有能显示正在测试产品的LED指示灯,
2.面板上要有急停、测试、三档选择开关
3.每支产品测试时间为10S(时间可调范围为10~30S),前个产品测试完后自动跳开且下一个产品开始测试到六个产品测试完成为止
4,操作简单可靠,治具提供一个两芯线的快速插头以提供脉冲电压测试仪链接及备用两芯片线快速插座一个
5.测试工装需能检测产品放入是否接触良好,
6工装维修简单
7 操作安全
我想用一个单片机控制气缸的上下移动,然后再控制步进电机的左右移动实现检测任务。大家帮忙想想办法啊,谢谢了!以后我技术好了也会帮助大家想办法的!
有根据详细的文件吗,看得有点闷,只知道是单片机空间步进电机、、、、最好是给几个图。。。。。
现在还没图啊,我是刚进这家公司的,并且才接触这个,只有点基础!就是要用单片机控制步进电机的左右移动以达到气缸的测试杆的左右移动,然后控制气缸的上下移动以达到测试杆的上下移动!!!
步进电机基本就是开环了吧,呵呵,应该不太复杂~~
有些要跟结构工程师讨论,因为你的控制跟机械结构还是有挺大关系的吧
现在的难点是:如何让电机下降之后,在上升的过程到位的时候,又让它自动的右移,并且右移的距离都要精准的控制,因为测试物是固定了的而且只有一个很小的孔!我的想法是在气缸上升到位的地方加个接近开关呢还是写程序可以控制。
回复 5楼 cat3902982 的帖子
赞同 感觉还是plc的 东西 用那个编程吧
大学的时候好像接触的就是行动 延时 检测的东西
现在我PLC还不会啊 而且单片机都不熟悉!所以觉得很难啊
办法都是靠大家想出来的啊 谢谢各位了 有没有有点这方面经验的来指导一下呀
回复 9楼 ly471089608 的帖子
我现在就在整 公司给的任务呢 你多问问吧 我这12c5a60s2
你的具体问题我没分析
PLC我也只是大学弄过
那个东西貌似控制你这个正好
慢慢来 多想想 别着急
精确控制用步进电机,粗略定位可以用行程开关或红外检测,单片机用在工控中连接外围要做好电气隔离
最好自己先弄个小程序出来
或者有点思路 写出来 用程序表现下 这样大家好帮你
我这双串口 还在困扰我呢.................爱莫能助了
回复 13楼 51学习者 的帖子
好的 我先先弄个程序思路出来 大家帮我想、分析分析哈
#include
#define uchar unsigned char
#define uint unsigned int
uchar idata zz[]={oxf1,oxf3,oxf2,oxf6,oxf4,oxfc,oxf8,oxf9};电机正转
uchar idata zz[]={oxf1,oxf9,oxf8,oxfc,oxf4,oxf6,oxf2,oxf3};电机反转
sbit zhengzhuan=p1^0;按下时正转
sbit fanzhuan=p1^1;按下时反转
sbit jiansu=p1^2;按下时减速
sbit jiasu=p1^3;按下时加速
sbit jiting=p3^0;
int count;
int derection ;
int speed;
void init(viod) 定时
{
count=0; 定时函数
TOMD=OX01;
TH0=(65536-speed)/256;
TL0=(65536-speed)%256;
EA=1;
ET0=1
}
void delay0(viod) interrupt 1 using1
{
TH0=(65536-speed)/256;
TL0=(65536-speed)%256;
p2=direction;
count++;
if(count==6);
count=0;
}
void delay(uint aa) 延::
{
uint i;
while(--aa)
{
for(i=0;i<250;i++);
}
}
}
}
void main (void)
{
int cnt;
cnt=0;
speed=40000;
fanzhuan=1;
zhengzhuan=1;
jiansu=1;
jiasu=1
jiting=1
p2=0;初始化继电器的控制端口
init();
while(p2=1) 循环控制 循环控制这一块我不知道怎么写好 你们可以帮我写下吗
{
count++;
delay(20)
TR0=1;
daley(20)
}
while(p2=0)
if(zhengzhuan==0);
{
while(zhengzhuan==0)
cnt++;
}
if(cnt==1)
delay(10);
direction=zz[count];
}
}
}
if(jiasu==0) 加速控制
{
while(jiaau==0)
speed=speed+1000;
if(speed==65000)
break;
}
if(jiansu==0) 减速控制
{
while(jiansu==0)
{speed=speed-1000;
if(speed==0)
break;
}
}
}
上面要循环六次啊 我就不知道怎么写好了, 因为先要控制气缸下降, 再启动中断, 气缸再上升, 上升后电机自动正转 , 到一个定点位置 就是第二只产品的测试点,再控制气缸下降 这样控制六次!并且人只按下启动按钮后六只产品机器一次性要测试完
回复 11楼 51学习者 的帖子
帮我分析下这个程序嘛 循环部分该怎么写呢
for(i=0;i<250;i++);
}
}
}
}
void main (void)
这个位置是不是 多 了2个 } }
有点乱 没看懂 不用 那多的 if 和 while吧
回复 19楼 51学习者 的帖子
应该是{}打多了 帮我想看看循环部分该怎么写哈 有点急 而且是第一次做这个 才毕业的新手啊 如果做不出来就要被炒了