#define uchar unsigned char

#define uint unsigned int

#define GPIO_KEY P2

sbit PWM=P1^4;

sbit P10=P1^0;

sbit P12=P1^2;

uchar speed1[4]={"0000"};//设定转速

uchar speed2[3]={"000"};//占空比

uchar speed[]={"0000"};//当前转速

uchar KeyValue=0;

uint AA,count=0,flag;

float pid_p=0.003,pid_i=0.003,pid_d=0.002;        //PID三个参数 初值

uint SpeedSet=3000,CurrentSpeed;//设定转速 当前转速

unsigned char pid_val_mid;//pid_val_mid脉冲宽度

unsigned int lastError=0;

long int sumError=0;//sum偏差和

void delay1(unsigned int i)

{

unsigned int j;

for(;i>0;i--)

for(j=0;j<333;j++)

{;}

}

/********************* 键盘扫描*************/

void KeyDown(void)

{

GPIO_KEY=0x0f;

delay1(10);

if(GPIO_KEY!=0x0f)

{

delay1(10);

if(GPIO_KEY!=0x0f)

{

//测试列

GPIO_KEY=0X0F;

delay1(10);

switch(GPIO_KEY)

{

case(0X07):        KeyValue=0;break;

case(0X0b):        KeyValue=1;break;

case(0X0d): KeyValue=2;break;

case(0X0e):        KeyValue=3;break;

}

//测试行

GPIO_KEY=0XF0;

delay1(10);

switch(GPIO_KEY)

{

case(0X70):        KeyValue=KeyValue;break;

case(0Xb0):        KeyValue=KeyValue+4;break;

case(0Xd0): KeyValue=KeyValue+8;break;

case(0Xe0):        KeyValue=KeyValue+12;break;

}

}

}

}

void timer()

{

TMOD=0x11;//定时器0工作方式1.16位,定时器1工作方式1,16位定时;

TH0=0x4b;//50ms初值

TL0=0xfe;

TH1=0xfc;//1msPWM控制

TL1=0x66;

TR1=1;          //启动定时器1

ET1=1;           //定时器1中断使能

IT0=1;//外部中断下降沿触发

TR0=1;        //定时器启动标志

ET0=1;        //定时器中断使能

EX0=1;        //外部中断使能

EA=1;        //全局中断

}

/***********************lcd显示*************/

void  display()

{

speed[0]=CurrentSpeed/1000+0x30; //当前转速

speed[1]=CurrentSpeed/100%10+0x30;

speed[2]=CurrentSpeed/10%10+0x30;

speed[3]=CurrentSpeed%10+0x30;

speed1[0]=SpeedSet/1000+0x30;//设定转速

speed1[1]=SpeedSet/100%10+0x30;

speed1[2]=SpeedSet/10%10+0x30;

speed1[3]=SpeedSet%10+0x30;

speed2[0]=pid_val_mid/100+0x30;

speed2[1]=pid_val_mid/10%10+0x30;//占空比

speed2[2]=pid_val_mid%10+0x30;

DispHanzi(0,0,5,"当前转速:");

DispZimu(0,5,4,speed);

DispHanzi(1,0,5,"设定转速:");

DispZimu(1,5,4,speed1);

DispHanzi(3,0,4,"占空比:");//占空比

DispZimu(3,4,3,speed2);

DispHanzi(3,6,1,"%");//占空比

}

/************************电机控制*************/

void keyKZ()

{

if(KeyValue==4)//正转

{

P10=1;

P12=0;

}

if(KeyValue==5)//反转

{

P10=0;

P12=1;

}

if(KeyValue==6)//停车

{

P10=0;

P12=0;

}

if(KeyValue==12)//设定速度加50

SpeedSet+=50;

if(KeyValue==13)//设定速度减50

SpeedSet-=50;

if(KeyValue==14)//设定速度加1

SpeedSet+=1;

if(KeyValue==15)//设定速度减1

SpeedSet-=1;

[1] [2]

直流电机PID控制源码c语言,51单片机PID+PWM直流电机转速闭环控制源码(12864液晶显示)...相关推荐

  1. 51单片机PID算法控制无刷直流电机proteus仿真

    51单片机PID算法控制无刷直流电机proteus仿真 1.五个按键,停止/启动,正转,反转,加速,减速 2.显示lcd1602,第一行设置速度set= 3.第二行实际速度speed= r/min 4 ...

  2. 基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)

    资料编号:117 仿真图proteus 7.8 程序编译器:keil 5 编程语言:C语言 采用51单片机,用PWM控制电机脉冲频率应控制在25HZ-35HZ之间 定时1ms,1个周期30ms,脉冲频 ...

  3. 步进电机c语言控制程序6,步进电机控制程序(c语言+51单片机)

    步进电机控制程序(c语言+51单片机) #include #define uint  unsigned int #define uchar unsigned char #define ms *77 / ...

  4. php控制步进电机,步进电机控制程序(c语言+51单片机)

    步进电机控制程序(c语言+51单片机) #include #define uint  unsigned int #define uchar unsigned char #define ms *77 / ...

  5. 基于单片机的c语言倒计时程序,30秒倒计时c语言51单片机实现.doc

    30秒倒计时c语言51单片机实现 原理图: 程序: #include #define uchar unsigned char #define uint unsigned int sbit dula=P ...

  6. 基于51单片机的智能门禁控制系统(仿真+源码+全套资料)

    资料编号:119  功能讲解: 采用51单片机作为CPU控制,继电器驱动门锁的打开与关闭,采用按键模拟指纹开锁,以及内部开锁相关信号,当指纹正确门锁可以正常打开,指示灯亮绿灯,如果指纹错误,门锁无法打 ...

  7. 基于51单片机的智能窗帘项目,源码+原理图+pro仿真。

    基于51单片机的智能窗帘项目,源码+原理图+pro仿真. 介绍 :此作品有四种模式,通过四个独立按键调控,模式1:三个光感范围,使得电机驱动窗帘自动开,半开,关;模式2:15-25度的温度阈值,低于或 ...

  8. 基于51单片机的PWM控制马达电机调速正反转

    资料编号:117  下面是相关功能视频演示: 117-基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料) 仿真图proteus 7.8(理论上高于7.8均可以打开) 程序编译器:ke ...

  9. 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 ...

  10. dac0832控制电机驱动流程图_应用DAC0832单片机控制小直流电机转速的设计.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp社科论文 应用DAC0832单片机控制小直流电机转速的设计.d ...

最新文章

  1. ServiceStack.Redis常用操作 - 事务、并发锁
  2. EF创建上下文对象HttpContext和CallContext
  3. c语言不通类型指针转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...
  4. Docker拉取ZooKeeper镜像安装运行
  5. 请注意,我们要谈谈神经网络的注意机制和使用方法
  6. linux命令封装sh,shell脚本学习之调用脚本将文件打包zip的方法示例
  7. ElasticSearch基于REST风格APi的常用操作
  8. Android相关笔记-4
  9. 数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
  10. opencv 把3通道图像转成单通道_【3】OpenCV图像处理模块(4)图像腐蚀与膨胀
  11. office 2003 下载
  12. 电脑办公 等 无锡计算机培训,无锡锡山区电脑培训计算机培训office办公软件培训...
  13. 进程管理API之get_task_mm
  14. MTK 驱动 Kernel-3.18中如何配置和使用spi
  15. 基于java springboot活动报名微信小程序源码(毕设)
  16. 计算机控制液位控制系统,计算机控制系统的液位流量串级控制系统设计
  17. Verilog无符号除法器-状态机实现
  18. c语言extern int的作用,c语言之extern
  19. 两台计算机如何传输数据,详解两台电脑直连传输数据方法
  20. 线性规划——产销平衡

热门文章

  1. Tomcat9的安装和配置
  2. r 语言 html,r语言出现加号
  3. 小米便签产品级的源码
  4. R语言、Meta分析、MATLAB在生态环境领域里的应用
  5. FDDB人脸检测测试集使用方法
  6. java计算机毕业设计小型企业财务报销管理源码+lw文档+系统+数据库
  7. 重点人员动态管控系统开发方案,情指勤一体化平台建设
  8. Docker 加速器
  9. php最长公共子串,PHP实现求两个字符串最长公共子串的方法示例
  10. 前端单点登录(SSO)