历史上的今天
今天是:2025年08月09日(星期六)
2021年08月09日 | 二自由度自动进样器(Version1.0)
2021-08-09 来源:eefocus
#include char tcount = 0; char step = 0;//记录主电机走过的步数(走过的步数=step/2) char buf[30];//存放命令 int en = 0;//en = 1 -> 系统工作, en = 0 -> 系统停止 int k = 0; int len = 0; int re = 0;//复位信号, 1 -> 复位, 0 -> 不复位 int direction = 0;//0 -> 顺时针, 1 -> 逆时针 int step_B = 0;//命令要求主电机转的步数 int motorRun = 0;// 1 -> 按命令转相应步数, 0 -> 无动作 void delay() { int i,j; for(i = 0; i < 40; i++) for(j = 0; j < 40 ; j++) { ;//为针臂步进电机提供时延 } } void delay2()//针臂在底部停留时延 { int i,j; for(i=0;i<800;i++) for(j=0;j<800;j++) { ; } } void motor_Control(int steps)//控制主转盘电机转动指定步数 { int i; for(i = 0; i < steps; i++) { P20 = 0; delay(); P20 = 1; delay(); } } void timer0() interrupt 1 { int i = 0; if(step == 0) { if(direction == 0) { P21 = 0;//顺时针 } else if(direction == 1) { P21 = 1;//逆时针 } } TR0 = 0;//关闭定时器0 TH0 = 0x3c; TL0 = 0xB0;//50ms if(re == 1)//复位信号起作用 { re = 0; //针臂移至上限位, 转盘转回0号瓶 P03 = 0;//往上转 while(P01 == 1)//若未到上限位置,P0.1接单片机P01 { P22 = 0; delay(); P22 = 1; delay(); } while(P00 == 1)//若未到0号瓶位置 { P20 = 0; delay(); P20 = 1; delay(); } //霍尔传感器有误差, 还差2.5格左右, 再发20个脉冲 if(P21 == 1)//转盘逆时针转过来 { while(i++ < 20) { P20 = 0; delay(); P20 = 1; delay(); } } else if(P21 == 0)//转盘顺时针转过来 { while(i++ < 22) { P20 = 0; delay(); P20 = 1; delay(); } } tcount = 0; en = 0; step = 0; goto END; } if(motorRun == 1)//电机按要求转命令起作用 { motorRun = 0; step = 0; tcount = 0; en = 0; motor_Control(step_B); step_B = 0; goto END; } tcount++; if(tcount == 2)//100ms = 0.1s { P20 = ~P20;//P20翻转,相当于发送脉冲 tcount = 0; step ++; if(step / 2 == 8)//电机走了8步(经历了8次高低电平的转换) { step = 0;//将步数归零 //P1.3=1代表向下,P1.3=0代表向上 P03 = 1;//往下转,P13接单片机P03 while(P02 == 1)//若未到下限位置,P0.2接单片机P02 { P22 = 0; delay(); P22 = 1; delay(); } delay2();//针臂在底部停留片刻 P03 = 0;//往上转 while(P01 == 1)//若未到上限位置,P0.1接单片机P01 { P22 = 0; delay(); P22 = 1; delay(); } } }//1000ms = 1s 发送一个完整的脉冲 END: ; TR0 = 1;//开启定时器0 } void UART_INT() interrupt 4//串行通信中断处理程序 { int len = 0; int j = 0; if(RI == 1)//如果收到数据 { if(k == 30) { k = 0;//防止越界访问 } RI = 0; buf[k++] = SBUF;//将数据接收下来 if(buf[k - 1] == 'E')//到达结尾 { len = k - 1;//记录数据长度 k = 0; if(len == 6) { if(buf[0] == 'S' && buf[1] == 't' && buf[2] == 'a' && buf[3] == 'r' && buf[4] == 't' && buf[5] == '.') { //Start命令(开机) en = 1; P27 = 0;//D8亮 P26 = 1; P25 = 1; P24 = 1; //再将en的值传回去 SBUF = en + 48; } else if(buf[0] == 'R' && buf[1] == 'e' && buf[2] == 's' && buf[3] == 'e' && buf[4] == 't' && buf[5] == '.')//主转盘回到原始位置,针臂抬到最高位置 { //Reset命令(复位命令) en = 1; P27 = 1; P26 = 0;//D7亮 P25 = 1; P24 = 1; SBUF = en + 48; re = 1;//复位信号 } } else if(len == 5)//停机命令 { if(buf[0] == 'S' && buf[1] == 't' && buf[2] == 'o' && buf[3] == 'p' && buf[4] == '.') { //Stop命令(停机命令) en = 0; P27 = 1; P26 = 1; P25 = 0;//D6亮 P24 = 1; SBUF = en + 48; } } else if(len == 19)//要求主转盘转动相应格数(>=10) { if(buf[0] == 'M' && buf[1] == 'a' && buf[2] == 'i' && buf[3] == 'n' && buf[4] == ' ' && buf[5] == 'm' && buf[6] == 'o' && buf[7] == 't' && buf[8] == 'o' && buf[9] == 'r' && buf[10] == ' ' && buf[11] == 'r' && buf[12] == 'u' && buf[13] == 'n' && buf[14] == 's' && buf[15] == ' ' && buf[18] == '.') { //Main motor runs命令,比如Main motor runs 22. if(buf[16] >= '1' && buf[16] <= '9' && buf[17] >= '1' && buf[17] <= '9')//确定发来的步数是数字 { en = 1; P27 = 1; P26 = 1; P25 = 1; P24 = 0;//D5亮 SBUF = en + 48; step_B = 8 * (((buf[16] - 48) * 10 + (buf[17] - 48))); motorRun = 1; } } } else if(len == 18)//要求主转盘转动相应格数(<=9) { if(buf[0] == 'M' && buf[1] == 'a' && buf[2] == 'i' && buf[3] == 'n' && buf[4] == ' ' && buf[5] == 'm' && buf[6] == 'o' && buf[7] == 't' && buf[8] == 'o' && buf[9] == 'r' && buf[10] == ' ' && buf[11] == 'r' && buf[12] == 'u' && buf[13] == 'n' && buf[14] == 's' && buf[15] == ' ' && buf[17] == '.') { //Main motor runs命令,比如Main motor runs 22. if(buf[16] >= '1' && buf[16] <= '9')//确定发来的步数是数字 { en = 1; P27 = 1; P26 = 1; P25 = 1; P24 = 0;//D5亮 SBUF = en + 48; step_B = 8 * (buf[16] - 48); motorRun = 1; } } } else if(len == 9)//要求主转盘转动的方向 { //Rotate 0/Rotate 1命令 if(buf[0] == 'R' && buf[1] == 'o' && buf[2] == 't' && buf[3] == 'a' && buf[4] == 't' && buf[5] == 'e' && buf[6] == ' ' && buf[8] == '.')
史海拾趣
|
时值年终,安防行业各路精英的脚步却丝毫没有停歇,“平安城市”、“08奥运”“世博会”,这几块“安防蛋糕”令他们一路高歌猛进,似乎都决心在这场没有硝烟的战场上一争高低。新产品的不断推出令安防市场呈现出一派繁华景象,而视频监控作为安防行 ...… 查看全部问答> |
|
自动化与驱动领域著名跨国品牌欧姆龙宣布,在推出SYSMAC CP1L系列多功能一体型小型PLC的同时,全新发布了新一代革命性视觉产品――智能视觉传感器ZFX-C。 这款智能视觉传感器保持了“Smart Recipe”智能化视觉理念,仅需“选择最优画面”→“目标 ...… 查看全部问答> |
|
text3.axf: Error: L6218E: Undefined symbol TargetInit (referred from led.o). 今天把ucosii 移植到LPC2142芯片上 编译时可以通过 可是连接时出现了 以上错误 知道的友友帮个忙解决下 先谢过… 查看全部问答> |
|
我研究了1个上午,发觉我的wince5只能把文件关联到\\windows\\目录下的程序,其他任何目录下的程序,都关联失败哦 谁知道这是怎么回事?如何解决呢?… 查看全部问答> |
|
freescale推出了不少电源管理芯片,都是很强大的,有专门针对它的i.mx应用处理器的,也有针对intel atom处理器的。这些电源管理芯片绝非一般意义上TI,NS的电源管理芯片,他们几乎就是个小soc,电源的多路输出,比如dc-dc,ldo,还可以控制每路输出的 ...… 查看全部问答> |
|
有没有对于spi熟悉的大侠们,有几个问题要请教。标题要要彪悍…………………… 1.我对于spi接口内部的寄存器分布比较模糊,比如数据手册上说一共5个寄存器,SPICR1 SPICR2 SPISR SPIBR SPIDR。但是讲主从通信的时候又提到了移位寄存器shift register 和 各种 buffer ...… 查看全部问答> |
|
光伏发电系统的能量输出因周围环境的变化而表现出较大的差异,对光伏发电系统进行实时监测,可以获得原始测量数据,为系统的改进与优化以及以后的科学研究提供有用数据,对系统环境参数及其系统本身的电气性能进行监测和分析是 ...… 查看全部问答> |




