Proteus对直流电机的控制

目录

总结源代码:

AT89C52 L293D motor_DC(直流电机)

最大值:-192 +192

 通过延时改变占空比,或者通过定时器实现:

#include <reg52.h>
#define uint unsigned int
sbit IN0=P2^0;
sbit IN1=P2^1;
sbit E=P2^2;
 
void delay(uint n)
{
	uint i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
//总192 占空比50%  96 96 
//占空比25%     高电平delay25   75;最大达到48
void motor()
{
	IN0=0;//1 0正转  0 1 反转
//	IN1=1;
//	delay(50);
//	IN1=0;
//	delay(50);
	E=1;
}
void inittimer()
{
	TMOD=0X01;//选中定时器16位模式
	TH0=(65536-10000)/256;//10ms
	TL0=(65536-10000)%256;
	ET0=1;//打开定时器中断
	EA=1;//开启总中断
	TR0=1;//开启定时器0
	IN1=0;//赋一个初值
}

void main()
{
	inittimer();
	while(1)
	{
		motor();
	}
}
//每隔10ms进一次中断
void timer_isr() interrupt 1
{
	TH0=(65536-10000)/256;//10ms
	TL0=(65536-10000)%256;	
	IN1=~IN1;//方波
}




#include <reg52.h>
#define uint unsigned int
	
sbit IN0=P2^0;
sbit IN1=P2^1;
sbit   E=P2^2;
//占空比为20%的波形
uint value[]={2000,8000};
uint count=0;
void delay(uint n)
{
	uint i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
//总192 占空比50%  96 96 
//占空比25%     高电平delay25   75;最大达到48
void motor()
{
	IN0=0;//1 0正转  0 1 反转
//	IN1=1;
//	delay(50);
//	IN1=0;
//	delay(50);
	E=1;
}

//假设占空比是1/5 周期10ms
//高电平2000 低电平8000
void inittimer()
{
	TMOD=0X01;//选中定时器16位模式
	TH0=(65536-8000)/256;//10ms
	TL0=(65536-8000)%256;
	ET0=1;//打开定时器中断
	EA=1;//开启总中断
	TR0=1;//开启定时器0
	IN1=0;//赋一个初值
}

void main()
{
	inittimer();
	while(1)
	{
		motor();
	}
}
//每隔10ms进一次中断
void timer_isr() interrupt 1
{
	TH0=(65536-value[count])/256;//10ms
	TL0=(65536-value[count])%256;	
	IN1=~IN1;//方波
	count++;
	if(count==2)//保证占空比是20%
	{
		count=0;
	}
}




 误差:

 原因:

 解决:

手动把2000  8000算出来,减少计算量。65536-2000 = F830    65536-8000 = E0C0

 

 确实减小误差了。

总结源代码:

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN0=P2^0;
sbit IN1=P2^1;
sbit   E=P2^2;
//占空比为20%的波形
uchar valueh[]={0xf8,0xe0};
uchar valuel[]={0x30,0xc0};
uint count=0;
void delay(uint n)
{
	uint i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
//总192 占空比50%  96 96 
//占空比25%     高电平delay25   75;最大达到48
void motor()
{
	IN0=0;//1 0正转  0 1 反转
//	IN1=1;
//	delay(50);
//	IN1=0;
//	delay(50);
	E=1;
}

//假设占空比是1/5 周期10ms
//高电平2000 低电平8000
void inittimer()
{
	TMOD=0X01;//选中定时器16位模式
	TH0=(65536-8000)/256;//10ms
	TL0=(65536-8000)%256;
	ET0=1;//打开定时器中断
	EA=1;//开启总中断
	TR0=1;//开启定时器0
	IN1=0;//赋一个初值
}

void main()
{
	inittimer();
	while(1)
	{
		motor();
	}
}
//每隔10ms进一次中断
void timer_isr() interrupt 1
{
	TH0=valueh[count];//(65536-value[count])/256;//10ms
	TL0=valuel[count];//(65536-value[count])%256;	
	IN1=~IN1;//方波
	count++;
	if(count==2)//保证占空比是20%
	{
		count=0;
	}
}

Proteus直流伺服电机可以看作是直流电机和伺服系统的结合。它通过电子驱动器和反馈控制系统来控制电机的转速和位置,从而实现精确的运动控制Proteus直流伺服电机具有以下特点和优势: 1. 高精度控制:通过反馈控制系统,可以准确地控制电机的转速和位置,实现高精度的运动控制。这使得它在需要精确控制的应用领域,如机械制造和自动化生产线中得到广泛应用。 2. 快速响应:Proteus直流伺服电机具有快速的动态响应能力,能够快速调整电机的转速和位置,从而适应不同的工作要求和变化环境。 3. 节能高效:相对于传统的直流电机Proteus直流伺服电机通常带有能够有效节能的电子驱动器。这种驱动器可以根据实际需要调整电机的转速和负载,以最佳方式使用能源,从而提高电机的效率和节能效果。 4. 可靠稳定:Proteus直流伺服电机可靠稳定,在工作过程中几乎没有振动和噪音,使其适用于对噪音有要求的应用场合。此外,它还具有较长的使用寿命和较低的维护成本。 5. 易于控制Proteus直流伺服电机具有简单易操作的控制接口,可以通过编程或手动方式来实现电机的控制。用户可以根据需要进行灵活的调整和设置,以满足不同的应用需求。 总之,Proteus直流伺服电机具有高精度控制、快速响应、节能高效、可靠稳定和易于控制等优点,广泛应用于自动化控制系统、机械制造、医疗设备等领域。它为各种精密运动控制提供了理想的解决方案。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值