微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > PWM直流电机在实际应用中的一个问题

PWM直流电机在实际应用中的一个问题

时间:10-02 整理:3721RD 点击:
这是驱动电机的函数void runnotor(unsigned char s)
{
        Time1Config();//定时器的一些设置,每过0.5ms     timer1++
        while(1)
        {
                if(timer1>100)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 < s)        //改变“s”可改变速度
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }
        }
       
}
主函数
void main(void)
{
        float tp;
        sign_auto=0;
        speed=50;
        runmotor(speed);
        while(1)
        {
                tp=Ds18b20ReadTemp();//读取的温度
                realtemp=tp*0.0625*100+0.5;
                DigDisplayTemp(realtemp);//显示温度
                Key_Scan();//扫描键盘
                KeyNum=Key_Scan;
                switch(KeyNum)
                {
                        case(0xFD):speed=40,sign_auto=0;break;
                        case(0xFB):speed=70,sign_auto=0;break;
                        case(0xF7):speed=99,sign_auto=0;break;
                        case(0xFE):sign_auto=1;break;
                        default:break;
                }
                if(sign_auto) speed=autospeed(realtemp);
                runmotor(speed);       
        }
}
还没成型的程序,如上在运行主函数时要采用while(1)死循环,但是驱动电机的函数里面也需要用这个死循环,这样的话程序就在电机那里出不来了,试过不采用调用驱动电机函数,直接把驱动电机的代码写入主函数中,但这样的话由于timer1的变化感觉PWM就没什么用了,也试过修改定时器的值,这样电机转一下停一下看起来很明显。现向论坛里来求助一下,如何在主函数中处理电机驱动函数,在此先谢过各位了!

if(timer1>100)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 < s)        //改变“s”可改变速度
                {
                        PWM=1;有问题吧

哪儿呢0.0

明白了,定时器里不要用while循环了,在定时中断里对timer1++进行处理就可以了,
void timer1(void) interrupt 3
{
                 if(timer1>100)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 < s)        //改变“s”可改变速度
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }
}

666啊,我想了好久没想到,把这个函数写进定时中断就行啦。非常感谢你!

那就好,太客气了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top