pid控制器c51语言编程,51单片机电机pid控制系统程序
51单片机电机pid控制系统程序
本程序来源网上,小编进行了简单修改,还未验证。
/*************************
应用背景:直流电机的额定功率12V,额定转速3000rpm,光码盘12孔,
晶振为12MHz,定时/计数器T0检测转速,用定时器T1进行定时,
P1.0控制直流电机的正反转,用P1.1控制电机的转速.
************************/
#include
#include
#define uchar unsigned char
uchar timcount,PWMH,SpeedSet,SpeedDet;
uchar KP,KI,KD;
int e1,e2,e3,uk,duk;
sbit Dir = P1^0;
sbit PWM = P1^1;
//延时函数
void delay(uchar i)
{
uchar j;
for(;i>0;i--)
{
for(j=29;j;j--)
_nop_();
_nop_();
}
}
//延时函数,产生PWM波
void PWMout(uchar q)
{
PWM = 1;
delay(q);
PWM = 0;
delay(100-q);
}
void timer1() interrupt 3
{
TH1 = 0x3c; //(65536-50000)=15536= ox3c oxb0 即定时50ms
TL1 = 0xb0; //(65536-50000)=15536= ox3c oxb0 即定时50ms
if(--timcount==0)
{
timcount = 4;
TR0 = 0;
SpeedDet = TL0;
TL0 = 0;
TR0 = 1;
e1 = SpeedSet-SpeedDet;
duk = (KP*(e1-e2)+KI*e1+KD*(e1-2*e2+e3))/10; //误差的微分:(e1-2*e2+e3)=((e1-e2)-(e2-e3))/1
uk = uk+duk;
if(uk>100)
uk=100;
else if(uk
uk = -100;
if(uk<0)
{
PWMH = -uk;
Dir = 0;
}
else
{
PWMH =uk;
Dir = 1;
}
e3 = e2;
e2 = e1;
}
}
void main(void)
{
TMOD = 0x16; //T1工作于定时模式的方式一16位定时器;T0工作于计数模式的方式2八位自动重装模式。
TH0 = 0;//装载计数初始值为0
TL0 = 0;//装载计数初始值为0
TH1 = 0x3c;//(65536-50000)=15536= ox3c oxb0 即定时50ms
TL1 = 0xb0;//(65536-50000)=15536= ox3c oxb0 即定时50ms
timcount = 4; //
PWMH = 0; //PWM高电平时间初始为0
SpeedSet = 80;//设定期望值速度80
SpeedDet = 0; //速度偏移量
e1 = 0;//当前误差
e2 = 0;//上一次误差
e3 = 0;//上上次误差
KP =10; //比例系数
KI = 1;//积分系数
KD = 2;//微分系数
TR0 = 1; //打开定时器T0
TR1 = 1;//打开计数器T1
ET1 = 1;//允许中断T1
ET0 = 1;//允许中断T0
EA = 1;//打开总中断
while(1)
{
PWMout(PWMH); //电机运行速度
}
}
pid控制器c51语言编程,51单片机电机pid控制系统程序相关推荐
- 51单片机电机测速程序c语言,单片机电机测速程序
这个51单片机+电机霍尔测速程序是从一个制作成功的智能小车里面提取出来的 原理图及其源代码压缩包的下载地址:http://www.51hei.com/bbs/dpj-19526-1.html 下面是主 ...
- 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc
基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...
- 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)
一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...
- 51单片机电机测速程序c语言,单片机仿真编码器电机测速程序
/***********头文件声明************/ #include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器 /***********数据类型声明 ...
- 51单片机串行口c语言编程,51单片机串口通信c语言编程
这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...
- 6位密码锁的c语言编程,51单片机4*3矩阵键盘6位密码锁c语言程序
满意答案 #include #include #define uchar unsigned char uchar key; int i=0; char b[4]={'0','0','0','0'};/ ...
- 超声波模块c语言编程,51单片机超声波模块的C语言程序.pdf
//超声波模块程序 //超声波模块程序 //Trig P2^0 //Echo P3^2 #include #define uchar unsigned char #define uint unsign ...
- 无线控制模块c语言编程,51单片机对无线模块nRF24L01简单的控制收发程序
它的一些物理特性如工作频段.供电电压.数据传输速率就不详细介绍了,直接上代码. 1.首先是发送端: // Define SPI pins #include #define uchar unsigned ...
- 恒温控制系统单片机仿真c语言,基于51单片机的恒温控制系统
#include void main()//主函数 { init();//初始化函数 while(1) { temp_control();//控制按键函数 unnormal_proccessing(g ...
最新文章
- AgentJob--修改操作系统时间对Job的影响
- Java IO流中 File文件对象与Properties类(四)
- 高阶产品经理的自我修养:项目管理之启动
- JAVA 文件锁 FileLock
- 基于某网站的信息爬取与保存
- 【通用技术】2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会...
- python爬取b站评论_python高效之爬了B站再爬微博
- 太形象了!什么是边缘计算?最有趣的解释没有之一!
- Excel合并单元格基础注意事项(VSTO 2005)
- MFC开发IM-第十七篇、CString TCHAR的互相转换
- 2022年上半年网络工程师下午真题及答案
- 软件系统分析-分账系统
- 关于粒子群算法的两种惯性权重
- H3C S5720交换机系统文件丢失一直重启的解决办法
- 万网域名绑定阿里云服务器
- 51ditu maps API 使用——显示所有信息——点击链接显示对应标记浮窗[修]
- [Power Query]:自动提取自定义一周的数据
- android拼图小游戏代码,Android实现拼图小游戏
- [题解]CodeForces1208G Polygons
- 为什么navicat总是闪退问题解决
热门文章
- c++如何定义一个只能在堆上(栈上)生成对象的类?
- 经典C语言程序100例之七四
- java jpanel调用构造函数的时候就开始执行repaint_在Java Swing组件中劫持`repaint()`调用...
- c语言用hash方式数组去重,js数组去重的hash方法
- 「SVN」Ubuntu 版本库搭建+使用 完整教程
- 16_非监督学习、k-means 4阶段、kmeans API、Kmeans性能评估指标、案例
- 使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)
- HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
- 1虚拟机下U盘或磁盘挂载,Ubuntu下的网络配置,图形化界面和命令界面之间的切换,软件源配置
- 通过已有SQL语句,生成数据库模型PDM