Proteus对直流电机的控制

目录

总结源代码:

AT89C52 L293D motor_DC(直流电机)

Proteus对直流电机的控制_第1张图片

最大值:-192 +192

Proteus对直流电机的控制_第2张图片Proteus对直流电机的控制_第3张图片

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

#include 
#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

 

#include 
#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

 误差:

Proteus对直流电机的控制_第4张图片

 原因:

Proteus对直流电机的控制_第5张图片

 解决:

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

Proteus对直流电机的控制_第6张图片

 Proteus对直流电机的控制_第7张图片

 

Proteus对直流电机的控制_第8张图片

 确实减小误差了。

总结源代码:

#include 
#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

你可能感兴趣的:(Proteus,单片机,学习)