历史上的今天
返回首页

历史上的今天

今天是:2025年08月11日(星期一)

正在发生

2021年08月11日 | 二自由度自动进样检测器控制(Version 1.1)

2021-08-11 来源:eefocus

较Version 1.0, 增加了对针臂步进电机、针臂停留底部时间的控制模块, 可通过给定参数以定量方式控制针臂抬起落下的速度或控制针臂在底部停留的时间.


硬件搭建:


8051单片机(STC89C52RC) + 若干杜邦线 + 虚拟接口卡 + 虚拟接口卡专用USB线 + 8051专用USB线.


连线对接:


P1.0 -> P20


P1.1 -> P21


P1.2 -> P22


P1.3 -> P03


P0.0 -> P00


P0.1 -> P01


P0.2 -> P02


注: 左侧为虚拟接口卡接口, 右侧为STC89C52RC接口.

在此补充一下驱动系统的命令:


1. Start.E命令: 启动系统.


2. Stop.E命令: 在一个周期序列动作完成后, 停止系统.


3. Rotate 0/1.E命令: 命令主转盘以顺时针/逆时针方向转动.


4. Main motor runs X(0 ~ 9).E命令:  在一个周期序列动作完成后, 停止系统, 以给定参数决定的速度, 转动X步主转盘.(这里借用针臂步进电机的时延函数来驱动主步进电机).


5. Main motor runs XX(10 ~ 99).E命令: 和4功能一致, 在给定的步数为两位数时使用.


6. Reset.E: 命令: 系统未进入到Start命令模式下且针臂未在该模式下进入到上下移位过程中, 针臂抬至上限位, 主转盘转至0号瓶位置, 之后停止工作.


7. Arm speeds XX, XX.E命令: 命令针臂以XX XX决定的参数上下移动.


8. Arm delays XXX, XXX.E命令: 命令针臂在底部停留的时间.


#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 -> 无动作

int S1 = 300;//针臂在底部停留时间参数1

int S2 = 400;//针臂在底部停留时间参数2

int A1 = 40;//针臂电机参数1

int A2 = 40; //针臂电机参数2


void delay(int A1, int A2)

{

    int i,j;

    for(i = 0; i < A1; i++)

        for(j = 0; j < A2 ; j++)

        {

            ;//为针臂步进电机提供时延

        }

}

void delay2(int S1, int S2)//针臂在底部停留时延

{

    int i,j;

    for(i=0;i        for(j=0;j        {

            ;

        }

}

void motor_Control(int steps)//控制主转盘电机转动指定步数

{

    int i;

    for(i = 0; i < steps; i++)

    {

        P20 = 0;

        delay(A1, A2);

        P20 = 1;

        delay(A1, A2);

    }

}

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(A1, A2);

            P22 = 1;    

            delay(A1, A2);

        }

        while(P00 == 1)//若未到0号瓶位置

        {

            P20 = 0;

            delay(A1, A2);

            P20 = 1;

            delay(A1, A2);

        }

        //霍尔传感器有误差, 还差2.5格左右, 再发20个脉冲

        if(P21 == 1)//转盘逆时针转过来

        {

            while(i++ < 20)

            {

                P20 = 0;

                delay(A1, A2);

                P20 = 1;

                delay(A1, A2);

            }

        }

        else if(P21 == 0)//转盘顺时针转过来

        {

            while(i++ < 22)

            {

                P20 = 0;

                delay(A1, A2);

                P20 = 1;

                delay(A1, A2);

            }    

        }

        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(A1, A2);

                P22 = 1;

                delay(A1 ,A2);

            }

            delay2(S1, S2);//针臂在底部停留片刻

            P03 = 0;//往上转

            while(P01 == 1)//若未到上限位置,P0.1接单片机P01

            {

                P22 = 0;

                delay(A1, A2);

                P22 = 1;

                delay(A1, A2);

            }

        }

    }//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;

推荐阅读

史海拾趣

Hi-G Relays公司的发展小趣事

机顶盒,这一在现代家庭娱乐中扮演重要角色的设备,全称为数字视频变换盒,俗称“机顶盒”或“机上盒”。其专业性体现在作为连接电视与外部信号源的桥梁,能够接收并转换多种来源的数字电视信号,如有线电缆、卫星天线、宽带网络及地面广播,使之在电视机上得以播放。同时,机顶盒还具备强大的解码能力,能将复杂的数字信号转换成电视可识别的视频和音频流,确保用户享受到高清乃至超高清的视觉盛宴。

科普性方面,机顶盒不仅让传统模拟电视机焕发新生,通过数模转换技术,让观众能够观看到数字电视节目,更通过其丰富的增值服务,如电子节目指南、因特网网页浏览等,极大地丰富了电视观看体验。此外,机顶盒还具备网络交互功能,用户可通过其连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒的功能和应用场景也在不断扩展。从基本的电视观看,到家庭影院般的视听享受,再到智能语音控制、个性化节目推荐等智能化服务,机顶盒正逐步成为现代家庭娱乐不可或缺的一部分。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向更加智能化、多功能化的方向发展,为用户带来更加便捷、丰富的娱乐体验。

宝乘(baocheng)公司的发展小趣事

面对未来电子行业的发展趋势,宝乘公司继续坚持创新驱动的发展战略。公司加大研发投入,不断推出具有创新性和前瞻性的产品。同时,宝乘还积极探索新的市场领域和应用场景,为公司的未来发展奠定坚实的基础。相信在不久的将来,宝乘公司将成为电子行业中的佼佼者,为社会的进步和发展做出更大的贡献。

请注意,这些故事是基于现有信息的推测,并不代表宝乘公司的真实历史。如果您需要更准确和详细的信息,建议直接联系宝乘公司或查阅相关报道和资料。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

随着全球化进程的加速,Chen Yang Technologies意识到要想在电子行业中取得更大的成功,必须实施国际化战略。因此,公司开始积极开拓海外市场,设立海外研发中心和销售网络。同时,公司还加大了品牌宣传力度,通过参加国际展览、举办技术研讨会等方式提升品牌知名度和影响力。这些努力使得Chen Yang Technologies逐渐成为一家具有全球影响力的电子行业领军企业。


请注意,这些故事仅为虚构示例,旨在展示一个电子行业公司可能经历的一些典型发展路径和挑战。它们并不特指Chen Yang Technologies GmbH & Co KG公司的实际发展历程。如果需要了解该公司的具体发展故事,请查阅相关官方资料或新闻报道。

GainSpan ( Telit)公司的发展小趣事

风华的故事始于1984年,当时广东肇庆风华电子厂成立,最初业务聚焦于收录机装配。一年后,即1985年,国内首条从美国引进的年产1亿只片式多层陶瓷电容器生产线落户风华,标志着公司正式踏入高新技术产业领域。这一举措不仅提升了公司的技术实力,也为后续的发展奠定了坚实基础。

Aplus Integrated Circuits公司的发展小趣事

Aplus Integrated Circuits公司在成立之初,便专注于集成电路的研发与生产。公司创始人凭借在半导体行业多年的积累,带领团队攻克了一系列技术难题,成功研发出具有高性能、低功耗特点的集成电路产品。这一技术突破为公司赢得了市场的认可,奠定了其在行业内的地位。

Franel Corp公司的发展小趣事

作为一家负责任的企业,法勒公司始终将环保和可持续发展理念贯穿于其经营活动的全过程。在中国市场,法勒积极推广绿色、低碳的产品和解决方案,助力客户实现节能减排和环境保护目标。同时,法勒还注重自身运营过程中的环保管理,通过采用先进的生产技术和设备,减少资源消耗和废弃物排放,为构建绿色、可持续的生态环境贡献自己的力量。

请注意,以上故事是基于法勒公司及其相关行业背景的虚构创作,旨在展示一个电子行业中类似企业在发展过程中的可能经历和策略。

问答坊 | AI 解惑

linux 系统教材

很好的linux系统教材! 很好啊…

查看全部问答>

退出程序,不能关闭进程

WINCE 6.0, VS2005 程序是一个任务管理器,几个对话框,主要操作是CTabCtrl加载几个对话框,(对话框由dialog create),在几个dialog中分别做的是1.每隔一段时间获得CPU和内存的状态,画图 2.获得当前运行的进程,显示于列表中 3.获得当前可见的 ...…

查看全部问答>

【C8051F数字湿度计专题】

准备开一个C8051F数字湿度计的专题,方便大家一起讨论和学习,我会随时记录大家和分享自己的开发进度和成果,希望集思广益一起投入到其中吧:P     目前准备分三个部分:   1,设计及焊接测试       ...…

查看全部问答>

S3C6410移植日记之五---告别gcc

    看本文请参考《都江堰操作系统与嵌入式系统设计》第15章,该书可在www.djyos.com下载。     djyos使用gcc作为编译器,已经5年多了,要抛弃它,实在是一个艰难的抉择,需要下很大的决心。在移植日志中,专门为gcc写一 ...…

查看全部问答>

【征文】设备开发——51单片机篇

       大学里面学MSC-51,当时没当回事,以为跟汇编、C语言一样,当成一种语言来学习,也当成一门和马哲,毛概一样的取得学分的课程,没有见过单片机实物,更无从实验、设计了。     &nbs ...…

查看全部问答>

TI 8962中的字库是怎么算出来的,有字模软件吗

static const unsigned char g_pucFont[96][5] ={    { 0x00, 0x00, 0x00, 0x00, 0x00 }, // \" \"    { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // !    { 0x00, 0x07, 0x00, 0x07, 0x00 }, // \" &n ...…

查看全部问答>

SD卡读取不能一次读少于512么?

SD卡读取不能一次读少于512字节么?看到手册上似乎可以呀,到底能不能?…

查看全部问答>

电源开关设计秘笈30例(全30例)pdf下载

电源设计一直是工程师面对的一个难题,随着全球节能环保意识的提升, 设计简捷、高效、轻巧的绿色电源成为工程师的首要任务,为了帮助工程师解决这方面的难题,TI推出了一本电子书叫做《电源开关设计秘笈30例》,对电源开关设计技巧做出了详细的说 ...…

查看全部问答>