版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、可编辑51 单片机的直流电机控制一、试验器件选择1、控制芯片的作用主要是与l289 相连接驱动直流电机,以及与八位数码管相连显示。(1)、at89c51 是一种带 4k 自己 flash 存储器的低压、高性能cmos8 为 微处理器。单片机的可擦除只读存储器可以反复擦除1000 次。该器件采用atmel 高密度非易失真存储制造技术制造,与工业标准的mcs-51 指令集和输出关键相兼容。由于将多功能8 位 cpu 和闪存组合在单个芯片中,atmel 的 at89c51是一种高效微控制器。 at89c51 单片机为很多嵌入式控制系统提供了一种灵活性奥高且廉价的方案。(2)、at89c51 引脚图如
2、下:s!xtal1 f0 帅00f0.1/ad1pj 2/ad2xfal2 pj 即河口3p0.4/ ft).的心p 口, 加口6rst pd.tjad7p2 c/a8 pl.r 鹏一/ 工a 25四3d可编辑psen 20a11ale p2,w12ea p2,5w1.13ip2,&a14p2 7za.15pi.0 0pi. 1 p3.1/txdfl.2 p5.2/int0-p i i pi.i7ntp1 4 f3.4ep1 5 p3. 迎pi.6 p3.6/wtpi.7 pitw-j2g f 二1q 工1 ;34135u16172、电机驱动芯片(1)、电机驱动芯片选择l298。其主要
3、功能是作为单片机与直流电机中间的过度链接,单片机输出的信号通过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、而且在正转和反转是相反,因此可以根据这两个引脚的输出情况判断点击的转向。上方中间的引脚每当电机转一圈就输出一个正脉冲,可以据此册数点击的转速。左右两个引脚是电机的电压输入端。4、74hc74 。当 d 触发器的 d 和 clk 输入端分别接电机上方的左右两个输出其引脚图如下 : u213 vs0ut1 0ut2 out3 vcc in1in2 in3in4 ena enb 1012770ut4 gnd l298sensasensb可编辑端口时可以根据 d 触发器的输出情况判断点击的转速。5、八位数码管。用以显示。二、系统硬件设计连接1、系统的器件连接图如下:2、单片机与数码管通过p0 口和 p
5、2 口相连,其中 p2 口选择点亮哪一个数码管,p0 口则控制被点亮的数码管显示的数据。3、单片通过 p1a0 和 p1a1 和 l298 的第一对输入端 in1 和 in2 相连,然后又l298 的第一对输出端 out1 和 out2 与直流电机相连,已达到控制直流电机的目的。4、从 pw4 到 p1a7 分别接一个 button 按钮来实现 pid 控制, p3a6 和 p3a7 分别接 button 按钮实现对电机的加速与减速控制。5、双刀双掷开关 sw1 课实现点击的正转与反转,单刀双掷开关sw2 可实现点可编辑击的开启与停止三、系统程序设计及功能实现1、程序流程图 :通过按钮加减改变
6、当前值,差值,将差值加到原值上,通过 pid 算法改变 pwm 波2、各部分实现程序 : #include 输入一个值,点击enter 按钮,通过 pid 算法,改变pwm 波输出让电机运行循环(1)、普通延时 : enter 键确定判断新的输入值与当前值的输出控制电机运行_ _ _ j可编辑 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
7、, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, /07 对应数码0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71; /8f 对应数码long int n=num; p0 = 0; p2 =0 x7f; p0 = tablen % 1000/100; tablen % 100 delayms(2);/ 十位p0 = 0; p2 =0 xdf; tablen % delayms(2);/ 个位p0 = 0; 二 aa示器 void display(double num,int dir) char c
8、ode table = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, /07 对应数码0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71; /8f 对应数码long int n=num*10; p0 = 0; p2 =0 xf7; p0 = tablen / 1000; delayms(2); / 百位delayms(2);/ 百位加小数点void delayms(unsigned char x) p0 0; p2 =0 xbf; p0 / 10; p0 = 10; /
9、关闭显加小数点可编辑tablen % 1000/100; delayms(2); / 百位加小数点p0 = 0; p2 =0 xfd; p0 = tablen %100 / 10+128; delayms(2);/ 十位p0 = 0; p2 =0 xfe; p0 = tablen%10; delayms(2);/ 个位示器if(dir=1) p0=0;p2=0 xef;p0=0 x40;delay ms(2); 义全局变量void keyscan() / 对各 if(jiashi=0) while(!jiashi); num_key0+ / 定if(jianshi=0)p0 0; p2 =0
10、xfb; p0 p0 = 0; / 关闭显3) 、按键扫描:#include sbit jiashi=p1a3; 个按钮进行位定义sbit jianshi=p1a4; sbit jia=p1a5; sbit jian=p1a6; sbit enter=p1a7; extern int num_key5; 可编辑 while(!jianshi); num_key1+; if(jia=0) while(!jia); num_key2+; if(jian=0) while(!jian); num_key3+; if(enter=0) while(!enter); num_key4+; 4) 、 pw
11、m 波输出:#include #include #include extern int pwm ; / 赋初值extern int start,sudu_lilun; extern double dis_count; sbit s2 =p3a6 ; /pwm 值减少键sbit s3 =p3a7 ; /pwm 值增加键void pwm_duty() if(start=1) pwm=sudu_lilun; do if(pwm!=0 xff) pwm+ ; delayms(10); while(s3=0);可编辑delayms(10); if(pwm=0 x02) pwm- ; while(s2=0
12、); 5) 、中断服务程序:#include extern int pwm,count,count1,dir,count20 ms_flag; extern double dis_count; sbit pwm_out1=p1a1; sbit pwm_out2=p1a0;void timer0() interrupt 1 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; long int i; i=0; tr1=
13、0 ; dir=0;do 可编辑dis_count=(double)(count+co unt1)/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; ex0=0; count+; ex0=1; void eirq1(void) interrupt 2 ex1=0; count1+; ex1=1; 6) ) 、 pid 控制:#include #include int p,i,d; extern
14、int sudu_lilun; typedef struct pid / 定义结构体 int setpoint; / 目标long sumerror; / 误差void eirq0(void) interrupt 0 double proportion; / 比例系数可编辑double integral; / 积分系数 int incpidcalc(int nextpoint)double derivative; / 微分系数int lasterror; int preverror; pid; static pid spid; static pid *sptr = &spid; voi
15、d 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; register int ierror, iincpid; / 当前的误差值ierror = sptr-setpoint - nextpoint; / 计算增加量iincpid = sptr-prop
16、ortion * ierror /ek 项- sptr-integral * sptr-lasterror /ek 1项+ sptr-derivative * sptr-preverror; /ek 2项/ 存储当前误差以便后面计算sptr-preverror = sptr-lasterror; sptr-lasterror = ierror; / 返回增量值return(iincpid); #include #include #include 7) 、 main 函数:可编辑#include #include #include #include sbit p10=p1a2; 确定电机转向in
17、t num_key5; int pwm,pwm1,count,count1,dir,su du_lilun,start,count20ms_flag; double dis_count; int pwm_pid; void init(); void main() init(); while(1) pwm_duty(); if(p10=1) dir=0; keyscan(); sudu_lilun=num_key0*10- num_key1*10+num_key2- num_key3; display_lilun(sudu_lilun); if(num_key4=1) start=1; display(dis_count,dir); if(star
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初中德育年度工作总结
- 内科护士长年终工作总结及来年护理工作计划
- 2026 年有子女离婚协议书标准范本
- 2026 年规范化离婚协议书标准版
- 保险新人入司培训课件
- 房屋抵押工作年终总结(3篇)
- 钓鱼俱乐部年终总结计划(3篇)
- 公司档案管理自查报告
- 办学行为小微权力负面清单落实情况6篇
- 2026年二手房交易合同
- 成立合资公司合同范本
- 比亚迪索赔培训课件
- 民航安全法律法规课件
- 2026届四川省泸州高级中学高一生物第一学期期末经典试题含解析
- 山东省济宁市2026届第一学期高三质量检测期末考试济宁一模英语(含答案)
- 2026标准版离婚协议书-无子女无共同财产债务版
- 光伏电站巡检培训课件
- 【期末必刷选择题100题】(新教材)统编版八年级道德与法治上学期专项练习选择题100题(含答案与解析)
- 年末节前安全教育培训
- GB/T 93-2025紧固件弹簧垫圈标准型
- 建筑公司工资薪酬管理制度(3篇)
评论
0/150
提交评论