打印

关于51单片机从串口接收数据控制输出脉冲频率问题

[复制链接]
6158|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happywxg|  楼主 | 2009-4-3 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了一个控制系统,是上位机发一个转速,单片机来控制步进电机转动,单片机只要输出一个频率可变的方波就可以了。是89S52接收到从串口发过来的数据,来控制从单片机输出的一个脉冲的频率,但是串口的波特率是由T1来控制的,输出的脉冲是有T0来控制。
现在的问题是不加串口时,输出脉冲正确;要是加上串口,输出就不对了,脉冲的时间周期变长了。
我觉得应该是T1的定时中断导致T0的延时变长,但是我现在想不出解决办法啊。
谁还有好一点的方案啊??

相关帖子

沙发
5880527| | 2009-4-3 11:04 | 只看该作者

发脉冲的定时器中断级别为最高不就OK了吗

通讯没必要响应那么快,你那个T1也不会影响到T0的

使用特权

评论回复
板凳
工控秀才| | 2009-4-3 11:56 | 只看该作者

用多核的吧

不抢占其他的任务资源.

使用特权

评论回复
地板
5880527| | 2009-4-3 16:15 | 只看该作者

不会吧,步进电机最多就十几二十K的频率

一个最简单的51会让步进电机跑得欢

使用特权

评论回复
5
xwj| | 2009-4-3 16:24 | 只看该作者

呵呵,估计LZ还没有掌握正确的编程方法:-)

使用特权

评论回复
6
happywxg|  楼主 | 2009-4-3 19:17 | 只看该作者

谢谢楼上回答

关键是我上位机发的是转速值,然后下位机根据接收到的转速值算出延长时间,然后输出脉冲,所以输出的脉冲的延时要尽可能的精确。
谁知道好的编程方案啊。。。谢谢了!!!

使用特权

评论回复
7
happywxg|  楼主 | 2009-4-4 10:39 | 只看该作者

回5楼

能不能说一下正确的编程方法啊、、谢谢啊
现在的问题还没解决呢、、

使用特权

评论回复
8
ayb_ice| | 2009-4-4 10:53 | 只看该作者

合理分配中断优先级

将中断程序精简

使用特权

评论回复
9
happywxg|  楼主 | 2009-4-6 09:21 | 只看该作者

回8楼

这个也是一个解决的办法,但是还有没有别的解决方案呢??大家可以讨论一下啊!!!
下午试一下用查询的方式做。
谢谢大家支持!!!

使用特权

评论回复
10
randyliang| | 2009-4-6 16:29 | 只看该作者

提议~

你试试把换算也放在上位机,尽量让单片机少做事,这样的时间才会比较精确~~~

使用特权

评论回复
11
happywxg|  楼主 | 2009-4-6 17:07 | 只看该作者

可能是我没把问题说明白

就是我用T1做为串口的波特率发生器。在初始化后,串口一直处在准备接受的状态。现在是我从串口读到一个转速值,然后从P2口输出一个脉冲,
输出脉冲:以接收到的转速值为参数算出来的一个延时时间为延时,延时时间用T0定时器做,时间到翻转。
//延时函数     单位 100 us( t=1时,延时100微秒  )        (晶振为12MHz)

void delay(unsigned int t)
{
    uint cont;
    cont=65536-100*t;
    TMOD=TMOD|0X01;       //T0 ,工作方式1 (16位)
    TH0=(uchar)(cont>>8);
    TL0=(uchar)cont;
    TR0=1;
    while(TF0!=1);
    TF0=0;
    TR0=0;    

}

// 电机以指定速度运行 
void mot_run(unsigned int speed)
{
    unsigned int  td;
    td=1500/speed;
    CL=~CL;             
    delay(td);

}

使用特权

评论回复
12
ljs183| | 2014-7-18 11:30 | 只看该作者
为什么不用定时器中断的服务函数来进行翻转,定时器所赋值得计算的语句运行所说的时间有没有计算在内。我也在做步进电机的控制,用的中断来翻转的,数值计算放在中断外。步进电机做的256细分,高速运转一个脉冲就几微秒,时间计算要包括每一条汇编指令的时间。而且很耗系统时间,大家有没有更好的办法呢?

使用特权

评论回复
13
joyme| | 2014-7-18 15:59 | 只看该作者
你可以测试一下td=1500/speed;这个语句要执行多长时间
几个微秒的脉冲用你说的51单片机系统做本来就不太可能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

136

帖子

0

粉丝