AT89C51单片机PWM直流电机转速PID控制源程序

标签:
51单片机c语言源程序pid控制转速 |
当P1.0中为高电平时,其内部三极管导通,使电机转动。当P1.0为低电平时,内部三极管截止,电路断开,电机停止转动。所以在程序中可以利用P1.0口输出PWM波来控制电机的转速。
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管显示码(0-9)
sbit xiaoshudian=P0^7;
sbit wei1=P2^4;
//数码管位选定义
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
sbit beep=P2^3;
//蜂鸣器控制端
sbit motor = P1^0;
//电机控制
sbit s1_jiasu = P1^4;
//加速按键
sbit s2_jiansu= P1^5;
//减速按键
sbit s3_jiting=P1^6;
//停止/开始按键
uint pulse_count;
//INT0接收到的脉冲数
uint num=0;
//num相当于占空比调节的精度
uchar speed[3];
//四位速度值存储
float bianhuasudu;
//当前速度(理论计算值)
float reallyspeed;
//实际测得的速度
float vv_min=0.0;vv_max=250.0;
float vi_Ref=60.0;
//给定值
float vi_PreError,vi_PreDerror;
uint pwm=100;
//相当于占空比标志变量
int sample_time=0;
//采样标志
float v_kp=1.2,v_ki=0.6,v_kd=0.2;
//比例,积分,微分常数
void delay (uint z)
{
}
void time_init()
{
}
void keyscan()
{
}
float v_PIDCalc(float vi_Ref,float vi_SpeedBack)
{
}
void v_Display()
{
}
void BEEP()
{
}
void main()
{
}
void timer0() interrupt 1
{
}
void timer1() interrupt 3
{
}