历史上的今天
返回首页

历史上的今天

今天是: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] == '.')

推荐阅读

史海拾趣

宜源科技(ETERNAL)公司的发展小趣事

面对日益严峻的环境问题,宜源科技公司积极响应国家环保政策,致力于绿色环保和可持续发展。公司采用先进的生产工艺和设备,减少生产过程中的污染排放。同时,宜源科技还积极推动绿色产品的研发和推广,为客户提供更加环保、节能的电子产品解决方案。这些努力不仅有助于保护环境,也为公司的可持续发展奠定了基础。

ERA Transformers公司的发展小趣事

在国内市场取得一定成功后,ERA Transformers公司开始将目光投向国际市场。为了打开国际市场,公司积极参加国际电子展会和交流活动,与多家国际知名企业建立了联系。通过深入了解国际市场需求和标准,公司对产品进行了针对性的改进和优化。经过一段时间的努力,ERA Transformers公司的产品成功打入了国际市场,并获得了良好的销售业绩和口碑。

AC Photonics Inc公司的发展小趣事

AC Photonics Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,都严格遵循国际标准和行业规范。同时,公司还注重品牌建设,通过参加行业展会、举办技术研讨会等方式,不断提升品牌知名度和美誉度。这些努力使得AC Photonics Inc的产品在市场上获得了广泛的认可和好评。

Akustica(Bosch)公司的发展小趣事

随着技术的成熟,AC Photonics Inc开始积极拓展市场。公司不仅在国内建立了完善的销售网络,还积极开拓海外市场。同时,AC Photonics Inc还与其他知名电子企业建立了战略合作关系,共同推动光电技术在各个领域的应用。这些合作不仅提升了公司的知名度和影响力,还为公司的长远发展提供了有力支持。

Excel-Display Corporation公司的发展小趣事

随着全球环保意识的提高,EDC也积极响应号召,致力于绿色环保和可持续发展。公司投入大量资金研发节能、环保的显示器产品,并不断优化生产工艺以减少对环境的影响。

同时,EDC还积极参与各种环保公益活动,推动行业的绿色发展。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

Auris公司的发展小趣事

在Auris公司的发展历程中,2017年夏天的一次收购事件具有重要意义。Auris以8000万美元的价格收购了Hansen Medical,这是一家专门开发工具来操控导管的公司。这次收购不仅增强了Auris在手术机器人领域的技术实力,也为其后续的产品研发和市场拓展提供了更多可能性。

问答坊 | AI 解惑

新款球型一体化摄像机市场前景探讨

时值年终,安防行业各路精英的脚步却丝毫没有停歇,“平安城市”、“08奥运”“世博会”,这几块“安防蛋糕”令他们一路高歌猛进,似乎都决心在这场没有硝烟的战场上一争高低。新产品的不断推出令安防市场呈现出一派繁华景象,而视频监控作为安防行 ...…

查看全部问答>

欧姆龙智能视觉传感器ZFX-C闪亮登场

自动化与驱动领域著名跨国品牌欧姆龙宣布,在推出SYSMAC CP1L系列多功能一体型小型PLC的同时,全新发布了新一代革命性视觉产品――智能视觉传感器ZFX-C。 这款智能视觉传感器保持了“Smart Recipe”智能化视觉理念,仅需“选择最优画面”→“目标 ...…

查看全部问答>

无线传感器网络技术

信息的获取是信息技术产业链和应用环节的第一步,没有它就没有信息的传输、处理和应用,就没有信息化。传感器技术是信息获取的最重要、最基本的技术。从目前的进展看,所有现存的事物、状态,过程和演进,都可以用物理量来描述,这个量就含有信息, ...…

查看全部问答>

text3.axf: Error: L6218E: Undefined symbol TargetInit (referred from led.o).

今天把ucosii 移植到LPC2142芯片上 编译时可以通过 可是连接时出现了 以上错误   知道的友友帮个忙解决下 先谢过…

查看全部问答>

wince下文件如何和程序关联?

我研究了1个上午,发觉我的wince5只能把文件关联到\\windows\\目录下的程序,其他任何目录下的程序,都关联失败哦 谁知道这是怎么回事?如何解决呢?…

查看全部问答>

跪求tms320c32指令集

好像tms320c32指令与其他型号的有很大不同,跪求tms320c32指令集,苦苦找了好几天也没找到!谢谢了!…

查看全部问答>

飞思卡尔电源管理芯片

freescale推出了不少电源管理芯片,都是很强大的,有专门针对它的i.mx应用处理器的,也有针对intel atom处理器的。这些电源管理芯片绝非一般意义上TI,NS的电源管理芯片,他们几乎就是个小soc,电源的多路输出,比如dc-dc,ldo,还可以控制每路输出的 ...…

查看全部问答>

有没有对于spi熟悉的大侠们,有几个问题要请教。标题要要彪悍……………………

  1.我对于spi接口内部的寄存器分布比较模糊,比如数据手册上说一共5个寄存器,SPICR1  SPICR2   SPISR   SPIBR  SPIDR。但是讲主从通信的时候又提到了移位寄存器shift register 和 各种 buffer ...…

查看全部问答>

基于Labview的光伏发电数据监测系统设计

    光伏发电系统的能量输出因周围环境的变化而表现出较大的差异,对光伏发电系统进行实时监测,可以获得原始测量数据,为系统的改进与优化以及以后的科学研究提供有用数据,对系统环境参数及其系统本身的电气性能进行监测和分析是 ...…

查看全部问答>

J-link下载程序出错

J-link下载程序时出现如下错误,但只用simulator调试的时候没有出错!!!你们帮我看看哪里有错哦  拜托啦…

查看全部问答>