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控制系统程序相关推荐

  1. 51单片机电机测速程序c语言,单片机电机测速程序

    这个51单片机+电机霍尔测速程序是从一个制作成功的智能小车里面提取出来的 原理图及其源代码压缩包的下载地址:http://www.51hei.com/bbs/dpj-19526-1.html 下面是主 ...

  2. 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc

    基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...

  3. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

  4. 51单片机电机测速程序c语言,单片机仿真编码器电机测速程序

    /***********头文件声明************/ #include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器 /***********数据类型声明 ...

  5. 51单片机串行口c语言编程,51单片机串口通信c语言编程

    这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...

  6. 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'};/ ...

  7. 超声波模块c语言编程,51单片机超声波模块的C语言程序.pdf

    //超声波模块程序 //超声波模块程序 //Trig P2^0 //Echo P3^2 #include #define uchar unsigned char #define uint unsign ...

  8. 无线控制模块c语言编程,51单片机对无线模块nRF24L01简单的控制收发程序

    它的一些物理特性如工作频段.供电电压.数据传输速率就不详细介绍了,直接上代码. 1.首先是发送端: // Define SPI pins #include #define uchar unsigned ...

  9. 恒温控制系统单片机仿真c语言,基于51单片机的恒温控制系统

    #include void main()//主函数 { init();//初始化函数 while(1) { temp_control();//控制按键函数 unnormal_proccessing(g ...

最新文章

  1. AgentJob--修改操作系统时间对Job的影响
  2. Java IO流中 File文件对象与Properties类(四)
  3. 高阶产品经理的自我修养:项目管理之启动
  4. JAVA 文件锁 FileLock
  5. 基于某网站的信息爬取与保存
  6. 【通用技术】2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会...
  7. python爬取b站评论_python高效之爬了B站再爬微博
  8. 太形象了!什么是边缘计算?最有趣的解释没有之一!
  9. Excel合并单元格基础注意事项(VSTO 2005)
  10. MFC开发IM-第十七篇、CString TCHAR的互相转换
  11. 2022年上半年网络工程师下午真题及答案
  12. 软件系统分析-分账系统
  13. 关于粒子群算法的两种惯性权重
  14. H3C S5720交换机系统文件丢失一直重启的解决办法
  15. 万网域名绑定阿里云服务器
  16. 51ditu maps API 使用——显示所有信息——点击链接显示对应标记浮窗[修]
  17. [Power Query]:自动提取自定义一周的数据
  18. android拼图小游戏代码,Android实现拼图小游戏
  19. [题解]CodeForces1208G Polygons
  20. 为什么navicat总是闪退问题解决

热门文章

  1. c++如何定义一个只能在堆上(栈上)生成对象的类?
  2. 经典C语言程序100例之七四
  3. java jpanel调用构造函数的时候就开始执行repaint_在Java Swing组件中劫持`repaint()`调用...
  4. c语言用hash方式数组去重,js数组去重的hash方法
  5. 「SVN」Ubuntu 版本库搭建+使用 完整教程
  6. 16_非监督学习、k-means 4阶段、kmeans API、Kmeans性能评估指标、案例
  7. 使用Docker虚拟化出一个Centos7操作系统(140、141机器上执行)
  8. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
  9. 1虚拟机下U盘或磁盘挂载,Ubuntu下的网络配置,图形化界面和命令界面之间的切换,软件源配置
  10. 通过已有SQL语句,生成数据库模型PDM