直流电机PID控制

合集下载

直流电机基于PID控制的PWM调速系统

直流电机基于PID控制的PWM调速系统

调速原理对于星形连接的三相无刷直流电机,在理想条件下,任何时刻只有两相定子绕组通电。

令加在两相通电绕组上的平均电压为Vd,则电压平衡方程式为[31]:(3.1)可以得到转速为:(3.2)式中:Em为电机各相反电动势;Im为各相相电流;n为无刷直流电机转速;R为回路等效电阻,包括电机两相电阻和管压降的等效电阻。

由式(3.2)可知,无刷直流电机的转速调节可以通过改变外施平均电压Vd来实现。

3-4-2电枢电压的调节方法改变电枢电压是直流调速的主要方法。

本系统采用PWM(脉宽调制)调速方式,通过调节逆变器功率器件的PWM触发信号的占空比来改变外施的平均电压Vd,从而实现无刷直流电机的调速。

PWM技术可分为单极性PWM控制和双极性PWM控制。

单极性PWM控制的控制信号如图3.4所示,在每个60°电角度的区域内,一个功率开关器件一直处于开通状态,另一个处于PWM状态;双极性PWM控制的控制信号如图3.5所示,在每个60°电角度区域内,两个工作的功率管器件或者都开通,或者都关断。

图3.4单极性PWM控制各触发信号图3.5双极性PWM控制各触发信号Fig.3.4Trigger signal of single polarity PWM Fig.3.5Trigger signal of double polarity PWM一般情况来说,采用单极性PWM控制的电流波动最大值只有采用双极性PWM控制的电流波动最大值的一半[32][33],因此为了减小电流脉动和功率管的开关损耗,本电机控制系统采用单极性的PWM控制技术。

3-4-3 PWM波的产生在传统的单片机控制系统中,PWM波的产生需要专门的发生电路和时间延时(死区)电路,增加了CPU的开销,并降低了系统的稳定性。

而TMS320F2812的PWM电路设计可以减少产生PWM波形的CPU开销和减少用户的工作量,同时能尽量减小功率开关器件的损耗,降低电动机转矩脉动性。

变论域模糊PID控制在直流电机中的应用

变论域模糊PID控制在直流电机中的应用

变论域模糊PID控制在直流电机中的应用随着科技的不断进步,直流电机在工业生产中的应用越来越广泛。

然而,直流电机在运行过程中存在着许多问题,如速度波动、负载变化等。

为了解决这些问题,控制算法也在不断改进和完善。

其中,变论域模糊PID控制被广泛应用于直流电机控制系统中,以提高系统的稳定性和性能。

变论域模糊PID控制是一种基于模糊逻辑的控制算法,它能够根据实时的系统状态调整控制器的参数,从而实现对系统的精确控制。

与传统的PID控制相比,变论域模糊PID控制具有更好的鲁棒性和自适应性。

在直流电机控制中,变论域模糊PID控制可以通过模糊推理和模糊规则来实现系统的自适应调节。

首先,通过采集电机的速度、电流和位置等参数,建立模糊控制器的输入输出关系。

然后,利用模糊规则和模糊推理来对控制器进行优化,使其能够根据实时的系统状态调整参数,从而实现对电机的精确控制。

变论域模糊PID控制在直流电机中的应用有以下几个优点。

首先,它具有良好的鲁棒性,能够有效抵抗外界干扰和系统参数变化带来的影响。

其次,它能够根据实时的系统状态调整参数,实现对电机的自适应控制,提高系统的稳定性和性能。

此外,它还能够减少系统的震荡和超调现象,提高系统的响应速度和精度。

然而,变论域模糊PID控制也存在一些问题。

首先,模糊控制的设计和参数调整相对较为复杂,需要较高的专业知识和经验。

其次,模糊控制器的规则库和模糊推理需要大量的计算资源和存储空间。

此外,模糊控制器的性能很大程度上取决于模糊规则的设计和参数的选择,需要进行大量的试验和优化。

综上所述,变论域模糊PID控制在直流电机中的应用能够有效提高系统的稳定性和性能。

然而,它的设计和参数调整需要一定的专业知识和经验。

今后,我们需要进一步研究和优化变论域模糊PID控制算法,以适应不同的工业应用场景,并解决其存在的问题,推动直流电机控制技术的发展。

直流电机PID控制

直流电机PID控制

目录1. .................................................................................................................................................................... 设计题目.. (1)2. .................................................................................................................................................................... 设计内容.. (1)3. .................................................................................................................................................................... 方案总体设计与论证. (1)4. .................................................................................................................................................................... 硬件电路设计. (2)4.1 最小系统设计 (2)4.2 传感器模块 (2)4.3 负载模块 (3)4.4 键盘模块 (4)4.5 显示模块 (4)5. .................................................................................................................................................................... 软件设计.. (5)5.1 主函数部分 (5)5.2 中断部分 (6)5.3 显示刷新部分 (6)5.4 按键扫描部分 (7)5.5 按键功能实现部分 (8)5.6 更新输出控制信号部分 (9)5.7 PID 控制部分 (10)5.8 LCD显示部分 (11)5.9 延时部分 (11)6. .................................................................................................................................................................. 系统调试.. (12)7. .................................................................................................................................................................. 结束语 .. (12)8 .参考文献 (12)附录一系统硬件原理图 (13)附录二源程序代码 (14)摘要本文章介绍了由51单片机以及直流电机、三极管驱动电路、矩阵键盘、LCD和红外传感器构成的转速闭环控制系统。

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计一、引言直流电机调速系统是现代工业自动化系统中最常用的电机调速方式之一、它具有调速范围广、响应快、控制精度高等优点,被广泛应用于电力、机械、石化、轻工等领域。

本文将介绍基于STM32单片机的直流电机PID调速系统的设计。

二、系统设计直流电机PID调速系统主要由STM32单片机、直流电机、编码器、输入和输出接口电路等组成。

系统的设计流程如下:1.采集反馈信号设计中应通过编码器等方式采集到反馈信号,反应电机的转速。

采集到的脉冲信号经过处理后输入给STM32单片机。

2.设计PID算法PID调节器是一种经典的控制算法,由比例(P)、积分(I)和微分(D)三个部分组成,可以根据实际情况调整各个参数的大小。

PID算法的目标是根据反馈信号使电机达到期望的转速。

3.控制电机速度根据PID算法计算出的偏差值,通过调节电机的占空比,实现对电机速度的控制。

当偏差较大时,增大占空比以加速电机;当偏差较小时,减小占空比以减速电机。

4.界面设计与控制设计一个人机交互界面,通过该界面可以设置电机的期望转速以及其他参数。

通过输入接口电路将相应的信号输入给STM32单片机,实现对电机的远程控制。

5.系统保护在电机工作过程中,需要保护电机,防止出现过流、超速等问题。

设计一个保护系统,能够监测电机的工作状态,在出现异常情况时及时停止电机工作,避免损坏。

6.调试与优化对系统进行调试,通过实验和测试优化PID参数,以获得更好的控制效果。

三、系统实现系统实现时,首先需要进行硬件设计,包括STM32单片机的选型与外围电路设计,以及输入输出接口电路的设计。

根据实际情况选择合适的编码器和直流电机。

接着,编写相应的软件代码。

根据系统设计流程中所述,编写STM32单片机的控制程序,包括采集反馈信号、PID算法实现、控制电机速度等。

最后,进行系统调试与优化。

根据系统的实际情况,调试PID参数,通过实验和测试验证系统的性能,并进行优化,以实现较好的控制效果。

直流电机转速PID控制课程设计报告

直流电机转速PID控制课程设计报告

直流电机转速PID控制系统设计学院:专业班级:姓名:学号:指导老师:目录第一章PID简介 (1)第二章直流电机工作原理 (6)2.1 工作原理 (6)2.2、直流电机PID控制原理方框图 (7)第三章控制系统方案选择 (10)3.1 系统设计要求 (10)3.2 系统模块设计 (12)第四章硬件设计与实现 (17)4.1 硬件设计 (17)4.2系统面板图 (24)第五章流程设计 (26)5.1 软件设计流程图 (26)第六章程序说明 (30)6.1 直流电机部分程序 (30)6.2 温度检测部分程序 (37)第七章说明及调试 (46)7.1 调试过程 (46)7.2 运行结果 (47)第八章课程设计体会 (49)第一章 PID简介PID (比例积分微分,英文全称为Proportion Integration Differentiation)控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。

当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。

即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。

PID控制,实际中也有PI和PD控制。

PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。

PID控制器的参数整定是控制系统设计的核心内容。

它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。

PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。

它主要是依据系统的数学模型,经过理论计算确定控制器参数。

这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。

二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。

基于PID算法的电机控制研究

基于PID算法的电机控制研究

基于PID算法的电机控制研究一、绪论电机的控制一直是工业自动化的一个重要领域,而在电机控制中,PID算法(比例积分微分控制)是一种常用的方法。

PID算法是一种反馈控制算法,通过反馈信号来调整控制输出,使系统的输出达到期望值,因此在电机控制中得到了广泛应用。

本文将对PID算法在电机控制中的应用进行研究。

二、PID算法原理PID算法在控制系统中起着非常重要的作用,它是一种经典的控制方法,具有以下三个控制系数:比例系数、积分系数和微分系数。

其中,比例系数控制当前误差量,积分系数控制过去误差量的积累,微分系数控制误差量的变化率,具体公式如下:$p(t) = K_p e(t)$$i(t) = K_i\int_{0}^t e(\tau) d\tau$$d(t) = K_d\frac{d e(t)}{d t}$其中,$e(t)$表示当前误差量,$p(t)$表示比例控制器的输出,$i(t)$表示积分控制器的输出,$d(t)$表示微分控制器的输出,$K_p$、$K_i$和$K_d$分别为比例系数、积分系数和微分系数。

通过调整这三个控制系数的大小,可以达到对系统的控制,从而实现对电机的控制。

三、PID算法在电机控制中的应用PID算法在电机控制中的应用非常广泛,一般用于直流电机、步进电机等电机的速度和位置控制。

1. 直流电机控制直流电机控制一般采用PWM调速,在此基础上使用PID算法进行电机调速控制。

通过测量电机的旋转速度和所需速度之间的误差量,来调整PID算法中的比例系数、积分系数和微分系数,从而实现对电机的控制。

2. 步进电机控制步进电机控制可以分为开环控制和闭环控制两种方式,而PID 算法主要用于闭环控制。

通过测量步进电机驱动器的输出电流和所需电流之间的误差量,来调整PID算法中的比例系数、积分系数和微分系数,从而实现对步进电机的控制。

四、PID算法在电机控制中的优缺点1. 优点a. 反应速度快,动态性能好。

b. 稳态误差小,能够准确控制电机的位置、速度等参数。

直流电机转速的pid控制

直流电机转速的pid控制

接口与计算机控制课程设计指导书任务书一、课程设计题目直流电机闭环调速控制系统设计二、设计任务(一)、设计内容:以实验室实验装置为设计对象,从中选择出合适的部分,构成一个直流电机恒转速控制系统,具有如下功能:1、转速设定(选其一)1)可以通过按键设定直流电机转速(转/ 分钟,r/min);默认转速800r/min。

(测控091选择该项)2)可以通过电位器设定转速;(测控092选择该项)2、可以实时显示电机转速,同时显示设定值(各用三位显示);3、运行过程中改变负载可以维持设定的转速稳定后保持不变。

(稳态误差小于等于设定值的5%)。

(用手按一下电机可模拟负载)4、开始时只显示设定值,采集值显示为0,按运行键后显示实时采集值与设定值,左边三位是设定值,右边三位是实时值;(也可以采用液晶显示方式)5、设置停止运行键,控制直流电机停止运行;6、其它扩展发挥功能。

(二)、具体要求:1、根据功能要求从实验装置上选择合适电路构成系统,用protel软件画出原理图,设计控制系统结构图,分析系统工作过程。

2、根据实验装置具体情况确定接线方法,从而确定各端口的口地址(D/A、键盘、显示等);3、采用PID算法作为恒转速控制算法,对PID算法加以分析说明;4、按照系统工作过程要求编制程序,画出流程图与编写具体程序;5、调试运行,记录运行结果;6、书写课程设计报告,符合学院有关课程报告的要求。

(三)、程序调试建议:1、先通过简单程序验证硬件工作正常(D/A输出,带负载能力,显示器正常等等);不正常时及时与实验室老师联系更换器件。

2、调试测速显示子程序;3、调试参数设置程序;4、调试控制算法程序;5、调试综合程序四、参考资料见附录五、时间安排1、第17周到第18周,共2周时间。

2、周一布置任务。

3、从第18周周三开始验收,交课程设计报告。

附录A 部分硬件原理图1.数码管显示和行列式键盘电路2、模数变换电路3、数模变换电路4、直流电机驱动电路5、步进电机驱动电路6、片选译码电路7、RAM电路8、喇叭驱动电路附录B 部分参考程序;----------------------------------------------------------------------------------------------------------------汇编程序1、D/A2、A/D 转换3、; D/A 转换4、直流电机控制5、键盘扫描显示;6、八段数码管显示;---------------------------------------------------------------------------------------------------------------- CS0832 equ 0a000h0000 90A000 mov dptr, #CS08320003 7400 mov a, #00005 F0 movx @dptr, a0006 7440 mov a, #40h0008 F0 movx @dptr, a0009 7480 mov a, #80h000B F0 movx @dptr, a000C 74C0 mov a, #0c0h000E F0 movx @dptr, a000F 74FF mov a, #0ffh0011 F0 movx @dptr, a0012 020012 ljmp $End;----------------------------------------------------------------------------------------------------------; A/D 转换mode equ 082h ; 方式0,PA,PC 输出,PB 输入CS0809 equ 8000hPortA equ 9000h ; Port APortB equ 9001h ; Port BPortC equ 9002h ; Port CCAddr equ 9003h ; 控制字地址org 00000 909003 mov dptr,#CAddr0003 7482 mov a,#mode0005 F0 movx @dptr,a0006 908000 mov dptr, #CS08090009 7400 mov a, #0000B F0 movx @dptr, a ; 起动A/D000C 7440 mov a, #40h000E D5E0FD djnz ACC, $ ; 延时> 100us0011 E0 movx a, @dptr ; 读入结果0012 7F64 mov r7,#100dly:0014 909000 mov dptr,#PortA0017 F0 movx @dptr,a0018 DFFA djnz r7,dly ;延时001A 020000 ljmp 0end;---------------------------------------------------------------------------------------------------------- ;八段数码管显示OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;0000 020041 ljmp StartLEDMAP: ; 八段管显示码0003 3F065B0006 4F666D0009 7D07 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h000B 7F6F77000E 7C395E0011 7971 db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序0013 7F00 mov r7, #0DelayLoop:0015 DFFE djnz r7, DelayLoop0017 DEFC djnz r6, DelayLoop0019 22 retDisplayLED:001A 7860 mov r0, #LEDBuf001C 7906 mov r1, #6 ; 共6个八段管001E 7A20 mov r2, #00100000b ; 从左边开始显示Loop:0020 908002 mov dptr, #OUTBIT0023 7400 mov a, #00025 F0 movx @dptr, a ; 关所有八段管0026 E6 mov a, @r00027 908004 mov dptr, #OUTSEG002A F0 movx @dptr,a002B 908002 mov dptr, #OUTBIT002E EA mov a, r2002F F0 movx @dptr, a ; 显示一位八段管0030 7E01 mov r6, #010032 1113 call Delay0034 EA mov a, r2 ; 显示下一位0035 03 rr a0036 FA mov r2, a0037 08 inc r00038 D9E6 djnz r1, Loop003A 908002 mov dptr, #OUTBIT003D 7400 mov a, #0003F F0 movx @dptr, a ; 关所有八段管0040 22 retStart:0041 758140 mov sp, #40h0044 757000 mov Num, #0MLoop:0047 0570 inc Num0049 E570 mov a, Num004B F5F0 mov b, a004D 7860 mov r0, #LEDBufFillBuf:004F E5F0 mov a, b0051 540F anl a, #0fh0053 900003 mov dptr, #LEDMap0056 93 movc a, @a+dptr ; 数字转换成显示码0057 F6 mov @r0,a ; 显示在码填入显示缓冲0058 08 inc r00059 05F0 inc b005B B866F1 cjne r0, #LEDBuf+6, FillBuf005E 75751E mov DelayT,#30DispAgain:0061 111A call DisplayLED ; 显示0063 D575FB djnz DelayT,DispAgain0066 020047 ljmp MLoopEnd;---------------------------------------------------------------------------------------------------------- ; 硬件键盘扫描显示OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲0000 0200A3 ljmp StartLEDMAP: ; 八段管显示码0003 3F065B0006 4F666D0009 7D07 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h000B 7F6F77000E 7C395E0011 7971 db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序0013 7F00 mov r7, #0DelayLoop:0015 DFFE djnz r7, DelayLoop0017 DEFC djnz r6, DelayLoop0019 22 retDisplayLED:001A 7860 mov r0, #LEDBuf001C 7906 mov r1, #6 ; 共6个八段管001E 7A20 mov r2, #00100000b ; 从左边开始显示Loop:0020 908002 mov dptr, #OUTBIT0023 7400 mov a, #00025 F0 movx @dptr, a ; 关所有八段管0026 E6 mov a, @r00027 908004 mov dptr, #OUTSEG002A F0 movx @dptr, a002B 908002 mov dptr, #OUTBIT002E EA mov a, r2002F F0 movx @dptr, a ; 显示一位八段管0030 7E01 mov r6, #10032 1113 call Delay0034 EA mov a, r2 ; 显示下一位0035 03 rr a0036 FA mov r2, a0037 08 inc r00038 D9E6 djnz r1, Loop003A 22 retTestKey:003B 908002 mov dptr, #OUTBIT003E 7400 mov a, #00040 F0 movx @dptr, a ; 输出线置为00041 908001 mov dptr, #IN0044 E0 movx a, @dptr ; 读入键状态0045 F4 cpl a0046 540F anl a, #0fh ; 高四位不用0048 22 retKeyTable: ; 键码定义0049 161514004C FF db 16h, 15h, 14h, 0ffh004D 1312110050 10 db 13h, 12h, 11h, 10h0051 0D0C0B0054 0A db 0dh, 0ch, 0bh, 0ah0055 0E03060058 09 db 0eh, 03h, 06h, 09h0059 0F0205005C 08 db 0fh, 02h, 05h, 08h005D 0001040060 07 db 00h, 01h, 04h, 07hGetKey:0061 908002 mov dptr, #OUTBIT0064 8583A0 mov P2, dph0067 7801 mov r0, #Low(IN)0069 7920 mov r1, #00100000b006B 7A06 mov r2, #6KLoop:006D E9 mov a, r1 ; 找出键所在列006E F4 cpl a006F F0 movx @dptr, a0070 F4 cpl a0071 03 rr a0072 F9 mov r1, a ; 下一列0073 E2 movx a, @r00074 F4 cpl a0075 540F anl a, #0fh0077 7006 jnz Goon1 ; 该列有键入0079 DAF2 djnz r2, KLoop007B 7AFF mov r2, #0ffh ; 没有键按下, 返回0ffh 007D 800F sjmp ExitGoon1:007F F9 mov r1, a ; 键值= 列X 4 + 行0080 EA mov a, r20081 14 dec a0082 23 rl a0083 23 rl a0084 FA mov r2, a ; r2 = (r2-1)*40085 E9 mov a, r1 ; r1 中为读入的行值0086 7904 mov r1, #4LoopC:0088 13 rrc a ; 移位找出所在行0089 4003 jc Exit008B 0A inc r2 ; r2 = r2+ 行值008C D9FA djnz r1, LoopCExit:008E EA mov a, r2 ; 取出键码008F 900049 mov dptr, #KeyTable0092 93 movc a, @a+dptr0093 FA mov r2, aWaitRelease:0094 908002 mov dptr, #OUTBIT ; 等键释放0097 E4 clr a0098 F0 movx @dptr, a0099 7E0A mov r6, #10009B 1113 call Delay009D 113B call TestKey009F 70F3 jnz WaitRelease00A1 EA mov a, r200A2 22 retStart:00A3 758140 mov sp, #40h00A6 7560FF mov LEDBuf+0, #0ffh ; 显示8.8.8.8.00A9 7561FF mov LEDBuf+1, #0ffh00AC 7562FF mov LEDBuf+2, #0ffh00AF 7563FF mov LEDBuf+3, #0ffh00B2 756400 mov LEDBuf+4, #000B5 756500 mov LEDBuf+5, #0MLoop:00B8 111A call DisplayLED ; 显示00BA 113B call TestKey ; 有键入?00BC 60FA jz MLoop ; 无键入, 继续显示00BE 1161 call GetKey ; 读入键码00C0 540F anl a, #0fh ; 显示键码00C2 900003 mov dptr, #LEDMap00C5 93 movc a, @a+dptr00C6 F565 mov LEDBuf+5, a00C8 0200B8 ljmp MLoopend;---------------------------------------------------------------------------------------------------------- ;直流电机控制mode equ 082hSTATUS equ 08001hPORTA equ 08000hCTL equ 08003hCS0832 equ 09000hDC_P equ 0count0 equ 40count1 equ 41org 0h0000 020039 jmp startdelay:0003 7D0A mov r5,#100005 7E00 mov r6,#00007 7F00 mov r7,#0ddd:0009 DFFE djnz r7,ddd000B DEFC djnz r6,ddd000D DDFA djnz r5,ddd000F 22 retread:0010 758901 mov TMOD, #01 ; 16 位计时0013 C28C clr TR00015 758C00 mov TH0, #00018 758A00 mov TL0, #0001B 908001 mov dptr, #STATUS001E E0 r_0: movx a,@dptr001F 30E0FC jnb acc.DC_P, r_0 ; 等待低电平完0022 E0 r_1: movx a,@dptr0023 20E0FC jb acc.DC_P, r_1 ; 等待高电平完0026 D28C setb TR00028 E0 r_2: movx a,@dptr0029 30E0FC jnb acc.DC_P, r_2 ; 等待低电平完002C E0 r_3: movx a,@dptr002D 20E0FC jb acc.DC_P, r_3 ; 等待高电平完0030 C28C clr TR00032 858C28 mov count0,TH00035 858A29 mov count1,TL00038 22 retstart:0039 909000 mov dptr, #CS0832003C 74FF mov a, #0ffh003E F0 movx @dptr, a003F 1103 call delay ; 等待电机运转稳定0041 1110 call read ; 读取时间0043 909000 mov dptr, #CS0832 ; 设断点,观察上次时间0046 74C0 mov a, #0c0h0048 F0 movx @dptr, a0049 1103 call delay ; 等待电机运转稳定004B 1110 call read004D 909000 mov dptr, #CS0832 ; 设断点,观察上次时间0050 7440 mov a, #040h ; 电机反转0052 F0 movx @dptr, a0053 1103 call delay ; 等待电机运转稳定0055 1110 call read ; 读取时间0057 909000 mov dptr, #CS0832 ; 设断点,观察上次时间005A 7400 mov a, #00h ; 电机反转加速005C F0 movx @dptr, a005D 1103 call delay ; 等待电机运转稳定005F 1110 call read0061 020061 ljmp $ ; 设断点,观察上次时间End;----------------------------------------------------------------------------------------------------------------C51程序1、D/A2、A/D 转换3、; D/A 转换4、直流电机控制5、键盘扫描显示;6、八段数码管显示;----------------------------------------------------------------------------------------------------------------// D/A 转换实验xdata unsigned char CS0832 _at_ 0x8000;void Write0832(unsigned char b){CS0832 = b;}void main(){Write0832(0);Write0832(0x80);Write0832(0xff);while(1);}// A/D 转换实验#define mode 0x82xdata unsigned char CTL _at_ 0x9003;xdata unsigned char PA _at_ 0x9000;xdata unsigned char CS0809 _at_ 0x8000;unsigned char Read0809(){unsigned char i;CS0809 = 0; // 起动A/Dfor (i=0; i<0x20; i++) ; // 延时> 100usreturn(CS0809); // 读入结果}main(){unsigned char b;CTL = mode;while(1){b = Read0809();PA = b//八段数码管显示实验#define LEDLen 6xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口xdata unsigned char IN _at_ 0x8001; // 键盘读入口unsigned char LEDBuf[LEDLen]; // 显示缓冲code unsigned char LEDMAP[] = { // 八段管显示码0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;Pos = 0x20; // 从左边开始显示for (i = 0; i < LEDLen; i++) {OUTBIT = 0; // 关所有八段管LED = LEDBuf[i];OUTSEG = LED;OUTBIT = Pos; // 显示一位八段管Delay(1);Pos >>= 1; // 显示下一位}OUTBIT = 0; // 关所有八段管}void main(){unsigned char i = 0;unsigned char j;while(1) {LEDBuf[0] = LEDMAP[ i & 0x0f];LEDBuf[1] = LEDMAP[(i+1) & 0x0f];LEDBuf[2] = LEDMAP[(i+2) & 0x0f];LEDBuf[3] = LEDMAP[(i+3) & 0x0f];LEDBuf[4] = LEDMAP[(i+4) & 0x0f];LEDBuf[5] = LEDMAP[(i+5) & 0x0f];i++;for(j=0; j<30; j++)DisplayLED(); // 延时}}//键盘扫描显示#define LEDLen 6xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口xdata unsigned char IN _at_ 0x8001; // 键盘读入口unsigned char LEDBuf[LEDLen]; // 显示缓冲code unsigned char LEDMAP[] = { // 八段管显示码0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i;unsigned char Pos;unsigned char LED;Pos = 0x20; // 从左边开始显示for (i = 0; i < LEDLen; i++) {OUTBIT = 0; // 关所有八段管LED = LEDBuf[i];OUTSEG = LED;OUTBIT = Pos; // 显示一位八段管Delay(1);Pos >>= 1; // 显示下一位}}code unsigned char KeyTable[] = { // 键码定义0x16, 0x15, 0x14, 0xff,0x13, 0x12, 0x11, 0x10,0x0d, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08,0x00, 0x01, 0x04, 0x07};unsigned char TestKey(){OUTBIT = 0; // 输出线置为0return (~IN & 0x0f); // 读入键状态(高四位不用) }unsigned char GetKey(){unsigned char Pos;unsigned char i;unsigned char k;i = 6;Pos = 0x20; // 找出键所在列do {OUTBIT = ~ Pos;Pos >>= 1;k = ~IN & 0x0f;} while ((--i != 0) && (k == 0));// 键值= 列x 4 + 行if (k != 0) {i *= 4;if (k & 2)i += 1;else if (k & 4)i += 2;else if (k & 8)i += 3;OUTBIT = 0;do Delay(10); while (TestKey()); // 等键释放return(KeyTable[i]); // 取出键码} else return(0xff);}void main(){LEDBuf[0] = 0xff;LEDBuf[1] = 0xff;LEDBuf[2] = 0xff;LEDBuf[3] = 0xff;LEDBuf[4] = 0x00;LEDBuf[5] = 0x00;while (1) {DisplayLED();if (TestKey()) LEDBuf[5] = LEDMAP[GetKey() & 0x0f]; }}//直流电机控制#include <reg52.h>#define mode 0x82xdata unsigned char CTL _at_ 0x8003;xdata unsigned char status _at_ 0x8001;xdata unsigned char CS0832 _at_ 0x9000;unsigned int count;#define DC_P 1void delay(){unsigned int ddd;ddd = 50000; // 在6MHz 约延时1秒while(ddd--);}unsigned int read(){TMOD = 1; // 16位计时TR0 = 0;TH0 = 0;TL0 = 0;while(!(status & DC_P)); // 等待低电平完while(status & DC_P); // 等待高电平完TR0 = 1;while(!(status & DC_P)); // 等待低电平完while(status & DC_P); // 等待高电平完TR0 = 0;return (TH0*0x100+TL0);}void main(){CTL = mode;CS0832 = 0xff; // 产生电压控制电机delay(); // 等待电机运转稳定count = read(); // 读取时间CS0832 = 0xc0; // 产生电压控制电机delay(); // 等待电机运转稳定count = read(); // 读取时间while(1);}。

PID控制PWM调节直流电机速度(12v)

PID控制PWM调节直流电机速度(12v)

PID算法介绍:本次设计主要研究的是PID控制技术在运动控制领域中的应用,纵所周知运动控制系统最主要的控制对象是电机,在不同的生产过程中,电机的运行状态要满足生产要求,其中电机速度的控制在占有至关重要的作用,因此本次设计主要是利用PID 控制技术对直流电机转速的控制。

其设计思路为:以AT89S51单片机为控制核心,产生占空比受PID算法控制的PWM脉冲实现对直流电机转速的控制。

同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,构成转速闭环控制系统,达到转速无静差调节的目的。

在系统中采128×64LCD显示器作为显示部件,通过4×4键盘设置P、I、D、V四个参数和正反转控制,启动后通过显示部件了解电机当前的转速和运行时间。

因此该系统在硬件方面包括:电源模块、电机驱动模块、控制模块、速度检测模块、人机交互模块。

软件部分采用C语言进行程序设计,其优点为:可移植性强、算法容易实现、修改及调试方便、易读等。

本次设计系统的主要特点:(1)优化的软件算法,智能化的自动控制,误差补偿;(2)使用光电传感器将电机转速转换为脉冲频率,比较精确的反映出电机的转速,从而与设定值进行比较产生偏差,实现比例、积分、微分的控制,达到转速无静差调节的目的;(3)使用光电耦合器将主电路和控制电路利用光隔开,使系统更加安全可靠;(4)128×64LCD显示模块提供一个人机对话界面,并实时显示电机运行速度和运行时间;(5)利用Proteus软件进行系统整体仿真,从而进一步验证电路和程序的正确性,避免不必要的损失;(6)采用数字PID算法,利用软件实现控制,具有更改灵活,节约硬件等优点;(7)系统性能指标:超调量≤8%;调节时间≤4s;转速误差≤±1r/min。

1PID算法及PWM控制技术简介1.1PID算法控制算法是微机化控制系统的一个重要组成部分,整个系统的控制功能主要由控制算法来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要随着科学技术的发展,生产生活越来越离不开直流电机,特别是在工厂里面,直流电机更是频频出现,直流电机的必要性使直流电机的发展异常迅速,所以对直流电机的研究一直是人们研究的重点,直流电动机与交流电动机相比,直流电机具有很好的调速性能和启动性能。

它的调速范围宽,调速平滑等特点,可以实现频繁的启动和制动;所以在自动化生产系统中,它起着重要的作用,满足各种各样的运行要求。

但直流电机也有它明显的缺点。

一是它的结构复杂,消耗材料比较多,所以生产成本高;二是运行时由于有换向器的存在,容易产生火花,因而直流电机可靠性较差,维护也比较困难。

但是直流电机并不是一无是处,在一些对性能要求不严格的场合下面,直流电机仍然随处可见,特别是当我们找到解决直流电机的转速稳态误差的方法后,直流电机更加的让人们喜爱,再大工厂车间中,直流电机更是无处不在,虽然它有着许多小毛病,但是在某些要求控制性能很高的场合下必须用到直流电机,所以直流电动机的应用目前仍占有较大的比重。

也一直是人们研究的重点。

这里我们重点研究直流电机的工作原理以及直流电机的各种调速方法,以及有关涉及到直流电机的一些边缘知识,像PWM的结构及原理,PID控制的物理结构模型等等,在调速控制中,我们包含两个大的部分,一个是直流电机的开环控制,另一个是直流电机的闭环控制,在直流电机的闭环控制中,又分别介绍转速闭环控制和PID闭环控制,并且对直流电机的每个模型进行建模并仿真,观察其动态性能,分析研究直流电机的各个控制的优缺点,我们得到开环直流电机并不能满足我们对生产生活的要求,其最好的解决方法就是进行闭环控制〔PID〕,纵观直流电机的发展史,PID控制虽然有着比开环控制更好的启动型能和稳定性能,但是也还是满足不了社会对直流电机越来越苛刻的需求,所以,在直流电机的控制中,又出现了电流反馈的双闭环调节,这解决了PID控制中无法控制电流的尴尬情况,与PID控制相比较,有着电流反馈的直流电机启动性能更好,在负荷运行时候也更节能。

至此,直流电机的研究并没有结束,它随着社会的需要,研究也会越来越深入,我们会看到多种多样的控制方式。

关键词:直流电动机,转速控制,PID控制,Matlab仿真AbstractWith the development of science and technology, production and living is more and more inseparable from the DC motor, especially in a factory, DC motor is more frequent, the necessity of the DC motor to DC motor exceptionally rapid development, so the study of DC motor has always been a focus in the study of people, compared to DC motor and AC motor, DC motor has good speed regulation performance and startup performance. DC motor speed range is very wide, very smooth speed regulation characteristics, which can realize frequent step less quick start, brake and reverse; And DC motor overload capacity is big, can bear very frequent impact current; So in automated production systems, it shoulders the important role, meet all kinds of operation requirements. But DC motor has its obvious shortcomings: one is its manufacturing process is complex, consumption materials more, so the high cost of production, two it is to run time as a result of the existence of a commutator, easy to produce sparks, and DC motor reliability is poorer, maintenance is also more difficult. Thus the speed control performance requirements is not high in some area of DC motor has replaced by AC motor. But in some large range of speed and quickness demanding, good precision and control performance, the application of DC motor is still occupies a large proportion. So the DC motor has been a focus in the study of people.Here we focus on the working principle of DC motor and the DC motor speed control methods, as well as the knowledge of some edge of involved in DC motor, such as the structure and principle of PWM and PID control, and so on, the physical structure of the model in the speed regulation control, we include two parts, one is the open loop control of DC motor, the other is a closed loop control of DC motor, in the closed-loop control of DC motor, and respectively introduces the speed closed loop control and PID closed-loop control, and each model of DC motor for modeling and simulation, observe its dynamic performance, the advantages and disadvantages of analysis and study of DC motor control, we get the open loop DC motor doesn't meet our requirement for production and living, the best solution is to closed loop control (PID), throughout the history of DC motor, PID control with better than open loop control can start metal and stable performance, but also still can't satisfy the social demand for DC motor is more and more strict, so the control of DC motor, and the current feedback of double closed-loop adjustment, it solved the PID control, unable to control the current embarrassing situation, compared with PID control, has a current feedback DC motor startup performance better, the load operation time and more energy saving, so far, the study of DC motor is not over, with the need of the society, it also will be more and more thorough study, in the near future, we will see a wide variety of control mode.Keywords:DC motor, speed control, PID control, Matlab simulation目录摘要 (I)Abstract (II)1 绪论1.1 课题背景 (1)1.2 课题研究目的和意义 (1)1.3 课题研究的主要工作 (1)1.4 国内外研究现状 (2)2 直流电动机的工作原理及基本结构2.1 直流电机的结构 (3)2.2 直流电机的基本工作原理 (3)2.3 本章小结 (4)3 开环直流电机的调速方法3.1 PWM的构成及工作原理 (5)3.2 PWM的控制原理 (6)3.3 本章小结 (7)4 直流电机开环系统仿真4.1 Matlab简介 (8)4.2 直流电机的稳态模型 (8)4.4 本章小结 (11)5 直流电机的转速控制系统5.1 直流电机性能参数 (12)5.2 直流电机转速控制原理 (12)5.3 直流电机转速控制系统仿真 (16)5.4 本章小结 (18)6 直流电机PID控制6.1 PID控制简介 (19)6.2 比例〔P〕调节特性 (19)6.3 比例积分〔PI〕调节特性 (20)6.4 比例积分微分〔PID〕调节特性 (20)6.5 PID的动态数学模型 (21)6.7 本章小结 (25)7 总结与展望 (26)致谢 (27)参考文献....................................... 错误!未定义书签。

相关文档
最新文档