精华内容
下载资源
问答
  • 计算机控制技术4摘要.ppt
    2021-07-26 08:22:04

    计算机控制技术4摘要

    4.4 电机控制接口技术———直流电机控制 2 小功率直流电机的接口技术 (1)直流电机的工作原理: 当励磁电压和负载转矩恒定时,电枢的电压越高,电机的转速越快,当电枢的电压反向时,电机反转,电枢的电压为0,电机停转。 故:小功率直流电机可以通过控制电枢的电压来实现速度的调节。 4.4 电机控制接口技术———直流电机控制 (2)直流电机的速度调节原理: (2)直流电机的速度调节原理:通过改变电机电枢电压的接通时间与通电控制周期之比(占空比)来调节电机的输出转速——Pulse Width Modulation,PWM. 当电机通电时,转速增加,断电时,速度减少,改变通断时间,可以控制电机的转速。 4.4 电机控制接口技术——直流电机控制 采用SSR的直流电机调速电路 采用SSR的直流电机调速电路 自修4.3.3 PWM调速系统设计的内容 4.4 电机控制接口技术——脉宽调速 4 闭环脉宽调速系统 (1)转速测量传感器 1)测速发电机:将转子转速信号转换为电信号的装置。分为:直流测速发电机、交流测速发电机。 4.4 电机控制接口技术——脉宽调速 4 闭环脉宽调速系统 (2)数字式转速传感器:把转子转速直接转换为数字量的设备。有光电码盘、旋转编码器。 4.4 电机控制接口技术——脉宽调速 闭环系统的例子——电梯闭环控制系统 资料来源:双PWM 控制能量回馈电梯传动系统的设计,电气传动,2007 年,第37卷第8期  主电路  PWM驱动隔离电路 异常情况下电容的放电回路 当系统异常时(如电梯突然断电) ,电梯发电状态产生的电能有可能因不能及时回馈电网而超出直流母线侧电容的蓄能能力. 4.5 步进电机控制接口技术——步进电机 1 步进电机控制接口技术 步进电机原理 步进电机控制原理 步进电机接口及程序设计 步进电机步数和速度的确定 步进电机变速控制方法 4.5 步进电机控制接口技术——步进电机原理 1 步进电机原理 (1) 步进电机是一个数字/角度转换器,或串行数据/模拟量转换器。步进电机的结构与步进电机所含的相数有关。 三相步进电机的结构。 4.5 步进电机控制接口技术——步进电机原理 1 步进电机原理 (2) 步进电机的转子没有绕组,而是由40个均匀分布的矩形小齿,相邻两个齿之间的夹角为9?。当定子上某相绕组通电时,对应的磁极产生磁场,并与转子形成磁路。若此时定子与转子的小磁未对齐,在磁场的作用下转子转动一定的角度,使二者对齐。 4.5 步进电机控制接口技术——步进电机原理 1 步进电机原理 (3) 单三拍控制方式电极走一步: (1)初始位置A相的磁极中心与0齿对齐;A、B两相磁极相差120?,120/9不为整数,所有转子的齿不能与B相磁极对齐,仅13号齿与B相磁极中心线接近,夹角3 ?; (2)B相通电,A,C两相断开,B相磁极迫使转子的13齿与其中心线对齐,整个转子转动3 ?。 0 初始位置 A?B ? C ? A ? 9 ? 步进电机原理DEMO 4.5 步进电机控制接口技术——步进电机原理 1 步进电机原理 (4) 步距角: ——控制绕组的相数; ——状态系数;单三拍或双三拍为1; 单六拍或双六拍为2 ——转子齿数; 单三拍或双三拍的步距角: 4.5 步进电机控制接口技术——步进电机控制原理 2 步进电机控制原理 (1) 典型步进电机控制系统 专用模块或电路 4.5 步进电机控制接口技术——步进电机控制原理 2 步进电机控制原理 (2) 计算机控制步进电机原理 计算机控制步进电机的特点: 用软件代替步进控制器,产生脉冲序列并实现方向控制。 4.5 步进电机控制接口技术——步进电机控制原理 2 步进电机控制原理 (3)计算机控制步进电机 (1) 脉冲序列的生成 输出口输出高电平1,延时,再输出低电平,延时,……。延时时间由步进电机的工作速率确定。 (2)方向控制 常用步进电机:3相、4相、5相、6相,步进电机的旋转方向与其内部绕组的通电顺序有关。 如:3相步进电机: 单三拍: (正) A?B ? C ? A (反) A? C ?B ? A 双三拍: (正) AB?BC ? CA ? AB (反) BA ? AC ?CB ? BA 3相6拍: A ? AB?B ? BC ? C ? CA 4.5 步进电机控制接口技术——步进电机控制原理 方向控制的方法: 1)用计算机的接口的一位控制步进电机的一相绕组。 2)根据选定的步进电机及控制方式,写出相应的

    更多相关内容
  • 本文基于STM32F103ZET6开发板开发了一个直流电机的实物控制系统,在stm32上采用freertos操作系统开发了基于PID的电机转速控制器。

    目录

    一、系统方案

    1.1 系统基本方案

    1.2 程序结构方案设计

    二、系统理论分析计算

    2.1控制算法的分析

    三、硬件的选型

    3.1编码器电机的选型

    四、源代码私聊我qq获取(2521170001)


    摘要:

            本文基于STM32F103ZET6开发板开发了一个直流电机的实物控制系统,在stm32上开发了基于PID的电机转速控制器。STM32F103ZET6开发板作为FreeRTOS系统控制中心,与电机、传送带、编码器电机、L298N驱动模块、蜂鸣器、OLED显示屏、LED灯一起构成滑块运动状态与电机速度分配的双闭环调速系统。单片机输出占空比可变的PWM波给电机驱动模块,控制电机的速度,从而实现了PID控制器对电机的转速控制。通过编码器反馈电机的速度,PID的位置环准确控制滑块移动的位置和速度之间的关系,采样后反馈给单片机,使电机及时矫正。控制方式采用PID算法,比例环节进行快速响应,积分环节实现无静差,微分环节减小超调,加快动态响应。从而使该系统具有良好的性能,能很好地实现滑块稳定的来回运动、平稳快速的启动静止,具有很好地稳定性。

            关键词:STM32F103ZET6、编码器电机、FreeRTOS、PID、二值信号量

    一、系统方案

    1.1 系统基本方案

            根据自己想法以及实际应用,设计一个滑块来回运动控制系统,在具有一定抗干扰的能力的情况下完成稳定启动、稳定制动、显示运动速度位置以及极限位置报警等任务。我采用STM32F103ZET6单片机做为主控芯片,用磁编码器来计算电机速度状态,用直流电机带动传送带运动。当滑块运动到极限位置时计算出滑块现在位置(方向、距离),单片机控制PWM波的输出大小来控制机的速与方向,使滑块达到在极限位置静止或反向运动滑块到达极限位置时蜂鸣器发出警报,电机反向运动,在运动的过程中实时显示电机的速度和位置,实现人机交互功能在此系统中通过一个电源,通过2个稳压模块给单片机、OLED显示屏和电机供电

           控制系统框图如图1.1所示。

    1.2 程序结构方案设计

            本次设计采用以FreeRTOS系统为基础,在stm32ZET6控制板上实现。本系统设计5个任务:start_task(),task1_task(),task2_task(),task3_task(),,task4_task(),其中5个任务的功能如下:

            start_task():启动任务,用来创建其他任务。

            task1_task():Led 灯闪烁任务,实现 LED 灯有规律的闪烁。

            task2_task():收集电机的速度值,进行pid计算出占空比,控制电机的转动,同时释放一个二值信号量。

            task3_task():OLED实时显示电机的速度和位置。

            task4_task():电机运动到极限位置时获得二值信号量,蜂鸣器报警。


    二、系统理论分析计算

    2.1控制算法的分析

    系统采用PID来控制电机转动的速度。PID控制器是一种线性控制器。假定系统给定值为rin(t),实际输出值yout(t) ,根据给定值和实际输出值构成控制偏差。公式为:

    式中,kp是比例系数,T1是积分时间常数TD是微分时间常数。

            PID是一个基于负反馈理论的控制方法,所以影响控制效果的好与坏大部分依赖于编码器获得数据的精确程度。电机开始工作后,编码器不断采集当前电机状态,并与之前的状态进行比较,使得滑块运动状态趋于稳定。简单来说,PID控制器各校正环节如下:

            比例环节:比例控制系统的偏差信号error(t)一旦产生,控制器立即产生控制作用,以减小误差,其控制器的输出与输人误差成比例关系。当仅有比例控制时系统输出存在稳态误差。

            积分环节:在积分控制中,控制器的输出与输人误差信号的积分成正比关系。对一个自控制系统,如果在进人稳态后还存在稳态误差,则称这个控制系统是有稳态的或简称有系统长差。为了消除稳态误差,必须在控制器中引人积分项。随着时间的增加,积分项会变大。这样,即便误差很小,积分项也会随着时间的增加而增大,它推动控制器的输出增大使稳态议进一步减小,直到等于零。

            微分环节:反映偏差信号的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。

    2、PID算法框图


    三、硬件的选型

    3.1编码器电机的选型

            伺服电机编码器是安装在伺服电机上用来测量磁极位置和伺服电机转角及转速的一种传感器,从物理介质的不同来分,伺服电机编码器可以分为光电编码器和磁电编码器,另外旋转变压器也算一种特殊的伺服编码器,市场上使用的基本上是光电编码器,不过磁电编码器作为后起之秀,有可靠,价格便宜,抗污染等特点,有赶超光电编码器的趋势。

    伺服驱动器和编码器是构成伺服系统的两个必要组成部分,伺服驱动器控制部分通过读取编码器获得:转子速度,转子位置和机械位置,可以完成:

            A、伺服电机的速度控制

            B、伺服电机的转矩控制

            C、机械位置同步跟踪(多个传动点)

            D、定点停车

    两种常用编码器的优缺点:

            光电编码器优点:体积小,精密,本身分辨度可以很高,无接触无磨损;同一品种既可检测角度位移,又可在机械转换装置帮助下检测直线位移;多圈光电绝对编码器可以检测相当长量程的直线位移(如25位多圈)。寿命长,安装随意,接口形式丰富,价格合理。成熟技术,多年前已在国内外得到广泛应用。缺点:精密但对户外及恶劣环境下使用提出较高的保护要求;量测直线位移需依赖机械装置转换,需消除机械间隙带来的误差;检测轨道运行物体难以克服滑差。静磁栅绝对编码器优点:体积适中,直接测量直线位移,绝对数字编码,理论量程没有限制;无接触无磨损,抗恶劣环境,可水下1000米使用;接口形式丰富,量测方式多样;价格尚能接受。缺点:分辨度1mm不高;测量直线和角度要使用不同品种;不适于在精小处实施位移检测(大于260毫米)。

            在这里,我选用的是增量编码器中的磁编码器。

    3.2 驱动模块的选型

    我选用的是L298驱动模块。

    编码器电机的接线方法如图所示:

    这是一个l298n模块,可以驱动步进电机。

    产品参数:

    1.驱动芯片:L298N双H桥直流电机驱动芯片

    2.驱动部分端子供电范围Vs:+5V~+35V ; 如需要板内取电,则供电范围Vs:+7V~+35V

    3.驱动部分峰值电流Io:2A

    4.逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V)

    5.逻辑部分工作电流范围:0~36mA

    6.控制信号输入电压范围:   低电平:-0.3V≤Vin≤1.5V    高电平:2.3V≤Vin≤Vss

    7.使能信号输入电压范围:   低电平:-0.3≤Vin≤1.5V(控制信号无效)   高电平:2.3V≤Vin≤Vss(控制信号有效)

    8.最大功耗:20W(温度T=75℃时)

    使用说明:

            步进电机的驱动: 板上的ENA与ENB为高电平时有效,这里的电平指的是TTL电平。ENA为A1和A2的使能端,ENB为B1和IB2的使能端。BJ接步进电机公共端。

    模块的原理图:


    四、源代码私聊我qq获取(2521170001)

    展开全文
  • 基于树莓派倒立摆的方案模型,利用matlab中的Simulink进行了倒立摆的仿真,验证了方案的实际可行性,并且学习了树莓派的python编程方法,掌握了部分linux系统...设计了基于树莓派的电机位置角度双闭环控制的软件程序。

    目录

    摘要:

    一、倒立摆设计方案

    1.1  倒立摆系统建模

            在这里我把一些公式推导就省略了(因为公式太懒得编辑了,如果需要完整的论文及代码可以私聊我qq2521170001获取)。

    2.2  Simulink仿真

    二、硬件设计方案

    2.1  整体设计方案

    2.2  供电接口电路

    2.3  树莓派与传感器接口电路

     三、软件设计方案(需要完整的论文及代码可以私聊获取)

    3.1  主函数

     3.2  定时器中断函数

     3.2.1 位置闭环定时器中断函数

    3.2.2  角度闭环定时器中断函数

    3.2.3  位置角度双闭环定时器函数        

     3.3  编码器输入捕捉程序

    3.4  PID算法

     四、具体调试

    4.1  PID参数整定

    4.2  角度闭环PID参数整定

    4.3  位置角度双闭环调试

    五、总结 

    六、程序代码(需要完整代码私聊qq2521170001)

    6.1  霍尔脉冲程序:

             6.2  PID函数程序:

    6.3  电机驱动程序


    摘要:

            随着现在控制理论在实际生活中的广泛使用,,倒立摆作为一种验证控制理论正确性的一种重要工具,使得对于倒立摆控制的研究越来越有必要。本文在分析了倒立摆的理论模型,基于树莓派linux平台这一强大微型电脑下,控制编码器直流电机驱动和调速以及PID控制,再一次验证了控制科学与工程这一领域相关理论的正确性,以及相关参数对于倒立摆稳定性的影响大小。设计了树莓派与电机及其驱动系统)之间的接口电路,编码器直流电机硬件驱动电路,电源电路,树莓派与电位传感器之间的接口电路,硬件部分由树莓派控制芯片,编码器电机,电位传感器组成,以树莓派为驱动器的控制芯片,软件部分是在树莓派上利用python语言进行驱动电机代码,编码器和电位传感器数据处理的代码。采用L298驱动器进行对电机的驱动,通过Simulink仿真得到控制倒立摆PID的相关参数,采用位置环和速度环双闭环控制倒立摆,编写控制软件,实现倒立摆的控制,包括起摆,倒立稳定控制;编写人机界面,实现对倒立摆控制系统的控制操作,以及对倒立摆数据的实时显示与存储,从而实现对倒立摆的稳定控制。另外设计了编码器接口电路用来连接电机上的霍尔编码器和树莓派,对树莓派通过设置频率和占空比来输出PWM波,驱动编码器电机旋转,通过调节PWM的占空比进而调节电机的电压来实现对速度的调节。通过霍尔编码器来实现对电机的位置和速度的实时反馈,经过驱动器上的编码器接口与树莓派GPIO口相连,从而形成一个闭环控制系统。运用增量式PID算法求出每次控制量的增量值来改变每次控制量输出的大小,从而让电机的实际状态达到所设定的目标状态,实现对倾角和位置的闭环控制,并把电机的实时状态传输到上位机进行实时显示。

    关键词:

            倒立摆、树莓派、PID控制、霍尔编码器、Simulink仿真、人机交互界面


    一、倒立摆设计方案

    1.1  倒立摆系统建模

            倒立摆系统是控制理论研究中理想的被控对象,为了便于直观的分析出控制倒立摆运行的各个参数,下面利用控制科学的相关理论对倒立摆系统进行理论上的模型建立,同时也便于接下来倒立摆实物的搭建。

            下面为单级倒立摆系统模型,将根据此模型利用牛顿定律进行受力分析,计算倒立摆系统的传递函数。

    2-1 单级倒立摆系统

    如图2-1所示,一个小车上固定着一个摆杆,在水平面上受到其他外力的作用,构成了一个标准的倒立摆系统,由于在这里现实中摩檫力极小,在此次建模中忽略不计,该系统受到自身重力,驱动力两个外力共同作用,同时也有小车与摆杆内部的相互作用力,这里的驱动力实际上是由连接在小车上的传送带装置提供,控制倒立摆的稳定就是依靠驱动力使各个力之间达到一种动态平衡,使得小车做和倒立摆相似的运动,使摆杆保持稳定垂直状态。

            在这里我把一些公式推导就省略了(因为公式太懒得编辑了,如果需要完整的论文及代码可以私聊我qq2521170001获取)。

    2.2  Simulink仿真

            由以上结论,利用Simulink现有得模型,将式(2-13)、(2-14)代入Matlab进行仿真,建立出倒立摆系统模型,仿真结果可通过示波器,图像,数据的方式显示出来,直观的理解倒立摆相关数据参数对系统稳定性的影响。

                                                            2-2 Simulink系统框图

    得到的响应的波形如下:


    二、硬件设计方案

    2.1  整体设计方案

            电机驱动器系统整体采用树莓派作为主控芯片,采用按键作为输入控制,再连接驱动芯片L298控制驱动电路,以此来驱动电机。电机上面连接有霍尔编码器,编码器再连接到驱动器上的编码器接口后与单片机相连,从而实现对电机的闭环控制,树莓派再通过串口对电机的状态进行打印显示。

     

                                                                  图 2-1 系统整体框图

    2.2  供电接口电路

            供电电路采用15V航模电源供电,采用三个降压模块,分别降至12V给直流电机供电,降至5V给编码器供电,降至3V给电位传感器供电,另外树莓派直接采用充电宝5V-2.4A的USB供电。

                                                             图 2-2 供电接口电路设计

    2.3  树莓派与传感器接口电路

            树莓派的GPIO口编号采用 BCM规则,该规则是一种更底层的工作方式,其与Broadcom的片上系统中信道编号相对应。其缺点是当换用一个新的板子时,需要重新查找信道号和物理引脚编号之间的对应规则。树莓派的GPIO.22和GPIO.23接到霍尔编码器的A、B相实时采集电机的转动数据,通过GPIO.27和GPIO.28口控制直流电机的正反转,通过GPIO.26给电机相应的占空比控制电机的转速。另外通过GPIO.25口传输数据到上位机,以便实时观测倒立摆的运行参数,电位传感器通过GPIO.24向树莓派传输倒立摆摆杆与平衡位置的角度偏差,使程序能够通过位置和速度双闭环调整摆杆的位置。

                                                               3-3 树莓派接口电路图


     三、软件设计方案(需要完整的论文及代码可以私聊获取)

    3.1  主函数

            在主函数的逻辑中,先对树莓派中的GPIO口进行初始化,将GPIO口设置BCM编号方式,并设置成各GPIO口为输入输出模式,初始化GPIO口为低电平。再进行PWM的初始化,设置频率,调制占空比,复位所有系统中使用到的外设,初始化系统时钟、按键以及串口通信等的配置。对控制电机用到的定时器进行初始化,并配置脉冲输出,使电机状态初始化为零。延时一段时间后,对PID控制器的各个参数进行初始化。随后进入循环状态,对按键的状态进行扫描判断,如果判断启动按键的电平状态为按下的状态,接着后面就进行PID参数的初始化和电机速度的初始化,继而调用启动电机的函数,让电机以一定的PWM输出值运行[8]。这个过程通过编码器函数在中断中实时的采集电机速度值,并将该值传给倾角PID和位置PID函数,进行双闭环控制实时的调节电机的占空比,从而使电机的状态达到目标状态,进而实现倒立摆稳定运行。

    图 3-1 主函数流程图

             

     3.2  定时器中断函数

            在树莓派中,python中的中断函数是通过开启一个新的线程定时执行一段固定的函数,函数为 threading.Timer(中断时间, 函数名),设定时间为50ms,即每过50ms执行进入PID函数,进行一次PID计算,然后将PID计算的占空比赋值给电机,进而控制电机的速度。

     3.2.1 位置闭环定时器中断函数

           在位置闭环控制中,其实就是利用电机旋转时,其上的编码器产生脉冲,然后由定时器计数,累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。当计数达到位置环的计时周期之后,就会对编码器捕获到的信号值进行计算,得到当前时刻的位置值。当前时刻的位置状态用总的脉冲数来衡量,总的脉冲数的计算值需要用编码器定时器的计数最大值乘以溢出次数再加上一计数周期内的捕获值而得到,接着就会把PID控制器计算函数返回的增量值加到当前PWM输出值上面,作为下一次位置环的PWM输出值。同时,会对速度进行限幅,防止刚开始的时候速度太大。接着对方向进行判断之后,输出计算完成的PWM,实时传给电机控制电机的占空比。

    图 3-2 位置闭环中断回调函数

    3.2.2  角度闭环定时器中断函数

            这是最核心的控制,其他的控制相对于倾角控制而言都是干扰。

            在倾角闭环控制里,实际上就是根据单位时间获取的脉冲数测量电机的转过的角度信息,并与电位器平衡位置的目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。当达到倾角环的计时周期之后,树莓派会先计算当前电机转过的角度。当前角度值的计算是将前后采集到的两次编码器作差计算,这样计算得到的当前角度值的是每样本周期采集到的脉冲数。将编码器的值转化成角度值,下面还需要对当前角度计算值的单位进行转化,转化为和设定的目标角度值(即角度传感器的平衡位置)同样的单位,即和设定的目标角度值一样单位的当前角度值。接着,计算PWM输出值,并判断方向后,输出计算完成的PWM,实时传给电机控制电机的占空比。

    图 3-3 角度闭环中断回调函数

    3.2.3  位置角度双闭环定时器函数        

            位置角度双闭环的程序中,位置环和速度环都有各自的计算周期,达到各自的计时周期之后,就会各自进行相应的计算,当位置环和角度环分别进行计算之后,然后会将两者计算的PWM做差,由于倾角环是最核心的控制,因此在这里,最终的PWM计算值为倾角环PWM值减去位置环的PWM值,然后把还需要将该值进行PWM值限幅,避免占空比100%带来的不稳定因素,才会输出最终的PWM输出值,赋值给电机。

    图 3-4 位置角度双闭环回调函数流程图 

     3.3  编码器输入捕捉程序

            采用的编码器为13线的霍尔编码器,电机的减速比为1:20,故同步轮转一圈,电机可以输出260个脉冲,编码器集成了上拉电阻和比较整形功能,可以直接输出方波。电机转动时,霍尔传感器就会根据磁钢转动产生的磁场作用而输出脉冲信号,增大电机转轴上所均匀固定的磁钢的块数,那么,电机旋转一周所产生的脉冲个数就会随之而增加,单片机可以对编码器产生的信号进行捕捉[9],进而通过计算得到电机的位置和速度信息。将编码器对于的GPIO口设置为输入模式,实时连续的检测脉冲,采用的是边缘检测方式。在边缘检测方式中,add_event_detect()函数运行后,会为回调函数另外开启一个线程,与主程序并发运行,因此不容易错过当 CPU 忙于处理其它事物时输入状态的改变。但是同一进程内也不能有太过耗费CPU时间的部分,否则仍会导致脉冲的丢失。

                                                         图 3-5 部分编码器输入捕获程序

    3.4  PID算法

            PID控制器计算函数的输入是被控对象的当前值,对于位置环来说就是当前位置,对于角度环来说就是当前角度。先定义偏差和增量值,接着计算偏差,偏差等于被控对象的目标值减去当前实际值,并设定允许的偏差范围。接着根据公式计算增量值,增量值等于P乘以当前误差减去I乘以上次的误差加上D乘以上上次的误差,并做一个存储误差的操作,把上次的误差值赋值给上上次,当前的误差值赋值给上次。最后返回计算得到的输出量的增值大小。

    图 3-5 增量式PID算法流程图


     四、具体调试

    4.1  PID参数整定

    4.2  角度闭环PID参数整定

    4.3  位置角度双闭环调试

    在这里我把一些公式推导就省略了(因为公式太懒得编辑了,如果需要完整的论文及代码可以私聊我qq2521170001获取)


    五、总结 

            本文设计了基于树莓派倒立摆的方案模型,利用matlab中的Simulink进行了倒立摆的仿真,验证了方案的实际可行性,并且学习了树莓派的python编程方法,掌握了部分linux系统,在控制倒立摆稳定的过程中,并且以PID控制器的算法思想为理论基础,设计了基于树莓派的电机位置角度双闭环控制的软件程序,同时利用工程整定法的试凑法对各个PID的参数进行多次实验,最终得到满意的控制效果。


    六、程序代码(需要完整代码私聊qq2521170001)

    6.1  霍尔脉冲程序:

    #部分霍尔脉冲读取函数
     GPIO_A=22 #编码器A相
     GPIO_B=23 #编码器B相
     GPIO.setup(GPIO_A, GPIO.IN,pull_up_down=GPIO.PUD_UP)   #通过22号引脚读取A相脉冲数据
     GPIO.setup(GPIO_B, GPIO.IN,pull_up_down=GPIO.PUD_UP)   #通过23号引脚读取B相脉冲数据
     counter=0      #A相脉冲初值
     counter1=0     #B相脉冲初值
     def my_callback(channel):          #边缘检测回调函数
         global counter                 #设置为全局变量
         if GPIO.event_detected(GPIO_A):        #检测到一个脉冲则脉冲数加1
             counter=counter+1
     def my_callback1(channel1):            #这里的channel和channel1无须赋确定值
         global counter1
         if GPIO.event_detected(GPIO_B):
             counter1=counter1+1
     GPIO.add_event_detect(GPIO_A,GPIO.RISING,callback=my_callback) #在引脚上添加上升临界值检测再回调
     GPIO.add_event_detect(GPIO_B,GPIO.RISING,callback=my_callback1)

    6.2  PID函数程序:

    import pyb
    class PID:
        def __init__(self, pwm_range, kp_A, ki_A, kd_A, kp_B, ki_B, kd_B):
            pwm_A = 0
            pwm_B = 0
            err = 0
            err_A = 0
            err_B = 0
            last_err_A = 0
            last_err_B = 0
            self.pwm_range = pwm_range
            self.kp_A = kp_A
            self.ki_A = ki_A
            self.kd_A = kd_A
            self.kp_B = kp_B
            self.ki_B = ki_B
            self.kd_B = kd_B
            self.pwm_A = 0
            self.pwm_B = 0
            self.err = err
            self.err_A = err_A
            self.err_B = err_B
            self.last_err_A = last_err_A
            self.last_err_B = last_err_B
        
        # 增量PID原理代码
        def incremental_pid(self, now, target):
            '''
            函数功能:增量PI控制器
            入口参数:当前的编码器值,目标速度对应的编码器值
            返回值  :电机PWM
            根据增量式离散PID公式:
            pwm += Kp[e(k) - e(k-1)] + Ki*e(k) + Kd[e(k) - 2e(k-1) + e(k-2)]
            e(k)代表本次偏差;
            e(k-1)代表上一次的偏差;    以此类推
            pwm代表增量输出。
            '''
            err = target - now
            pwm = pwm + self.kp*(err - last_err) + self.ki*err + self.kd*(err - last_err)
            if (pwm >= self.pwm_range): # 限幅,防止pwm值超出100
                pwm = self.pwm_range
            if (pwm <= -self.pwm_range):
                pwm = -self.pwm_range
            last_err = err
            return pwm
    
        def pid_A(self, now, target):
            self.err_A = target - now
            self.pwm_A = self.pwm_A + self.kp_A*(self.err_A - self.last_err_A) + self.ki_A*self.err_A + self.kd_A*(self.err_A - self.last_err_A)
            if (self.pwm_A >= self.pwm_range):
                self.pwm_A = self.pwm_range
            if (self.pwm_A <= -self.pwm_range):
                self.pwm_A = -self.pwm_range
            self.last_err_A = self.err_A
            return self.pwm_A
    
        def pid_B(self, now, target):
            self.err_B = target - now
            self.pwm_B = self.pwm_B + self.kp_B*(self.err_B - self.last_err_B) + self.ki_B*self.err_B + self.kd_B*(self.err_B - self.last_err_B)
            if (self.pwm_B >= self.pwm_range):
                self.pwm_B = self.pwm_range
            if (self.pwm_B <= -self.pwm_range):
                self.pwm_B = -self.pwm_range
            self.last_err_B = self.err_B
            return self.pwm_B

    6.3  电机驱动程序

    class Motor:
        def __init__(self,direction,speed):
            self.IN1 = 27 # 电机A的正极IO口
            self.IN2 = 28
            self.ENA = 16   # 电机的PWM输入IO口
            self.hz = 500   #定义频率变量(等一下用)
            self.pwm = 0
            self.speed = speed    #定义占空比变量(等下用)运行时默认的占空比为0
            self.direction = direction
            
                  
        def setup(self):
            print('Begin setup IN1 IN2 ENA')
            GPIO.setwarnings(False)  #忽略警告
            GPIO.setmode(GPIO.BCM)    # 使用BCM编号方式
            GPIO.setup(self.ENA, GPIO.OUT)  # 将连接ENA的GPIO引脚设置为输出模式
            GPIO.setup(self.IN1, GPIO.OUT)   # 将连接IN1的GPIO引脚设置为输出模式
            GPIO.setup(self.IN2, GPIO.OUT)   # 将连接IN2的GPIO引脚设置为输出模式
            self.pwm = GPIO.PWM(self.ENA, self.hz)   # 设置向ENA输入PWM脉冲信号,频率为hz并创建PWM对象
            self.pwm.start(self.speed)         # 以speed的初始占空比开始向ENA输入PWM脉冲信号
            print('Setup IN1 IN2 ENA over')
    
        def destroy(self):
            GPIO.output(self.IN1, GPIO.LOW)
            GPIO.output(self.IN2, GPIO.LOW)
            GPIO.output(self.ENA, GPIO.LOW)
            GPIO.cleanup()
            
        def motor_run(self,direction,speed):
            '''
            函数功能:控制方向,控制速度
            '''
            #self.setup()
            if direction == 0:     #如果键盘输入的数值为0,则电机正转
                GPIO.output(self.IN1, GPIO.LOW)
                GPIO.output(self.IN2, GPIO.HIGH)
                self.pwm.ChangeDutyCycle(speed)   # 改变PWM占空比
            if direction == 1:      #如果键盘输入的数值为1,则电机反转
                GPIO.output(self.IN1, GPIO.HIGH)
                GPIO.output(self.IN2, GPIO.LOW)
                self.pwm.ChangeDutyCycle(speed)        
            if direction == 2:      #如果键盘输入的数值为2,则电机停止转动
                GPIO.output(self.IN1, GPIO.LOW)
                GPIO.output(self.IN2, GPIO.LOW)
                GPIO.output(self.ENA, GPIO.LOW)

    展开全文
  • 摘要:永磁同步电机矢量控制系统在电动汽车、轮船等交通运输领域具有广泛的应用前景。使用MATLAB/SIMULINK的仿真功能,采用模块化的设计结构,分别对速度环调节、电流PI(Proportion Integration)调节、SVPWM(Space ...

    摘要:永磁同步电机矢量控制系统在电动汽车、轮船等交通运输领域具有广泛的应用前景。使用MATLAB/SIMULINK的仿真功能,采用模块化的设计结构,分别对速度环调节、电流PI(Proportion Integration)调节、SVPWM(Space Vector Pulse Width Module)波的产生、、双闭环的整个系统模型进行仿真研究。仿真在线调试,转子转速和转子转角、定子电流、以及转矩通过Scope模块进行观察,及时调整系统模型参数,使系统性能达到化,实现了永磁同步电机矢量控制和正反转调速。结果表明该种控制方法具有很好的鲁棒性,且该种方法可以提高设计的效率并缩短系统设计时间。

    1.引言

    随着高性能永磁材料、大规模集成电路和电力电子技术的发展,永磁同步电机因为其功率密度高,体积小,功率因数和高效率而得到发展,且引起了国内外研究学者的关注。传统的控制方式由于引入了位置传感器而给当前的调速系统带来了一系列的问题:占据了比较大的有效空间,使系统编程复杂。因此无位置传感器控制系统的研究变得越发的重要。

    2.PMSM的坐标系和数学模型

    75468de6a0bf5b21674ed6432d92834b.png

    永磁同步电机在定子三相(ABC)静止坐标系下的电压方程:

    d2ce53f4d1a71eded876f752f63c62ee.png

    式中,三相绕组的相电压瞬时值分别为A u 、B u 、C u ; A i 、B i 、C i 是相电流的瞬时值; s R 是永磁同步电机定子的每相绕组电阻; A ψ 、B ψ 、C ψ 是永磁体的磁链在各相绕组的投影。在d-q旋转坐标系下的电磁转矩方程为:

    2e8c69840a54fea5abfd3f8039d4c240.png

    3.SIMULINK仿真

    永磁同步电机无传感器矢量控制的系统结构框图,在MATLAB/Simulink下建立PMSM驱动仿真分析,用id=0时的无传感器矢量控制系统的仿真模型如图2所示,各个模块介绍如下:给定的参考转速是700rpm;速度通过PI调节模块,实现转速的闭环控制策略,该调节采用了输出限幅;接着是电流PI调节器模块构成电流的闭环控制,输出了定子的电压dq轴分量ud和uq;I-park逆变器模块将两相旋转直角坐标系(dq)下的值向两相静止坐标系(αβ)下变化,它的输出是αβ轴的定子电压分量参考值Ualfa,Ubeta;SVPWM和逆变模块用于实现参考电压逆变及其调制,从而可以直接通给电机;PMSM是永磁同步电机模块,负载转矩是模块Tm.反馈通道模块有:

    Clark变换模块:实现三相坐标系(ABC)向两相直接坐标系(αβ)的转换,输出的αβ坐标系下的电流值和电压值作为观测器的输入,其中SMO模块是反电动势估算模块,SMO1是转速和转角估算模块,这两点是讨论的关键问题所在。

    ca911f128f7d5c463d79f5142bf32bbd.png

    3.1 滑膜观测器模块

    由滑膜观测器的理论可以构造滑膜观测器:由观测器和控制驱动器构成的物理模型如下:

    5751089c339e1b39048b63189bcdb378.png

    控制系数z的目标是使电流的估计误差接近0.通过合适的选择系数k和正确的估算反电动势。在这里标志? 表示变量是估算的。标志*表示这个量可以获得。

    离散化后的公式:

    2ef11c0d6056327e9a5200f7ed50d3f7.png

    这里Ts是采样周期。

    电机的角度估算值和反电动势之间的关系是:

    7f3210312ff08ad5e2f4df42fb2fd16c.png

    转子角度的计算步骤为:电流观测器(图4示意图),滑模控制(图5到图7示意图),以及反电动势的计算图。

    滑膜观测器构成原理图和框图分别是:

    31ae74340fda69b4d5f64762ef68efec.png

    计算步骤是:电流观测器,滑模控制,以及反电动势的计算图。

    f2767e6b72984a888e1b437850850ba4.png

    448b42aa2cb656559879339d29ccaab6.png

    3.2 空间矢量脉宽调制(SVPWM)

    主要包括通过逆变器确定矢量所在的扇区,合成矢量分解到相邻扇区的作用时间,计算电压空间矢量的切换点。

    aeb00bee19abc743e6b229d1a368706b.png

    (1)判断矢量所在的扇区:

    c6f98b4fe64ca53e664004e94844e289.png

    如果Va>0,则A=1否则A=0;如果Vb>0,则B=1否则B=0;如果Vc>0,则C=1否则C=0.

    扇区计算公式为:

    fc7dce9f8393200911338ab008b31c7f.png

    4698e93d49fa80f000408e89543140e7.png

    69c78555b02c8c914911a12633922571.png

    331a25b64ba6748e445e1a2fc9da4c0f.png

    a064c91a9e10cff0f7e862cee517a8f9.png

    4.实验结果

    永磁同步电机的定子相电阻是0.195684ohm,转动惯量是0.704905kg.m2,极对数是12对极,额定转矩是160N.m,额定转速是700rpm,以下是永磁同步电机滑模控制系统的仿真结果。

    a693951fc2df1c56e51f618bf2016534.png

    8902bdd3641f5e5800e00d51a57480ba.png

    负载突变时对调速系统的影响,结果分析:在仿真模型中,负载转矩给定值是100N.m,在0.1s秒时增加到160N.m,通过以下仿真图来分析变化的负载转矩对系统影响。图4.22是永磁同步电机在负载突变情况下的转速波动图,从仿真图形可以看出电机控制经过短时间的振动,进入稳定的运行状态且转速稳定在700rad/s,转速没受到负载转矩波动的影响。

    1ba08b70dad2824c9fdfab425195b5a7.png

    5.实验结果与分析

    本文析了永磁同步电机状态方程,设计了滑模仿真器,并进行了坐标变换,通过MATLAB/Simulink进行了模型的仿真和调速,仿真的结果表明该种控制方式是有效的,能够估算出转子位置信息极该种滑模控制是稳定而且有效的,分析了负载转矩扰动和系统参数变化对滑模控制性能的影响。结果说明基于滑模控制的永磁同步电机无传感器控制系统具有很强的鲁棒性,并且使用场合广泛。(作者:黄斌,潘云蛟)

    展开全文
  • 基于单片机的触屏电机控制系统的设计.rar-单片机文档类资源-CSDN下载1、资源内容:毕业设计lun-wenword版10000字+;开题报告,任务书2、学习目标:快速更多下载资源、学习资料请访问CSDN下载频道....
  • 课题名称 基于S7-200 PLC控制的小型自动化立体仓库设计 学 院 电气信息学院 专业班级 自动化084班 姓 名 XX 学 号 089064444 毕业设计(论文)的主要内容及要求: (1)了解自动化立体仓库的组成及基本功能,熟悉PLC...
  • 直流电机控制系统第一部分 课程设计概述1.1 课程设计的目的与任务1.2 课程设计题目1.3 设计功能要求1.4 课程设计的内容与要求1.5 实验仪器设备及器件第二部分 设计方案工作原理2.1 预期实现目标定位2.2 技术方案分析...
  • AGV(即自动导向小车)是一种集控制、定位、各种传感器技术于一体的设备。随着智能车技术的不断发展,智能车的应用范围和功能都将大为拓展,现已逐渐用于工业与民用领域。但是由于负载变化、使用环境条件恶劣等原因...
  • BLDC无刷直流电机

    千次阅读 2020-12-09 20:08:03
    更复杂的机器的日常设备都使用无刷直流电机,将电能转换为旋转运动。无刷直流电动机,也被称为无刷直流电动机,提供了许多与之相比的有刷直流电动机的优点。无刷直流电动机具有更高的效率和更低的维护费用,这就是为...
  • 电赛-风力摆控制系统

    千次阅读 2021-02-28 19:13:12
    风力摆控制系统摘要1. 方案论证与比较1.1. 系统主控芯片选择1.2. 风力摆动力系统方案选择1.3. 角度检测方案的选择与论证1.4. 电机驱动模块的选择与论证1.5. 算法选择2. 系统设计2.1. 系统总体设计2.2. 模块电路设计3...
  • 2) 两个电机驱动模块(L298N) 3) 降压模块(4015) 4) 12V聚合物锂电池 5) 4路编码电机 6) 4路红外对管 7) 小车框架(轮胎) 8) 4针OLED 9) 指示灯(集成在一个模块上) 10) 按键模块 11) 各类...
  • )智能控制理论及应用 课程设计报告题 目: 基于matlab的倒立摆模糊控制院 系: 西北民族大学电气工程学院专业班级: 10级自动化(3)班学生姓名: 蔡 余 敏指导教师: 刁 晨2013.10基于MATLAB的倒立摆模糊控制作者:蔡...
  • 双线循迹停泊系统 STM32 控制小车

    千次阅读 多人点赞 2019-04-21 12:17:28
    摘要 随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其的一个分支,也在不断发展。在近几年的电子设计大赛中,关于小车的智能化功能的实现也多种多样,此次我们设计一辆智能小车,双线...
  • 基于单片机智能窗帘控制系统设计

    千次阅读 2021-05-19 15:52:40
    这套系统可分为电子自动控制和机械传动两部分,前者使用STC89C52单片机为核CPU,集多种传感器于一体从而实现监测控制;后者计划设计在窗户上安装步进电机,从而实现窗帘在不同光照条件下的打开和关闭,包括在某些...
  • 基于MATLAB的倒立摆系统控制

    万次阅读 多人点赞 2019-04-08 18:38:44
    小车依靠直流电机施加的控制力,可以在导轨上左右移动,位移和摆杆角度信息由传感器测得,目标是使倒立摆在有限长的导轨上竖立稳定, 达到动态平衡。由于倒立摆系统本身所具有的高阶次、不稳定、多变量、非线性和强耦合...
  • 汽车底盘线控与动力学域控制技术

    千次阅读 2022-03-21 17:40:44
    摘要 汽车动力学及其线控技术是汽车底盘设计中的难题,一直是学界研究的热点。汽车的智能化发展也对底盘线控执行技术提出了更高、更迫切的性能要求。该文介绍了汽车动力学与底盘线控技术的最新进展:针对汽车动力学...
  • 差速移动机器人轨迹跟踪控制方法及实现-NJUST

    千次阅读 热门讨论 2021-08-10 20:03:06
    差速移动机器人轨迹跟踪控制方法一、引言二·、基础准备1.去除GPS数据中的坏点2.经纬度与平面坐标系转换3.差速移动机器人数学建模三、基于PID的差分移动机器人轨迹跟踪方法1、控制律设计2、航向角PID控制器设计3、...
  • 基于NI myRIO 的智能家居设计

    千次阅读 2020-03-27 18:48:25
    本文设计了以 NI myRIO 作为核心控制器, LabVIEW 编程语言开发的智能家居系统。此监控系统包括温度采集单元、光照采集单元、烟雾浓度采集单元、人体红外检测采集单元、红外采集单元,分别通过信号调理电路与NI ...
  • 本文给出了机械设计以及系统整体的结构,同样也给出了应对不同场景的多种控制器的开发。在最终的原型机进行了一系列实验,验证了这些行为在真实场景中的有效性。 Ⅰ 引言 过去十年来兴起的高性能移动机器人的研究...
  • 摘要:汽车的安全性能, 与我们的电子技术发展有直接的联系, 大量的电子原件与控制程序运用到汽车上, 保证汽车技术状况良好, 达到减少交通事故的发生, 减少因事故而造成的人员伤亡和财产损失。本文就汽车主动和被动...
  • 太阳能板的开发

    千次阅读 2021-05-07 19:29:45
    摘要 对绿色能源的开发和利用是响应我国节能减排,环保政策的举措,太阳能作为可持续,零污染,具有很高的环保...课题从云台,电机驱动,控制器,光线传感器,液晶显示等构成,课题成果不仅可以用到太阳能发电,还可
  • 摘要:平衡小车大家应该见到过很多了,比如最有名的要数野生钢铁侠稚晖君的自行车平衡小车了。那个玩意太高级一般人做不出来,作为学生或者DIY爱好者做一辆小型的mini平衡小车还是可以实现的。随...
  • 智能车学习(十七)——舵机学习

    千次阅读 2019-10-05 11:22:21
    舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文servo。 ...
  • 摘要:Nano是一个小巧可爱的机器人,身高大约10公分,特点是平衡感好,长得很白以及善于卖萌。作为全球最迷你的自平衡机器人,Nano身材虽小,但配置有丰富的传感器—陀螺仪,超声波,Moti...
  • 2.)正反转切换的线我们直接单片机的引脚3.3V电平控制,是完全没有问题的; 3.)编码器供电接3.3V; 4.)PWM接单片机的PWM输出,启动运行我们接单片机IO口,在电机初始化时置为高电平; 5.)电源负极接GND,电源...
  • 基于51单片机的报告

    2021-06-18 10:30:18
    单片机通过红外传感器检测场地黑线,从而控制电机驱动模块,改变电机转速来控制小车方向,从而达到循迹的目的。 一、系统概述 整个系统包括51单片机控制模块、电机驱动模块、循迹模块、电源和小车车体 1.工作原理 ...
  • 悬挂运动控制系统(E题) 07年

    万次阅读 2010-07-31 14:56:00
    题) 一、任务 设计一电机控制系统,控制物体在倾斜(仰角≤100度)的板上运动。 在一白色底板上固定两个滑轮,两只电机(固定在板上)通过穿过滑轮的吊绳控制一物体在板上运动,运动范围为80cm×100...
  • 摘要:随着空中机器人技术的快速发展与日益成熟,无人机在越来越多的领域得到了广泛的应用。而多旋翼无人机作为最常用的无人机之一,以其体积小、运动灵活、定点悬停等优势广泛应用于侦查、巡航、航拍等领域,但这些...
  • 太阳跟踪装置系统设计与制作

    千次阅读 2021-05-09 20:55:27
    此装置使用了单片机,外加两个步进电机,光电转换器和相关的外部元器件及传感器等等,其中太阳能电池板和云台都可以很好的完成360°旋转,使用两个步进电机也可以更精确的定位旋转角度使用单片机控制,感光元器件...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

用角度传感器控制电机转动摘要

友情链接: Big_EV1.01.zip