【资源下载】下载地址如下1551:
https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
本文所述的直流电机闭环调速系统是以低价位的单片微机8051为核心的,而通过单片机来实现电机调整又有多种途径,相对于其他用硬件或者硬件与软件相结合的方法实现对电机进行调整,采用PWM软件方法来实现的调速过程具有更大的灵活性和更低的成本,它能够充分发挥单片机的效能,对于简易速度控制系统的实现提供了一种有效的途径。而在软件方面,采用PLD算法来确定闭环控制的补偿量也是由数字电路组成的直流电机闭环调速系统所不能及的。曾经也试过用单片机直接产生PWM波形,但其最终效果并不理想,在使用了少量的硬件后,单片机的压力大大减小,程序中有充足的时间进行闭环控制的测控和计算,使得软件的运行更为合理可靠。
#include <reg51.h>
#include <intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define S1_ON() (P3 & (1<<5)) == 0x00 //正转 (1<<5)=00100000 & P3=11011111
#define S2_ON() (P3 & (1<<6)) == 0x00 //停转
#define S3_ON() (P3 & (1<<7)) == 0x00 //反转
#define Forward 0 //正转指示灯
#define Stop 1 //停转指示灯
#define Backward 2 //反转指示灯
sbit M_DIR = P1^0; //方向控制
sbit M_PWM = P1^1; //PWM调速控制
sbit Key_INC = P3^0; //加速键
sbit Key_DEC = P3^1; //减速键
//-----------------------------------------------------------------
// 延时函数
//-----------------------------------------------------------------
void delay_us(INT16U x) { for(; x>0; x--) _nop_(); }
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
int speed=200;
while(1)
{
if(S2_ON())
{
P0=~(1<<Stop);
M_DIR=0;M_PWM=0;
continue;
}
if(S1_ON())
{