标题: 求助 89C52控制步进电机,摇杆可调速 [打印本页]

作者: qitiantangsheng    时间: 2020-4-15 10:17
标题: 求助 89C52控制步进电机,摇杆可调速
各位大神,小弟想用单轴摇杆(0-5V模拟量输出)控制步进电机的方向和转速,请问如何实现,以下是我的程序,但用Proteus仿真发现:
1.脉冲的输出和摇杆的变化不对应。
2.脉冲波形中间会规律的出现一段较长时间的低电平或高电平。
希望各位大神指点!感谢!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*ADC0809将摇杆模拟信号转换为数字信号*/
sbit ST=P0^0;             //P0ADC0809信号控制口
sbit EOC=P0^1;
sbit OE=P0^2;
sbit CLK=P0^3;
sbit shineng=P2^0;           //      步进电机驱动
sbit fangxiang=P2^1;
sbit zhuan=P2^2;
uchar num;
uchar pwm;                                  //控制脉冲频率
uchar u_cai;            //信号采集
void timestart()        //ADC0809模块初始化
{
         TMOD=0x01;
         TH1=(65536-1)/256;
         TL1=(65536-1)%256;
         TH0=(65536-10000)/256;
         TL0=(65536-10000)%256;

         ET0=1;
         EA=1;
         ET1=1;
         TR1=1;

}

void delay(uint xms)          //延时函数
{
         uinti,j;
         for(i=xms;i>0;i--)
                   for(j=110;j>0;j--);
}

void jisuan(uchar u_cai)     //通过采集的模拟信号计算脉冲周期
{
         if(u_cai<=125)
         {
                   fangxiang=1;
                   pwm=u_cai+1;
         }
         elseif((u_cai>125)&&(u_cai<=135))
         {
                   pwm=255;
                   shineng=0;
         }
         else
         {        
                   fangxiang=0;
                   pwm=-1*(u_cai-129)+126;
         }
}

}
void caishu()          //ADC0809信号采集程序
{

            ST=0;
            ST=1;
            ST=0;
            OE=1;
            delay(8);
            u_cai=P1;
            OE=0;

}

void main()
{
         timestart();      
         shineng=1;

         while(1)
         {
                   num=0;
                   caishu();
                   jisuan(u_cai);
                   TR0=1;
         }

}

void time1() interrupt 3
{
         TH1=(65536-1)/256;
         TL1=(65536-1)%256;
         CLK=~CLK;
}

void time0() interrupt 1
{
         TH0=(65536-100)/256;
         TL0=(65536-100)%256;

         num++;
         if(num==pwm)
         {
                   num=0;
                   zhuan=~zhuan;

         }
}

摇杆步进电机.zip

18.91 KB, 下载次数: 15


作者: wwl0098    时间: 2020-4-15 13:31
void time0() interrupt 1
{
         TH0=(65536-100)/256;
         TL0=(65536-100)%256;

         num++;
         if(num==pwm)
         {
                   num=0;
                   zhuan=~zhuan;

         }
}
========================
假如当前num=10;pwm=20;
pwm发生变化,pwm=2;
那么要等num溢出之后才会满足if()的条件
作者: qitiantangsheng    时间: 2020-4-15 14:27
wwl0098 发表于 2020-4-15 13:31
void time0() interrupt 1
{
         TH0=(65536-100)/256;

谢谢,那请问遥控车的摇杆调速都是怎么实现的呢?
另外我模拟了一下,发现脉冲频率和模拟量的对应关系会有问题,没有规律。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1