谁有基于单片机的AT89C51的直流电机PWM调速系统的资料。
设计了以单片机AT89C51的直流电机脉宽调制(PWM)调速系统。
主要介绍了用单片机软件实现PWM调整电机转速的基本方法, 给出了程序流
程图、KeilC51程序以及Proteus的仿真结果。硬件电路实现了对电机的正转、
反转、急停、加速、减速的控制, 以及的占空比在四位LED上的实时显示。
求各位大神别藏了 小弟真的急用
#include <reg52.h>
//--定义使用的IO口--//
sbit PWM=P1^0;
//--定义一个全局变量--//
unsigned char timer1;
void Time1Config();
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{
Time1Config();
while(1)
{
if(timer1>100) //PWM周期为100*0.5ms
{
timer1=0;
}
if(timer1 < 30) //改变30这个值可以改变直流电机的速度
{
PWM=1;
}
else
{
PWM=0;
}
}
}
/*******************************************************************************
* 函 数 名 : Time1Config
* 函数功能 : 设置定时器
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1Config()
{
TMOD|= 0x10; //设置定时计数器工作方式1为定时器
//--定时器赋初始值,12MHZ下定时0.5ms--//
TH1 = 0xFE;
TL1 = 0x0C;
ET1 = 1; //开启定时器1中断
EA = 1;
TR1 = 1; //开启定时器
}
/*******************************************************************************
* 函 数 名 : Time1
* 函数功能 : 定时器1的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 = 0xFE; //重新赋初值
TL1 = 0x0C;
timer1++;
}
