资源简介
本设计为基于51单片机的直流电机PID指定转速控制,利用4x4矩阵键盘对电机的转速进行设定,并可以根据电机的反馈脉冲显示电机的实时转速,利用PID调节对实时速度进行调整,最终达到设定的目标速度。
压缩包内含keil程序(详细注释)、proteus7.1和8.6两个版本的仿真文件以及使用方法。
代码片段和文件信息
/*PID的参数设置可以参照以下来进行:
参数整定找最佳,从小到大顺序查;
先是比例后积分,最后再把微分加;
曲线振荡很频繁,比例度盘要放大;
曲线漂浮绕大湾,比例度盘往小扳;
曲线偏离回复慢,积分时间往下降;
曲线波动周期长,积分时间再加长;
曲线振荡频率快,先把微分降下来;
动差大来波动慢。微分时间应加长;
理想曲线两个波,前高后低4比1 ;
一看二调多分析,调节质量不会低;
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^5; //LCD1602数据命令选择端口
sbit RW = P2^6; //LCD1602读写选择端口
sbit EN = P2^7; //LCD1602使能端口
sbit IN2=P3^3; //L298输入端2
sbit IN1=P3^4; //L298输入端1
sbit PWM_FC=P3^5;//L298使能端口
uchar aa[]={‘T‘‘a‘‘r‘‘g‘‘e‘‘t‘‘ ‘‘ ‘‘ ‘‘ ‘‘ ‘‘r‘‘/‘‘m‘‘i‘‘n‘};//目标转速:Target r/min
uchar cc[]={‘A‘‘c‘‘t‘‘u‘‘a‘‘l‘‘ ‘‘ ‘‘ ‘‘ ‘‘ ‘‘r‘‘/‘‘m‘‘i‘‘n‘};//实测转速: Actual r/min
uchar displayflag; //显示标志位变量
uint SetSpeed=500; //声明设定速度变量
uint ActualSpeed=0; //声明实际速度变量
int e e1 e2 ; //声明当前偏差值变量、之后偏差值变量、再后偏差值变量
int out=0; //PID调节后输出偏差值变量
uint cnt=0; //定时器1中断次数变量
uint Inpluse=0; //声明脉冲计数变量、
uint PWMTime=100; //声明脉冲宽度时间变量
float uk uk1 duk ;//声明目前总偏差值变量、之后偏差值总变量、偏差值总变量
float Kp=0.36Ki=0.05Kd=0.016;//pid控制系数p=0.36,i=0.05,d=0.016。
uchar countsign1;
uchar key;
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned int t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
uchar key_scan (void)
{
uchar temptemp2;
uchar num;
P1 = 0xf0;//让P1输出0xf0
temp = P1;//读入P1的值
if (temp != 0xf0) //当P1读入的值不等于0xf0
{
DelayMs(5);//延迟5ms
temp = P1;//再读入P1口的值
if (temp != 0xf0)//如果P1读入的值不等于
{ //0xf0,就说明有按键按下
temp2 = temp;//保留P1读入值得高四位
P1 = 0x0f;//再让P1口输出0x0f
DelayMs(5);
temp = P1;//再读入P1口的值
temp2 |= temp;//保留此读入值的低四位
}
}
switch(temp2)
{
case 0xee: num = 0;break;
case 0xde: num = 1;break;
case 0xbe: num = 2;break;
case 0x7e: num = 3;break;
case 0xed: num = 4;break;
case 0xdd: num = 5;break;
case 0xbd: num = 6;break;
case 0x7d: num = 7;break;
case 0xeb: num = 8;break;
case 0xdb: num = 9;break;
case 0xbb: num = 10;break;
case 0x7b: num = 11;break;
case 0xe7: num = 12;break;
case 0xd7: num = 13;break;
case 0xb7: num = 14;break;
case 0x77: num = 15;break;
default :num=16;break;
}
return num;
}
void write_com(uchar com)//写命令
{
RS=0;
RW=0;
P0=com;
DelayMs(5);
EN=1;
DelayMs(5);
EN=0;
}
void write_data(uchar date)//写一个字符
{
RS=1;
RW=0;
P0=date;
DelayMs(5);
EN=1;
DelayMs(5);
EN=0;
}
void init()//初始化
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void LCD_Write_String(uchar xuchar yuchar *s)//写字符串
{
if (y == 0)
{
write_com(0x80 + x);
}
else
{
write_com(0xC0 + x);
}
while (*s)
{
write_data( *s);
s++;
}
}
void PIDControl() //pid偏差计算
{
e=SetSpee
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-07-15 15:40 直流电机转速控制\
目录 0 2020-07-15 15:41 直流电机转速控制\仿真7版本\
文件 6966 2020-07-15 13:47 直流电机转速控制\仿真7版本\main.hex
文件 792 2020-07-15 15:41 直流电机转速控制\仿真7版本\无刷直流电机转速控制.PWI
文件 114431 2020-07-15 15:39 直流电机转速控制\仿真7版本\直流电机转速控制.DSN
目录 0 2020-07-15 15:40 直流电机转速控制\仿真8.6版本\
文件 6966 2020-07-15 13:47 直流电机转速控制\仿真8.6版本\main.hex
文件 23738 2020-07-15 12:34 直流电机转速控制\仿真8.6版本\直流电机转速控制.pdsprj
文件 631 2020-07-15 15:40 直流电机转速控制\先看我.txt
目录 0 2020-07-15 13:47 直流电机转速控制\程序\
文件 14983 2020-07-15 13:47 直流电机转速控制\程序\main
文件 957 2020-07-15 13:47 直流电机转速控制\程序\main.build_log.htm
文件 7874 2020-07-15 13:47 直流电机转速控制\程序\main.c
文件 6966 2020-07-15 13:47 直流电机转速控制\程序\main.hex
文件 25 2020-07-15 13:47 直流电机转速控制\程序\main.lnp
文件 13331 2020-07-15 13:47 直流电机转速控制\程序\main.LST
文件 19824 2020-07-15 13:47 直流电机转速控制\程序\main.M51
文件 17311 2020-07-15 13:47 直流电机转速控制\程序\main.OBJ
文件 256 2020-06-21 21:57 直流电机转速控制\程序\main.plg
文件 70950 2020-07-14 23:02 直流电机转速控制\程序\main.uvgui.Administrator
文件 91018 2020-07-15 13:47 直流电机转速控制\程序\main.uvgui.世兴哥哥
文件 5025 2020-07-15 00:22 直流电机转速控制\程序\main.uvopt
文件 14246 2020-07-14 23:16 直流电机转速控制\程序\main.uvproj
文件 54873 2020-06-16 00:07 直流电机转速控制\程序\main_uvopt.bak
文件 13558 2020-05-10 22:42 直流电机转速控制\程序\main_uvproj.bak
相关资源
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
- 基于51单片机的多通道数据采集范围控
- ADC0832ADC0809DAC0832三种芯片程序,c程序
- 高速公路快速放行提示系统
- 光敏电阻传感器模块4线制
- 51单片机_DS1302时钟芯片_共阴数码管
- 基于51单片机的教室智能照明控制系统
- 基于单片机的智能低电阻测量仪
- 电动车智能充电桩全套
- 五路循迹智能小车
- 基于51单片机的交通灯设计
- 51 教室智能灯 控制系统
- 51单片机125Khz ID卡读卡程序
- 51单片机课程设计内含50多个课程设计
- 51单片机实现蜂鸣器的简易歌曲播放器
- 基于51单片机的智能十字路口交通灯系
- 51单片机编写的标准modbus协议通信模版
- SIM900A通过51单片机拨打电话程序
- at89c51单片机外文翻译
- CW2015 51单片机程序
- 基于51单片机的超声波测距技术实现含
- 基于51单片机射频密码锁设计门禁刷卡
- 基于51单片机的十字路口交通灯Protu
- 32x16LED汉子点阵显示屏
- 收发短信,短信控制LED51单片机例程
评论
共有 条评论