佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2402|回复: 5

89s52 .. set PWM如何同时用TMOD mode2 在servo motor 和DC motor..

[复制链接]
发表于 7-4-2009 01:28 AM | 显示全部楼层 |阅读模式
我的MCU 是89s52....要如何用同时control servo motor 和DC Motor(with PWM的) 


假如我用P3_0 for sensor input,
0 = servo motor turn  150 degree, DC motor PWM 100% duty cycle
1 = servo motor turn 30 degree, DC motor PWM50% duty cycle......

我用TMOD=0x11   mode 1
我的code能turn servo motor 150和30 degree ...
但是DC motor拿不到PWM, 不知道要怎样放interrupt。。 

大家帮帮忙。。。。

#include <REGX52.h>                 

///////////DC motor///////

move(){
    if(P3_0 == 1){
        P1_1 = 1;        //enable
        P1_2 = 1;        //move forward
        P1_3 = 0;
        TH0=0x63;
        TL0=0xC0;
        P1_1=0;
        TR0=0;
   
    }
   
    else{
        P1_1 = 1;        //enable
        P1_2 = 1;        //move forward 50% duty cycle
        P1_3 = 0;
        TH0=0xB1;
        TL0=0xE0;
        P1_1=0;
        TR0=0;
    }
    }
                 

////////////////servo motor////////////

void timer1_ovf() interrupt 2{    // timer 1 for 20ms
    TH1=0xB1;
    TL1=0xE0;
    P1_0=1;                 //servo motor enable
    TR0=1;
    }

void timer0_ovf() interrupt 1{    // timer 0 for various shaft position

    if(P3_0==0 ){  
        TH0=0xF7;     //turn right to 150 degree  (2100us)
        TL0=0xCC;
        P1_0=0;              //servo motor enable
        TR0=0;
        }

    else if(P3_0==1){
        TH0=0xFC;     //turn right to 30 degree  (900us)
        TL0=0x7C;
        P1_0=0;             //servo motor enable
        TR0=0;
        }   
        }

void main(){

    TMOD=0x11;
    ET1=1;
    ET0=1;
    TH1=0xB1;
    TL1=0xE0;
    TR1=1;
    EA=1;

    while(1){
        move();
            }
    }
回复

使用道具 举报


ADVERTISEMENT

发表于 7-4-2009 02:16 PM | 显示全部楼层
mmu fyp?

回复你之前,想知道你的concept.
你要如何generate pulse给servo?
你要如何generate pwm给dc motor?
回复

使用道具 举报

 楼主| 发表于 7-4-2009 05:17 PM | 显示全部楼层

回复 2# fritlizt 的帖子

是的。。。关于line follewer。。。因为我用servo motor来control direction, DCmotor 是forward and backward..
上面的code是用来testing 的。。。我用timer 0 和 timer 1  mode 1 for servo motor, 但不知道怎样同时generate pwm给dc motor。
回复

使用道具 举报

发表于 8-4-2009 10:47 AM | 显示全部楼层
原帖由 j4_c 于 7-4-2009 05:17 PM 发表
是的。。。关于line follewer。。。因为我用servo motor来control direction, DCmotor 是forward and backward..
上面的code是用来testing 的。。。我用timer 0 和 timer 1  mode 1 for servo motor, 但不知道怎样同 ...


用两个timer来generate pulse给servo太浪费了。
最快有两个方法。
1。89s52有两个timer.用timer2来generate pwm给dc motor

2。用timer 0 generate pulse 给servo. timer 2 给dc motor. timer 1留着。 有必要才用
回复

使用道具 举报

 楼主| 发表于 8-4-2009 08:10 PM | 显示全部楼层

回复 4# fritlizt 的帖子

谢谢你的回复。。
我不知道servo 的generate pulse用一个timer 就可以了。。。

我写了另一个 code 给servo motor的,用timer 0,但是还是不能跑。。。不知道哪里出错了。。

#include <REGX52.h>

void main(){

            TMOD=0x01;
            ET0=1;
            TH1=0xB1;                        //initial timer 0 for 20ms
            TL1=0xE0;
            TR0=1;                                //on timer 0
            P1_0=1;                                //enable servo motor
                EA=1;                                //enable interrupt

    while(1){
            }
    }

void timer0_ovf() interrupt 1{   

        if(P3_0==0 ){  
                TH0=0xF7;             //turn right to 150 degree  (2100us)
                TL0=0xCC;
                        TR0=1;                        //on timer 0
                        while(!TF0);                //timer 0 overflow
                        TR0=0;                        //off timer 0
                        TF0=0;                        //clear overflog flag
                    }

        else if(P3_0==1 ){  
                TH0=0xFC;             //turn right to 30 degree  (900us)
                TL0=0x7C;
                        TR0=1;                        //on timer 0
                        while(!TF0);                //timer 0 overflow
                        TR0=0;                        //off timer 0
                        TF0=0;                        //clear overflog flag
                    }
}
回复

使用道具 举报

发表于 9-4-2009 01:09 PM | 显示全部楼层
参考这贴。你就懂如何控制servo motor了
http://cforum4.cari.com.my/viewt ... &extra=page%3D1
回复

使用道具 举报

Follow Us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 7-1-2025 08:00 AM , Processed in 0.118025 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表