标题: 求助 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; //P0为ADC0809信号控制口
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
谢谢,那请问遥控车的摇杆调速都是怎么实现的呢?
另外我模拟了一下,发现脉冲频率和模拟量的对应关系会有问题,没有规律。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |