资源简介
用51单片机写的PID算法控制电机的转身PWM。可以使用哈

代码片段和文件信息
#include
/*********宏定义************/
#define uint unsigned int
#define uchar unsigned char
#define SYSCLK 24500000
#define Kp 3.0//比例系数
#define Ki 0.3//积分系数
#define Kd 200//微分系数
/**********特殊功能寄存器****************/
sfr16 TMR3RL=0x92;
sfr16 TMR3=0x94;
/**********变量定义************/
float N_target=10;//张力设定值
float N_real=0;//张力实际值
float PWM=0;
//bit flag;
//float Out[3]={000};
idata float diff[20]={00000000000000000000};//存放误差
idata float sum_diff=0; //误差累计
idata int Di=0;//数组坐标变量
idata float P_outI_outD_out;
//idata float pwm_0;
idata float temp;
/***********函数声明*************/
void PORT_Init(void);//端口初始化
void Oscillator_Init(void);//系统晶振设置
void PCA_Init(void);//PCA初始化
void Timer3_Init(void);//定时器3初始化
void Initial(void);//总初始化子函数
void Timer3_set(void);//定时器3设置,决定PID执行速率
void PID(void);//PID计算程序
void PID_to_TH(PWM);
//void PWM_set(void);//PWM占空比设置
void delay(uint t);//延迟函数
/************主函数部分**********************/
void main()
{
Initial();
delay(20);
Timer3_set();
EA=1;
EIE1=0x80;
PCA0CPH0=128;
while(1)
{
PID_to_TH(PWM);
}
}
/*************子函数*************************/
void Initial()
{
PORT_Init();
Oscillator_Init();
PCA_Init();
Timer3_Init();
}
void PORT_Init(void)
{
XBR1=0x45;//PCA四个模块连接到引脚
}
void Oscillator_Init(void)
{
OSCICN=0x87;//系统使用内部晶振,频率24500000,不分频
}
void PCA_Init(void)
{
PCA0CN=0x40;//允许PCA计数器/定时器
PCA0MD&=~0x40;//关闭看门狗
PCA0MD=0x08;//PCA时钟为系统时钟
PCA0CPM0=0xc2;//16位PWM输出
}
void Timer3_Init()
{
TMR3CN=0x04;//开启定时器3时钟为系统时钟的1/12
}
void Timer3_set()
{
unsigned long int tt;
tt=65536-(SYSCLK/12/1000)*20;
TMR3L=tt;
TMR3=tt;
}
void PID(void)
{
temp=diff[Di];
if(Di+1>=20)
Di=0;
else
Di+=1;
diff[Di]=N_target-N_real;
sum_diff+=diff[Di];
P_out=Kp*diff[Di];
I_out=Ki*sum_diff;
D_out=Kd*(diff[Di]-temp);
if(I_out>100)
I_out=100;
if(I_out<-100)
I_out=0;
PWM=P_out+I_out+D_out;
if(PWM<0)
PWM=0;
else if(PWM>=100)
PWM=100;
}
void PID_to_TH(PWM)
{
PCA0CPH0=65536-65536*PWM;
}
void delay(uint t)
{
uint ij;
for(i=0;i {
for(j=0;j<300;j++);
}
}
void T3_zd() interrupt 14
{
TMR3CN&=0x7f;
PID();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8985 2009-09-30 12:08 pid\PID_PWM
文件 2417 2009-09-29 21:54 pid\PID_PWM.c
文件 5512 2009-09-30 12:08 pid\PID_PWM.LST
文件 13115 2009-09-30 12:08 pid\PID_PWM.M51
文件 8639 2009-09-30 12:08 pid\PID_PWM.OBJ
文件 1045 2009-09-30 15:41 pid\PID_PWM.Opt
文件 325 2009-09-30 12:08 pid\PID_PWM.plg
文件 2096 2009-09-25 20:22 pid\PID_PWM.Uv2
....... 1046 2009-09-30 11:00 pid\PID_PWM_Opt.Bak
....... 0 2009-09-25 11:39 pid\PID_PWM_Uv2.Bak
文件 5115 2002-04-16 15:32 pid\STARTUP.A51
文件 11763 2009-09-30 12:08 pid\STARTUP.lst
文件 830 2009-09-30 12:08 pid\STARTUP.obj
目录 0 2009-09-30 15:41 pid
----------- --------- ---------- ----- ----
60888 14
- 上一篇:汽车车牌字体_包括中文数字字母
- 下一篇:USB在FPGA上的实现源码
相关资源
- 电路图天天读19:局域网中红外遥控发
- 基于89C51的智能台灯
- PID_AutoTune_v0.rar
- FPGA实现PID.v
- DV泵加罗茨泵独立控制系统PID.smart
- STC8951系列单片机中方指南
- 模糊PID控制 c
- 51单片机PWM程序,占空比、周期可调整
- proteus仿真 AT89C51输出各种波形
- SG3525频率PWM控制均可调模块
- 课程设计蔬菜大棚自动控制系统,包
- 基于AT89C51的数据采集系统设计新方法
- C51单片机汇编指令查询、学习工具集
- 基于89c51的数字钟
- 基于单片机交通灯设计
- 基于89C51计算机锁定加密键盘设计
- (温度PID)实验指导书(三菱)
- 基于51单片机的计算器(C51编写,有
- PLCS7-1200PID参数自整定
- PLCS7-1200PID闭环控制
- RapidIO 2.2 Specification
- RapidIO_Rev_2.2_Specification
- STM32+TMC5160代码电路图.rar
- 基于DSP的大功率开关电源的设计方案
- 基于DSP的大功率开关电源设计
- 基于ARM7 PWM定时器的图像传感器时序信
- BLDC电机PID算法
- 电力电子技术(第4版)_王兆安_带目
- 基于FAN6754A的PWM反激式开关电源的设计
- 采用双闭环控制提高PWM的电源纹波抑
评论
共有 条评论