版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于单片机的直流电机PWM调速控制 我的方案(改进后)一. 电路框图。电机单片机 pwm 输出 输入指令脉冲数,方向功 率驱动器速度显示速度检测 电路框图PWM控制原理PWM控制就是脉冲宽度调制。通过控制电机的电压脉冲宽度,可以改变其电压有效值.从而可以改变它的转速.图中前部分波形与后部分波形周期是一样的,我们通过调节其占空比(图中tH1不等于tH2)。很明显图中前部分波形的电压有效值大于后部分波形的电压有效值,即前者驱动的电机速度比后者的大。二.各部分原理图 (1)光电脉冲检测与单片机接口原理解析:此电路为简单的红外光电传感器,它由一对红外发射管及接收管组成,红外发射管及接收管分别固定在电机
2、叶片的两侧,当电机转动时,叶片因为可以挡光而使红外接收管在叶片旋转一周内产生多个脉冲,脉冲个数取决于叶片的数量。该脉冲信号(也可以先将它整形)被送入单片机p3.3口(即中断1)进行计数和处理. (2)按键接口电路原理解析:此电路采用独立式按键电路,在无按键按下时p3.0, p3.1, p3。6口被上拉电阻拉为高电平,与门输出也为高电平.当有按键按下时,其对应的接口立刻变为低电平,而此时与门输出也会变成低电平,此信号连接的是单片机外部中断0的中断请求信号输入端p3.2。只要我们在软件设计时设置外部中断0为下降沿触发响应;这时当有按键按下时p3.2口的电平由高跳变为低(即为下降沿)。相应中断后就可
3、以通过检测按键口的状态即可判断是哪一个键按下了.然后再执行对应的功能程序。在这里,我们先规定这三个键对应的功能。Sw1功能键 ; Sw2上一个/减1 ; Sw3下一个/加1;(3)功能指示灯电路及接口原理解析:这四只LED是功能选择指示灯,其定义的功能分别是:p1.0:功能选择确认/返回 p1.1:显示模式 p1.2:设置速度 p1.3:电机正反转我们先定义按键与功能指示灯所要完成的功能,以便之后的软件设计。由于按键SW1状态与p3.0相关(外中断0的引入信号),这种硬件连接方法决定了我们在编程时用中断方式来响应按键功能设置.。所以此部分功能是要在系统启动后且按下SW1键后才能响应进入这部分的
4、功能设置。(即按下除SW1外的键是不能进入设置的)。当单片机检测到SW1键有按下时就响应中断,点亮p1.0口处的LED表示已进入功能设置状态,此时如果按下SW2,则指向下一功能(指示灯为下一个(p1.1口的)亮,表示将要选择显示模式设置),按SW3则相反,是指向上一个的功能选项(p1.3口的灯亮),表示将要选择电机正反转设置。如此反复选定要设置的项后,要再按SW1键表示确认。单片机检测到确认信号后就转到相应的处理程序。假如经过以上的一番左右选择后,确定将要对显示模式进行设置(此时指示灯对应的是p1.1口的LED亮),按确认键后,软件转向显示模式设置的程序进行后继处理(对应下面软件部分程序标号为
5、WORK1的程序段)。其余功能选项处理步骤雷同,但如果这一步选择了p1.0对应的功能并确认那程序会直接转到中断返回。注意在这后继的程序中,SW2,SW3分别表示的功能是自减自增;例如在设置速度功能下每按一次SW2则设定速度减1 r/s。每按一次SW3则设定速度加1 r/s。详细的处理方案请参考后面软件设计部分的“INT0中断服务程序,扫描键盘”子程序。这里就不细说了。 (4)电机驱动电路(H桥路)及控制接口原理解析:p3.4为单片机pwm波输出口,用于控制电机速度。P3.5为电机正反转控制口.在电路图中我们可以看到,不管p3.5状态如何,逻辑与门u1,u2在任何时刻都是一开一闭,即R6,R7处
6、必有一处为低电平,假设R7处为低电平,当p3.4驱动信号为1时,即R6处为高电平。电路中三极管Q1,Q3开Q2,Q4闭。电机电流从左流向右.为正转。反之,当p3.5改变状态后,R6为低电平。Q1,Q3截止Q2,Q4开。电机电流从右流向左.为反转。我们在上面做功能选项电机正反转设置时,就是通过改变p3.5口的状态来改变电机转向的。 (5)LED数码显示接口电路原理解析:数码管我们用的是共阴极数码管。只要在p0,p2口输出需要显示的字型码即可显示相应的数字。(5)单片机最小系统。(略)(6)整体系统电路图如下三软件设计 开始 初始化 关外中断0 采样显示开中断0,扫描键盘载入功能设置速度比较 调整
7、PWM 主程序流程开始P3.3是否有上升沿设工作方式,装初值 开计时器1计时器溢出P3.3是否有下降沿22H单元+1,重装计时初值P3.3是否有上升沿计时器溢出22H单元+1,重装计时初值 停止计时,存储计时值 数据处理 送显示 速度采样程序流程图开始点亮D1灯P3.0按下?P3.6按下?显示灯左移P3.6弹起?P3.1按下?P3.6按下?右移指示灯P3.0按下?左移指示灯 具体功能程序熄灭所有指示灯中断返回 键盘扫描主程序(int0)开始检测p1口状态1D1亮?D2亮?D4亮?D3亮?显示模式标志位取反转向标志位取反显示当前速度值中断返回 P3.弹起?P3.6按下?P3.1按下?速度单元减1
8、且送显示P3.0按下?速度单元加1且送显示具体功能程序的流程上面列出了INT0中断服务程序和 采样显示子程序的主要流程.。其余的就不写了,我在程序中注释得很清楚;相信大家不难看懂。四、源程序定义分配存储单元 7EH:设pwm高电平标志位 7FH:显示模式标志位(显示设置速度/采样速度) 29H :速度存储单元(m/s) 22H :计100ms次数存储单元 25H:采样速度存储单元(高位)26H :采样速度存储单元(低位)20H : T1计数值存储单元(高8位) 21H :T1计数值存储单元(低8位) 23H :采样时间低位存储单元(Tp)24H :采样时间低位存储单元(Tp) 27H : pw
9、m高电平时的计时初值(低8位)28H :pwm高电平时的计时初值(高8位) 2AH : pwm低电平时的计时初值(低8位) 2BH : pwm低电平时的计时初值(高8位);全部程序 ORG 0000H LJMP START ORG 0003HLJMP TOINT0 ORG 000BHLJMP T0INT ORG 0050HSTART: MOV SP,#40H SETB P3.4;使电机旋转 SETB P3.5;设正转 SETB 7EH ;设pwm高电平标志 MOV 29H,#08H ;设定速度初值(m/s)CLR 7FH;初始化显示模式位(显示速度)MOV 22H,#00H ;清计100ms次
10、数存储单元MOV 25H,#00H ;清采样速度存储单元MOV 26H,#00HMOV 20H,#00H ;清T1计数值MOV 21H,#00H MOV 23H,#00H ;清采样时间存储单元(Tp)MOV 24H,#00HMOV 27H,#57H ;装入pwm高电平时的计时初值MOV 28H,#9EH MOV 2AH,#57H ;装入pwm低电平时的计时初值MOV 2BH,#9EHMOV TL0,#57H;将初值装入计时寄存器T0MOV TH0,#9EHMOV TMOD,#01H;设T0工作方式1,定时状态 SETB EA;开中断 SETB ET0;允许T0溢出中断 SETB TR0;启动T
11、0 SETB IT0;设置INT0的中断触发类型,下降沿触发 SETB PT0;设优先级,T0为高级中断MAIN: CLR EX0 ;关中断0LCALL TODESPLAY ;调采样显示子程序 SETB EX0;开中断0,扫描键盘载入功能设置LCALL COMPLETE ;调用速度比较子程序 LJMP MAIN ; 采样显示子程序 TODESPLAY: PUSH ACC PUSH PSW MOV TMOD,#90H ;设GATE=1,T1工作方式1 MOV TH1,#3CHMOV TL1,#0B0H ;定时100ms JB P3.3,$ JNB P3.3,$ ;等待上升沿 SETB TR1;开
12、计时 LOOP1: JBC TF1,ADDNUM1 ;溢出则转满100ms存储单元22h加1 NX1: JB P3.3,LOOP1 ;等待p3.3下降 LOOP2: JBC TF1,ADDNUM2 ;溢出则存储单元22h加1 NX2: JNB P3.3,LOOP2;等待p3.3有上升沿 CLR TR1;停止计时MOV 20H,TL1MOV 21H,TH1 ;测量到的数据小数部分放在20h,21h LJMP DESPLAY;跳到数据处理及速度显示程序段 ADDNUM1: MOV TH1,#3CH MOV TL1,#0B0H ;重新装入定时器初值 CLR TF1;清计数溢出标志位 INC 22H;
13、100ms存储单元22h加1 LJMP NX1ADDNUM2: MOV TH1,#3CH MOV TL1,#0B0H CLR TF1 INC 22H LJMP NX2 DESPLAY: MOV A,22HCJNE A,#00H,ONDES;大于100ms则转CLR C;先低位相减要清进位/借位标志MOV A,20HSUBB A,#0B0HMOV 23H,A;低位存入23hMOV A,21HSUBB A,#3CHMOV 24H,A;高位存入24h LCALL CHUFA ;调除法程序计算速度值存放在26h,25h JB 7FH,MOSHI1 ;检测显示模式标志位7FHJB OV,SW1 ;溢出显
14、示错误ErMOV A,25H JNZ SW1;25h不为0则显示错误MOV A,26H;判断26h值是否超过99 CLR CSUBB A,#63H JNC SW1 ;超过99显示错误ErMOV A,26H DA A ;显示26h中的速度,25h实际上无用ANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,26H DA ASWAP A ANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P2,A LJMP GO MOSHI1:MOV A,29H ;显示预设定的速度值 DA AANL A,#0FHMOV DPTR,
15、#TABLEMOVC A,A+DPTR;查表MOV P0,A;送显示MOV A,29H DA ASWAP A ANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P2,A LJMP GOSW1: MOV A,#0AH;显示ErMOV DPTR,#TABLEMOVC A,A+DPTRMOV P2,A MOV A,#0BHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,A GO: POP PSW POP ACC RETONDES: CJNE A,#01,DO1 ;如果所测脉冲周期超过200ms,则速度显示0 MOV A,#01H ;在100ms
16、200ms内 LJMP MOON1 DO1: MOV A,#00HMOON1: MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,#00H MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,APOP PSW POP ACCRETCHUFA: PUSH ACC ;4四字节除二字节除法程序PUSH PSWMOV R2,#00HMOV R3,#01HMOV R4,#0F8HMOV R5,#48HMOV R6,24H ;所计的时间高位 MOV R7,23H ;所计的时间低位 CLR CMOV A,R3SUBB A,R7MOV A,R2SU
17、BB A,R6 JC DVD1SETB OV RETDVD1: MOV B,#10HDVD2: CLR CMOV A,R5 RLC AMOV R5,AMOV A,R4 RLC AMOV R4,AMOV A,R3 RLC AMOV R3,AMOV A,R2 RLC AMOV R2,AMOV F0,C ; CLR C MOV A,R3SUBB A,R7MOV R1,AMOV A,R2 SUBB A,R6 ANL C,/F0 JC DVD3MOV R2,AMOV A,R1MOV R3,A INC R5DVD3: DJNZ B,DVD2MOV A,R4MOV R2,AMOV A,R5MOV R3,A
18、CLR OVMOV 25H,R2MOV 26H,R3 POP PSW POP ACCSETB P1.7 NOP RETTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 80H,90H,86H,70H;字码表;INT0中断服务程序,扫描键盘TOINT0: PUSH PSW PUSH ACCMOV A,#0FEH ;LED指示 MOV P1,AMOV 28H,AJNB P3.0,$ ;等待p3.0键弹起ST1: JNB P3.0,CHULI ;若再次按下p3.0则功能返回RETU1: JNB P3.6,KEY1RETU2: LJMP ST1CHULI
19、: LJMP EXITKEY1: LCALL LEDPLAY1JNB P3.6,$JIANCE1: JNB P3.0,FUNK JNB P3.1,YOUPLAYNEXTKEY1: JNB P3.6,ZUOPLAYNEXTKEY2: LJMP JIANCE1;选择功能,等待p3.0按下FUNK: MOV A,28H CJNE A,#0FEH,WORK1WORK0: LJMPEXIT ;确认返回WORK1: CJNE A,#11111101B,WORK2 LJMP FUNK1WORK2: CJNE A,#11111011B,WORK3 LJMP FUNK2WORK3: CJNE A,#111101
20、11B,WORK0 LJMP FUNK3 LEDPLAY1: MOV A,28H ;LED显示左移 1 RL A CJNE A,#111101111B,XIANSHI1 MOV A,#0FEHXIANSHI1: MOV P1,A MOV 28H,A RETLEDPLAY2: MOV A,28H ;LED显示右移 RR A CJNE A,#011111111B,XIANSHI2 MOV A,#0F7HXIANSHI2: MOV P1,A MOV 28H,A RETYOUPLAY: LCALL LEDPLAY2 JNB P3.1,$ LJMP NEXTKEY1ZUOPLAY: LCALL LEDP
21、LAY1 JNB P3.1,$ LJMP NEXTKEY2 FUNK1: CPL 7FH ;转换显示模式 2LJMP EXITFUNK2: LCALL SSXIANSHI;3 JNB P3.0,$ ;等待p3.0键弹起 ,设定速度值(+/-)JIANCE2: JNB P3.1,UPSPEED;按p3.1速度加1XIAGE1: JNB P3.6,DOWNSPEED ;按p3.6速度减1XIAGE2: JNB P3.0,EXIT LJMP JIANCE2 FUNK3: CPL P3.5 ;电机换向 4 LJMP EXIT UPSPEED: MOV A,29H; 5 CJNE A,#63H,JIAY
22、I LJMP TAIDAJIAYI: INC 29H TAIDA: LCALL SSXIANSHI JNB P3.1,$ ;等待p3.1键弹起 LJMP XIAGE1 DOWNSPEED: MOV A,29H;6 CJNE A,#63H,JIANYI LJMP TAIXIAOJIANYI: DEC 29H TAIXIAO: LCALL SSXIANSHI JNB P3.6,$ ;等待p3.6键弹起 LJMP XIAGE2 SSXIANSHI: MOV A,29H ;显示预设定的速度值 7 DA A ANL A,#0FH MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,
23、A MOV A,29H DA ASWAP A ANL A,#0FH MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,A RETEXIT: MOV A,#0FFH;8 MOV P1,A;熄灭指示灯 POP ACC POP PSW RETI ;比较调速子程序COMPLETE: MOV A,26H CJNE A,29H,FANHUI;如果采样速度设定速度则转JNC JIANSU;如果采样速度设定速度则转减速处理 CLR C;加速处理,先清借位 MOV A,27H;读入计时值低位 SUBB A,#2AH;计时增加50*2us MOV R2,A;预存计时值低位 MOV A,28
24、H ;读入计时值高位 SUBB A,#00H;减去借位 JC FANHUI ;如果溢出则转 MOV 28H,A;没溢出则录入新计时初值 MOV 27H,R2 JIANSU: CLR C;减速处理,先清进位MOV A,27H;读入计时值低位ADD A,#2AH ;计时减少50*2us MOV R2,A;预存计时值低位MOV A,28H;读入计时值高位 ADDC A,#00H;加上进位 JC FANHUI;如果溢出则转 MOV 28H,A ;没溢出则录入新计时初值 MOV 27H,R2 FANHUI: RET;装入计时初值,实现PWM调制T0INT:PUSH ACCPUSH PSW JB 7EH,
25、PWMLOW ;如果7EH为1则转至pwm低电平定时设置REGIVE1:SETB P3.4;设pwm口高电平输出设pwm口高电平输出MOV TL0,27H;装入pwm高电平时的计时初值MOV TH0,28H SETB 7EH;改pwm高低电平标志(高) POP PSW POP ACCRETIPWMLOW:CLR C MOV A,#0FFH ;放计时溢出值到累加器 SUBB A,27H;减去pwm上次高电平时的计时值低位 MOV R2,A;预存计时值低位 MOV A,#0FFH ;放计时溢出值到累加器 SUBB A,28H;减去pwm上次高电平时的计时值高位 MOV 2BH,A ;录入新计时初值
26、 MOV 2AH,R2 CLR P3.4 ;设pwm口高低平输出REGIVE2:MOV TL0,2AH;装入pwm低电平时的计时初值MOV TH0,2BH CLR 7EH;改pwm高低电平标志(低) POP PSW POP ACCRETIEND结语以上均是我这两个星期以来的心血,希望大家抽空看看,我会找时间跟大家讲讲。以上的程序在这文件夹下的记事本里也有,是.asm文件。有编译软件的同学可以试着单步调试一下,一边看看存储空间上的随动数据是否符合功能上的要求。做调试时最好把程序拆分开来进行调试,把各部分程序调试好后再整合起来调。实际上我编程时已经把各部分模块分开来编了,而且全部程序我都调试过了,
27、所以大家可以对整体综合的程序进行调试就行了。没有编译软件的同学可以到我这里拷。我在这里强调一点:大家在做软件设计的时候一定要自上以下的设计思想,构思好主体流程(把它画出来),通过反复论证后(符合逻辑和硬件功能),再细化各部分的具体要求,根据要求分别编写各个模块的程序。在整合修整(看是否有数据的地址空间交叉,是否有重复的定义,是否有初始化等)。其中第一步最重要,它的模式(一定程度上)决定于硬件的连接方式,又会极大的影响到后继的工作。当软件方案确定下来后,在后继的编程工作中就很难再去改软件方案的主体结构,除非重新再来做软件部分的设计。交流一下学习的心得:大家在读别人程序的时候是不是会觉得:小小的功
28、能怎么要写的这么长?有时我也会这样,觉得有点不耐烦。甚至会觉得如果让我来做绝对要简洁的多,呵呵.确实是这样,对于一个实用系统或者是某功能,其物理上的基本原理或许不是很复杂,但要具体细化在工程上或者某个技术上时,恐怕还要有很多工作要做。不仅是理论上,功能上的,逻辑上的,在实际的工程应用时还必须考虑到硬件因素,工作环境,和各种各样动的静的干扰,硬件速度,误差等等各方面的因素。工程上的问题不是纯理论,也不是纯感观的。更不是凭空想来的。着手一个工程问题,它可能要考虑到很多方面的因素和问题,可能会涉及到很多方面的知识;但我们要明确:我们主要需要解决哪些部分的问题。一个程序写的长或短,主要决定于你的功能安排和具体算法,有时候程序写的罗嗦一些可能是为了系统更稳定可靠一些,或者为了增加可读性容易查错和交流,或者是为了使系统功能更完善更符合逻辑一些。总之一个程序很长并不代表你的算法不好,相反,只要时间允许(效率),空间充足(资源),硬件够快(技术),在软件设计这一块你可以把应用系统搞得更完善可靠,更具人性和柔性,更强的适应性,一方面要充分利用硬件资源,另一方面要尽量节省复杂昂贵的硬件设备。还有一点:我们无论学习什么,一定要戒浮躁;特别对于我们工科学生来说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市第四中学七年级英语第8单元阅读理解测试卷及答案
- 2026年黑龙江省哈尔滨市实验中学七年级英语单元测试卷及答案
- 2025年智能制造工程师招聘题库及答案
- 2026版交安A、B、C证考试题库含答案全考点
- 科技成果转化合作协议
- 吻合口瘘的护理查房
- 消化道出血患者饮食护理
- 腰椎间盘突出症护理诊断与措施
- 代码整洁之道第一版 中文版(Clean Code 第 1 版)
- 2026工业视觉检测系统准确率提升算法与行业标准演进
- (2025版)中国成人患者围手术期液体治疗临床实践指南课件
- 粮仓防水施工方案
- 2025年派出所民警个人年度工作小结(全文)
- 海康威视iVMS-8700智能建筑综合管理平台 软件技术白皮书
- 首届全国行业职业技能竞赛(电力交易员)大赛考试题(附答案)
- 水上桩施工安全教育培训课件
- 影像科院感知识培训课件
- 2025年国家基本公共卫生服务项目培训试题(附答案)
- 医务人员仪容仪表及行为规范
- 高中常用成语积累800个
- 公司与个人合作协议范本新
评论
0/150
提交评论