基于51单片机的直流电机控制_第1页
基于51单片机的直流电机控制_第2页
基于51单片机的直流电机控制_第3页
基于51单片机的直流电机控制_第4页
基于51单片机的直流电机控制_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于基于 5151 单片机的单片机的 直流电机控制直流电机控制 一 试验器件选择 1 控制芯片的作用主要是与 L289 相连接驱动直流电机 以及与八位数码管相 连显示 1 AT89C51 是一种带 4K 自己 FLASH 存储器的低压 高性能 CMOS8 为微处 理器 单片机的可擦除只读存储器可以反复擦除 1000 次 该器件采用 ATMEL 高 密度非易失真存储制造技术制造 与工业标准的 MCS 51 指令集和输出关键相兼 容 由于将多功能 8 位 CPU 和闪存组合在单个芯片中 ATMEL 的 AT89C51 是一 种高效微控制器 AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性奥 高且廉价的方案 2 AT89C51 引脚图如下 2 电机驱动芯片 1 电机驱动芯片选择 L298 其主要功能是作为单片机与直流电机中间 的过度链接 单片机输出的信号通过 L298 加载到直流电机上驱动直流电机运行 其引脚图如下 2 主要工作原理 1 15 脚分别是两个 H 桥的电流反馈脚 不用时可以直接接地 2 3 为一对输出端口 13 14 为一对输出端口 4 为驱动电压输入 最小值必须比输入的低电平高 2 5 7 一对输入端口 10 12 一对输入端口 TTL 电平兼容 6 11 使能端 低电平禁止输出 8 9 分别为接地和逻辑电源 3 直流电机 在 protues 中选择 motor encoder 直流电机 引脚图如下 上方左右的两个引脚在点击运转时输出频率相 同的方波 但是在相位上相差 90 而且在正 转和反转是相反 因此可以根据这两个引脚的 输出情况判断点击的转向 上方中间的引脚每 当电机转一圈就输出一个正脉冲 可以据此册 数点击的转速 左右两个引脚是电机的电压输 入端 4 74HC74 当 D 触发器的 D 和 CLK 输入端分别接电机上方的左右两个输出端 口时可以根据 D 触发器的输出情况判断点击的转速 5 八位数码管 用以显示 二 系统硬件设计连接 1 系统的器件连接图如下 2 单片机与数码管通过 P0 口和 P2 口相连 其中 P2 口选择点亮哪一个数码管 P0 口则控制被点亮的数码管显示的数据 3 单片通过 P1 0 和 P1 1 和 L298 的第一对输入端 IN1 和 IN2 相连 然后又 L298 的第一对输出端 OUT1 和 OUT2 与直流电机相连 已达到控制直流电机的目 的 4 从 P1 4 到 P1 7 分别接一个 Button 按钮来实现 PID 控制 P3 6 和 P3 7 分 别接 Button 按钮实现对电机的加速与减速控制 5 双刀双掷开关 SW1 课实现点击的正转与反转 单刀双掷开关 SW2 可实现点击 的开启与停止 三 系统程序设计及功能实现 1 程序流程图 开始 输入一个值 点击 Enter 按钮 通过 PID 算法 改变 PWM 波 输出让电机运行 通过按钮加减 改变当前值 Enter 键确定 判断新的输入值与当前值的 差值 将差值加到原值上 通过 PID 算法改变 PWM 波 输出控制电机运行 循环 2 各部分实现程序 1 普通延时 include void delayms unsigned char x unsigned char i while x for i 0 i 120 i 2 数码管显示 include include include void display lilun double num char code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 7 对应数 码 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 8 F 对应数 码 long int n num P0 0 P2 0 x7f P0 table n 1000 100 delayms 2 百位加小数点 P0 0 P2 0 xbf P0 table n 100 10 delayms 2 十位 P0 0 P2 0 xdf P0 table n 10 delayms 2 个位 P0 0 关闭显示 器 void display double num int dir char code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 7 对应数 码 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 8 F 对应数 码 long int n num 10 P0 0 P2 0 xf7 P0 table n 1000 delayms 2 百位 加小数点 P0 0 P2 0 xfb P0 table n 1000 100 delayms 2 百位加小数点 P0 0 P2 0 xfd P0 table n 100 10 128 delayms 2 十位 P0 0 P2 0 xfe P0 table n 10 delayms 2 个位 P0 0 关闭显示 器 if dir 1 P0 0 P2 0 xef P0 0 x40 delayms 2 3 按键扫描 include sbit jiashi P1 3 对 各个按钮进行位定义 sbit jianshi P1 4 sbit jia P1 5 sbit jian P1 6 sbit enter P1 7 extern int num key 5 定 义全局变量 void keyscan if jiashi 0 while jiashi num key 0 if jianshi 0 while jianshi num key 1 if jia 0 while jia num key 2 if jian 0 while jian num key 3 if enter 0 while enter num key 4 4 PWM 波输出 include include include extern int PWM 赋初值 extern int start sudu lilun extern double dis count sbit S2 P3 6 PWM 值减少键 sbit S3 P3 7 PWM 值 增加键 void PWM duty if start 1 PWM sudu lilun do if PWM 0 xff PWM delayms 10 while S3 0 do if PWM 0 x02 PWM delayms 10 while S2 0 5 中断服务程序 include extern int PWM count count1 dir count20ms flag extern double dis count sbit PWM OUT1 P1 1 sbit PWM OUT2 P1 0 void timer0 interrupt 1 long int i TR1 0 dir 0 TL0 0 x00 TH0 0 xd8 10ms TL0 0 xf0 TH1 PWM TR1 1 PWM OUT1 0 启动输出 PWM OUT2 0 if i 492 count20ms flag 1 i 0 dis count double count coun t1 2 count 0 count1 0 void timer1 interrupt 3 TR1 0 if dir 0 PWM OUT1 1 结束输 出 PWM OUT2 0 else PWM OUT1 0 PWM OUT2 1 void EIRQ0 void interrupt 0 EX0 0 count EX0 1 void EIRQ1 void interrupt 2 EX1 0 count1 EX1 1 6 PID 控制 include include int P I D extern int sudu lilun typedef struct PID 定义结 构体 int SetPoint 目标 long SumError 误差 double Proportion 比例系数 double Integral 积分系数 double Derivative 微分系数 int LastError int PrevError PID static PID sPID static PID sptr void IncPIDInit sptr SumError 0 sptr LastError 0 Error 1 sptr PrevError 0 Error 2 sptr Proportion 0 5 比例 系数 sptr Integral 0 3 积分系 数 sptr Derivative 0 3 微分 系数 sptr SetPoint sudu lilun int IncPIDCalc int NextPoint register int iError iIncpid 当前的误差值 iError sptr SetPoint NextPoint 计算增加量 iIncpid sptr Proportion iError E k 项 sptr Integral sptr LastError E k 1 项 sptr Derivative sptr PrevError E k 2 项 存储当前误差以便后面计算 sptr PrevError sptr LastError sptr LastError iError 返回增量值 return iIncpid 7 main 函数 include include include include include include include sbit P10 P1 2 确定电机转 向 int num key 5 int PWM PWM1 count count1 dir sudu lilun start count20ms flag double dis count int PWM PID void init void main init while 1 PWM duty if P10 1 dir 0 else dir 1 keyscan sudu lilun num key 0 10 num key 1 10 num key 2 num key 3 display lilun sudu lilun if num key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论