版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于模型设计的智能平衡移动机器人第五章
基础实验5.4ePWM5.5eCAP5.6SCI5.7SPI5.8IdleTask模块5.9WatchDog模块介绍5.10总结目录5.4ePWM脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM的控制方法:采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同,如下图所示。PWM控制技术对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。5.4ePWM
TMS320F28069有19路脉宽调制输出引脚(这些引脚需要软件进行配置,类似于前面的普通GPIO的配置),这19路脉宽调制输出引脚包括16路增强型PWM(ePWM)和3路普通PWM(ECap模块复用),16路增强型PWM中又有8路可以配置为高分辨率的PWM(HRPWM)。8组PWM模块,每一组又有2路PWM,分别是PWMA和PWMB。
一个ePWM模块包括:Time-base(TB)module(时基模块),Counter-compare(CC)module(计数器比较模块),Action-qualifier(AQ)module(比较方式预设模块),Dead-band(DB)module(死区模块),PWM-chopper(PC)module(斩波模块),Event-trigger(ET)module(事件触发模块),Trip-zone(TZ)module(行程区模块)等七个模块。
本次应用案例利用的是EPWM1模块,以下通过三个例子来对PWM的功能进行说明。方法一
ePWM模块输入时钟,直接由系统时钟而来,使用的时候可以根据用户需要进行分频。在ePWM的设置界面,在General选项卡中,配置为ePWM1模式,对PWM模块进行初始化配置,时钟周期单元选择:Clockcycles,计数模式选择:Up-Down计数,如图所示。
5.4.1ePWM_单路输出
在ePWMA选项卡配置使能ePWMA,当计数等于0的时候不动作,等于比较寄存器CAU的值的时候复位,等于比较寄存器CAD的值的时候置高,其他时间不动作。ePWMB、死区时间、事件触发以及错误联防均不配置,如图所示。对CounterCompare的配置:将CMPAunits设置为Percentage百分比;比较寄存器CMPA设置成Specifyviadialog内部指定为50。通过以上配置,可以得到模型。方法二在General选项卡中,配置为ePWM1模式,对PWM模块进行初始化配置,时钟周期单元选择:Seconds,计数模式选择:Up-Down计数,关闭同步功能,分频系数TBCLK和HSPCLKDIV均为1(不对系统时钟分频),如图所示。5.4.2ePWM_双路互补输出
在上述配置完成,并完成模型的搭建后,将模型编译下载到主控板,然后在CCS中打开模型生成的工程文件,先单击【编译】按钮
,再单击【调试】按钮
,然后将途中的两个变量添加到Expressions中,单击【运行】按钮
,可以看到TBPRD、CMPA的值,如图所示。可以将主控板的PWM1A引脚连接到示波器的信号线,主控板和示波器记得要共地,便能观测到输出的PWM的频率是否为1kHz,占空比是否为50%。注意要单击Expressions的实时刷新按钮,否则数据不会变化。在General选项卡的配置和在ePWMA选项卡配置同单路输出的方法一,因为要输出两路互补的PWM所以这里使能ePWM1B配置与ePWM1A相反,如图所示。对CounterCompare的配置:将CMPAunits设置为Clockcycles(时钟周期);比较寄存器CMPA设置成Inputport由外部输入,初始值设为0,对CMPB的操作一样,如图所示在上述配置完成,并完成模型的搭建后,将模型编译下载到主控板,然后在CCS中打开模型生成的工程文件,先单击【编译】按钮,再单击【调试】按钮,然后将图中的三个变量添加到Expressions中,单击【运行】按钮,可以看到TBPRD、CMPA、CMPB的值,如图所示。可以将主控板的PWM1A引脚和PWM1B引脚分别连接到示波器的信号线,主控板和示波器记得要共地,便能观测到两路PWM的频率是否都为1kHz,占空比是否分别为60%和40%,波形是否互补。注意要单击图右上方的实时刷新按钮,否则数据不会变化。PWM中断配置在双路互补输出的PWM实验的基础上改动。在前面的配置不变的情况下,在EventTrigger选项卡中,使能ePWM中断,并配置为在第一个事件发生时就进入中断,其他设置默认。配置如图所示。5.4.1ePWM_中断在上述配置完成后,调用C28xHardwareInterrupt模块,将PWM1中断的CPU级中断号3以及PIE级中断号1写入,其余配置默认,如上图所示。中断函数中,使用StateFlow搭建了一个简单的逻辑功能模块,使LED灯每一秒翻转一次。其中计数器计数最大值为1000,如上图所示。该模型的系统时钟为80MHz,定步长为0.5s。完成上面的配置之后,将生成的代码下载到开发板上,可以看到在PWM波产生的同时,LED2灯在以1Hz的频率闪烁,LED1灯以每0.5s的频率闪烁,如图所示5.5eCAPeCAP基本介绍TMS320F28069的捕获单元模块能够捕获外部输入引脚的逻辑状态(电平的高或低、电平翻转时的上升沿或下降沿),并利用内部定时器对外部事件或者引脚状态变化进行处理。控制器给每个捕获单元模块都分配了一个捕获引脚,在捕获引脚上输入待测波形,捕获模块就会捕获到指定捕获的逻辑状态,所以捕获单元可以用于测量脉冲周期以及脉冲的宽度。TMS320F28069上面有4路增强型捕捉模块eCAP,CAP模块是应用定时器来实现事件捕获功能,主要应用在速度测量,脉冲序列周期测量等方面。eCAP模块包括以下资源。可分配的输入引脚。32bit时间基准(计数器)。4个32bit时间窗捕获控制寄存器。独立的边缘极性选择。输入信号分频(2~62)。
4个捕获事件均可引起中断。5.5eCAPeCAP模块可以设置为捕捉模式或者是APWM模式,一般而言前者比较常用,因此在这里只对第一种情况进行分析介绍。在捕捉模式下,一般可以将eCAP模块分为以下几个模块:事件分频、边沿极性选择与验证、中断控制。1)事件分频输入事件信号可通过分频器分频处理(分频系数2~62),或直接跳过分频器。这个功能通常针对输入事件信号频率很高的情况下适用。2)边沿极性选择与验证4个独立的边沿极性(上升沿/下降沿)选择通道;Modulo4序列发生器对Eachedge(共4路)进行事件验证;CAPx通过Mod4对事件边沿计数,CAPx寄存器在下降沿时被装载。32bit计数器(TSCTR)此计数器为捕捉提供时钟基准,而时钟的计数则是基于系统时钟的。当此计数器计数超过范围时,则会产生相应的溢出标志,若溢出中断使能,则产生中断。3)中断控制
中断能够被捕获事件所(CEVT1-CEVT4,CTROVF)触发,计数器(TSCTR)计数溢出同样会产生中断。事件单独地被极性选择部分以及序列验证部分审核。这些事件中的一个被选择用来作为中断源送入PIE。设置CAP中断的过程可表述如下。(1)关闭全局中断。(2)停止eCAP计数。(3)关闭eCAP的中断。(4)设置外设寄存器。(5)清除eCAP中断标志位。(6)使能eCAP中断。(7)开启eCAP计数器。(8)使能全局中断。4)eCAP模块原理的加深理解
配置好eCAP模块的引脚后,外部事件由引脚输入,首先通过模块的分频部分,分频系数为2~62,也可以选择跳过分频部分,此功能主要是针对输入事件信号频率很高的情况。经过分频后的信号(通常频率会降低),送至边沿及序列审核部分,边沿审核即设置为上升沿或下降沿有效,序列审核则是指分配当前对哪个寄存器(CAP1~CAP4)作用的问题,之后就是中断执行控制部分。
在实验5.4中知道了如何配置TMS320F28069的ePWM模块使其输出PWM波形,而本实验则是通过利用捕获模块功能来测量配置的PWM波的占空比是否正确。实验时,只需要将ECAP1引脚用杜邦线先后与EPWM1A引脚和EPWM1B连接起来,即可完成实验。其原理图如图所示。
【第一步】在Solver中设置定步长为0.5秒,在HardwareImplementation中配置系统时钟为90MHz,LSPCLK低速时钟外设4分频,eCAP的ECAP1pinassignment引脚选择GPIO5,如图所示。
【第二步】初始化好十个全局变量,如图所示。用来实现对一方波信号的频率、周期、占空比的测量。(1)t1表示第一个捕捉事件发生时计数器的值。(2)t2表示第二个捕捉事件发生时计数器的值。(3)t3表示第三个捕捉事件发生时计数器的值。(4)T1表示t2-t1的差也就是测试方波的高电平时间对应的计数值。(5)T2表示t3-t1的差也就是测试方波的整个周期对应的计数值。(6)CLK表示系统时钟周期,Duty表示实际方波的占空比,Frequence表示方波的频率,Period表示方波的周期,Flag表示检测完成标志位。
【第三步】生成两路频率为10kHz,一个是占空比为50%的PWM,另一个是占空比为60%的PWM,如图所示。
【第四步】设置eCAP模块,中断中配置如图所示,使用的是eCAP1模块,配置为连续控制模式,并在第三次事件之后停止计数并重置,第一次事件的触发极性为上升沿,第二次事件的触发极性为下降沿,第三次触发极性为上升沿,计数时间的数据类型为无符号的32位整形。中断配置为捕捉到第三次事件之后触发中断。在eCAP输出接上demux模块,并将输出的值赋予t1,t2,t3。
【第五步】计算T1,T2并对Flag置位,表示一次检测完毕,如图所示。
【第六步】封装子系统,配置硬件中断,根据ECAP1的中断向量号(它属于CPU中断的第四组下的PIE中断第1个),配置C28x硬件中断模块,如图所示。
【第七步】标志位触发,在Whlie(1)中触发计算模块,对输入方波的频率、周期、占空比进行计算,如图所示。其中CLK=1/90000000。如图所示为eCAP的simulink模型图。在上述配置完成,并完成模型的搭建后,将模型编译下载到主控板,然后在CCS中打开模型生成的工程文件,先点击编译,再点击调试,然后将下图的十个变量添加到Expressions中,再点击运行前,我们先将ECAP3引脚用杜邦线与EPWM1A引脚连接起来。然后在点击运行可以看到各个变量的值。要想看EPWM1B的数值,ECAP3引脚用杜邦线与EPWM1B引脚连接起来。只是这里有一点点误差,是芯片自身问题。EPWM1A数据监测EPWM1B数据监测eCAP捕获PWM脉冲5.6SCI通信,简单来说就是信号的传递。SCI(SerialCommunicationInterface)意为“串行通信接口”,是相对于并行通信的,是串行通信技术的一种总称,最早由Motorola公司提出的。它是一种通用异步通信接口UART,与MCS‐51的异步通信功能基本相同。SCI模块用于串行通讯,如RS422、RS485、RS232.TMS320F28069上面有2个UART口,SCIA、SCIB。本实验针对SCIB。电路原理图5.6SCI在Solver中设置定步长为0.1秒,在HardwareImplementation中配置系统时钟为90MHz,LSPCLK低速时钟外设4分频,SCI_B的字符长度为8位,波特率设为115000Hz,Tx的引脚设为GPIO58,Rx的引脚设为GPIO15,如图所示。设置SCIReceive的SCImodule为B,其他的参数默认,此模块负责接收串口助手发送过来的数据;SCITransmit的SCImodule为B,如图所示,其他参数默认,此模块负责发送数据给串口助手。搭建整个模型如图所示,控制流程为:SCI接收到数据与53比较,如果等于53则输出1,1大于0则输出CounterLimited的数(Upperlimit设定为10,当累加到10变归0重新计数),否则一直输出2。在上述配置完成,并完成模型的搭建后,将模型编译下载下载到主控板。将套件中附带的USB线一端与电脑相连接,并将另一端插到智能平衡车套件中主控制板的USB插口处;确认主芯片正常供电;当用USB直接连接电脑时,要想看到系统识别串口,需要打开设备管理器,选择TIXDS100ChannelB,右击属性,在高级选项卡中勾选加载VCP选项,拔掉USB连接线,再次插入时将显示系统已经识别到COM口,可以打开串口调试工具进行下一步实验。接下来打开串口猎人软件。可以看见主要的几个方框。选择对应的端口号COM9,波特率115200,在没有发送数据之前,数据接收界面一直显示着2,说明搭建的模型是正确的,如图所示。在左下角的方框中输入35(十六进制),则数据接收显示界面会一直显示从0到10的数,如图所示。在高级收码工具栏下方的通道设置的来源选择提取每一帧,然后单击【启动高级收码】按键。便可以在历史数据看见有从0~10的十进制数显示,如图所示。
在波形显示界面将Y轴倍率设为10/格,周期为0.1/格,可以看见一个从0到10的阶梯,如图所示。实验结果5.7SPISPI即SerialPeripheralInterface是高速同步串行输入/输出端口。SPI目前被广泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部芯片的扩展。与前文介绍的SCI最大的区别是,SPI是同步串行接口。SPI接口的通信原理简单,以主从方式进行工作。在这种模式中,必须要有一个主设备,可以有多个从设备。通过片选信号来控制通信从机,SPI时钟引脚提供串行通信同步时钟,数据从从入主出引脚输出,从出主入引脚输入。通过波特率寄存器设置数据速率。SPI向输入数据寄存器或发送缓冲器写入数据时就启动了从入主出引脚上的数据发送,先发送最高位。同时,接收数据通过从出主入引脚移入数据寄存器最低位。选定数量位发送结束,则整个数据发送完毕。收到的数据传送到SPI接收寄存器,右对齐供CPU读取。
SPI的通信链接5.7SPI
【第一步】在Solver中设置定步长为0.05秒,在HardwareImplementation中配置系统时钟为90MHz,LSPCLK低速时钟外设4分频,主要设置SPI_A的Enableloopback,将SIMOpinassignment、SOMIpinassignment、CLKpinassignment、STEpinassignment四个引脚配置如图所示的I/O口。
【第二步】搭建占空比选择子系统,如图所示。
【第三步】选择SPITransmit和SPIReceive的模块为SPI_A,其他参数默认。
【第四步】配置PWM输出,定时器周期为64000,计数方式为向上计数UP,不分频。使能ePWM1A,当计数值等于定时器周期值PRD时置低,当计数值等于向上计数的CAU时置高,其他计数为Donothing不动作。
使能ePWM1B,当计数值等于定时器周期值PRD时置高,当计数值等于向上计数的CBU时置低,其他计数为Donothing不动作。
比较计数,选择Clockcycles,CMPAinitialvalue、CMPBinitialvalue的值由外部输入,初值为0,如图所示。
【第五步】在上述配置完成,并完成模型的搭建后,如图所示。选择占空比为75%,将模型编译下载到主控板。
【第六步】然后在CCS中打开模型生成的工程文件,先单击【编译】按钮,再单击【调试】按钮,然后将图中的两个变量添加到Expressions中,单击【运行】按钮,可以看到TBPRD、CMPA,CMPB的值。可以将主控板的PWM1A引脚和PWM1B引脚分别连接到示波器的信号线,主控板和示波器记得要共地,便能观测到两路PWM的频率是否都为1kHz,占空比是否分别为75%和25%,波形是否互补。
【第七步】在Simulink中选择占空比为50%,重新编译下载,然后在CCS中观察数据,两路PWM的占空比都为50%。
【第八步】在Simulink添加两个Scope,如图所示,选择External模式,主控板连接USB转TTL模块,选择对应的COM口,波特率115200,选择占空比为75%,单击【运行】按钮,可以观测Scope1的数据是否和Scope的数据一致,在运行状态下可以改变占空比的大小,看Scope1的数据变化,如图所示。5.8IdleTask模块下图为PreemptionFlag设置为的0,可以看到生成的代码中出现了开关中断的指令;而当PreemptionFlag设置为1的时候的代码生成状况,可以看到没有开关中断的指令。
在常规的MCU编程中,Whlie(1)使我们几乎都会使用到的一个函数,他可以使一些对工作周期要求不高的外设以及功能进行循环的扫描执行,例如矩阵键盘或者OLED显示等功能。在TI提供的硬件支持包中,也很人性化的提供了这个功能模块——IdleTask。下图为添加IdleTask模块后生成的代码。Voididletask_num1(void){DINT;Idle_num1_task_fcn();EINT;}Voididletask_num2(void){Idle_num2_task_fcn();}Voidenable_interrupts(){EINT;ERTM;}while(runModel){stopRequested=!(rtmGetErrorStatus(Ideltask_M)==(NULL));runModel=!(stopRequested);idletask_num1();idletask_num2();}5.8IdelTask模块介绍
所以在使用的时候,可以根据自己的需要选择。搭建如图所示模型,左边子系统是给GPIO31一个高电平,右边子系统是给GPIO25一个低电平,电平不翻转。编译下载可以观察主控板的LED1灯亮,LED2灯灭。下面为该模型生成的代码,idle_num1_task_fcn()函数为右边子系统生成的代码,idle_num2_task_fcn()函数为左边子系统生成的代码。voididle_num1_task_fcn(void){/*Callthesystem:<Root>/GPIO_25*/{/*S-Function(idletask):'<Root>/IdleTask'*//*Outputandupdateforfunction-callsystem:'<Root>/GPIO_25'*//*S-Function(c280xgpio_do):'<S2>/GPIO25'incorporates:*Constant:'<S2>/Constant'*/{if(Ideltask_P.Constant_Value)GpioDataRegs.GPASET.bit.GPIO25=1;elseGpioDataRegs.GPACLEAR.bit.GPIO25=1;}/*EndofOutputsforS-Function(idletask):'<Root>/IdleTask'*/}}/*IdleTaskBlock:'<Root>/IdleTask'*/voididle_num2_task_fcn(void){/*Callthesystem:<Root>/GPIO_31*/{/*S-Function(idletask):'<Root>/IdleTask'*//*Outputandupdateforfunction-callsystem:'<Root>/GPIO_31'*//*S-Function(c280xgpio_do):'<S1>/GPIO31'incorporates:*Constant:'<S1>/Constant'*/{if(Ideltask_P.Constant_Value_a)GpioDataRegs.GPASET.bit.GPIO31=1;elseGpioDataRegs.GPACLEAR.bit.GPIO31=1;}/*EndofOutputsforS-Function(idletask):'<Root>/IdleTask'*/}}可以从Idletask.h头文件代码中看到当Constant_Value为0,LED2灯灭,Constant_Value_a为1,LED1灯亮。/*Parameters(defaultstorage)*/structP_Ideltask_T_{real_TConstant_Value;/*Expression:0*Referencedby:'<S2>/Constant'*/real_TConstant_Value_a;/*Expression:1*Referencedby:'<S1>/Constant'*/};P_Ideltask_TIdeltask_P={0.0,/*Expression:0*Referencedby:'<S2>/Constant'*/1.0/*Expression:1*Referencedby:'<S1>/Constant'*/}5.9WatchDog模块介绍
意外难免会发生,部分意外发生的时候,系统程序跑飞或进入死循环,系统需要有一定自恢复的功能,这就需要看门狗。看门狗,又叫Watchdogtimer,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中的输入叫做喂狗(kickingthedogorservicethedog),输出一般连接到另外一个部分的复位端,在这里就是F28069的复位端。CPU工作正常时,按照设定的程序,每隔一段时间就输出一个信号到喂狗端,实际操作是给看门狗计数器清零,如果超过了一定时间没有信号到喂狗端进行喂狗,来做清零操作,一般就认为程序运行出了意外,不管你的意外类型是什么样的,这时候看门狗电路就会给出一个复位信号给CPU的复位端,使CPU强制复位,从而可能改变程序跑飞或死循环的状态。设计者必须清楚看门狗的溢出时间以决定在合适的时候,清看门狗。清看门狗也不能太过频繁否则会造成资源浪费。在系统设计初以及调试的时候,不建议使用看门狗,因为系统设计初的时候意外的可能性太多,且有些意外是必须处理的,看门狗电路的复位信号很可能会引入更多的困扰。合理利用看门狗电路,我们就可以检测软件和硬件运行的状态,进一步提高系统的可靠性。5.9WatchDog模块介绍在使用看门狗之前首先要对看门狗的内部计数器进行配置。打开模型配置界面,在watchdog选项卡中,使能看门狗,再配置看门狗计数器的计时时间为0.209715s触发一次Timeoutevent,(从配置中可以看到,看门狗的时钟直接来自OSCCLK也就是外部晶振的时钟10MHz),然后配置TimeOutevent为Chipreset。具体配置如图所示。将看门狗模块的复位源信号设置为Timer0中断的周期,在Sampletime中填入-1,如图所示。同时在Timer0的中断中使两LED的电平在中断中翻转。
然后可以做两次对比性实验,一次实验的系统步长设置为0.5s(大于看门狗的溢出时间),另一次设置为0.1s(小于看门狗的溢出时间)。分别生成代码之后下载到开发板上观察实验现象。
从图中生成的代码中可以看到,每进一次定时器中断,便将看门狗计数器复位,也就是所说的喂狗。
在对比实验中,可以清楚地看到,当中断周期大于看门狗定时器的时间,芯片会一直复位,LED灯无法按照设定的频率翻转。反之则LED灯正常工作。5.10总结
本章主要介绍了智能平衡移动机器人片内外设模块的基本原理及MATLAB/Simulink的仿真实验,包括GPIO模块、ADC模块、Timer_IT模块、ePWM、eCAP及SCI串行通信和SPI串口通信的基本原理,以及对MATLAB/Simulink系统的设置过程,并结合MATLAB/Simulink对每个模块进行了模型搭建实验及自动代码生成。5.10总结智能平衡移动机器人第6章
智能平衡移动机器人进阶应用目录6.1eCAP超声波测距6.2ePWM电机调速6.3eQEP正交解码6.3.1正交编码器QEP概述6.3.2光电编码器电机测速的基本原理6.3.3eQEP正交解码模块使用说明6.3.4编码器信号采集6.4SIL软件在环测试6.5PIL处理器在环测试HC-SR04基本工作原理:(1)采用Trig引脚触发测距,给至少10us的高电平信号;(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过Echo引脚输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间;(4)测试距离=(高电平时间*声速(340M/S))/2。本实验所用的超声波HC-SR04模块如下图所示,左边为正面图,右边为反面图。基本介绍6.1eCAP超声波测距本模块使用方法简单,一个控制口发一个10us以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值其工作时序图如下图所示。基本介绍故我们只要用DSP28069的eCAP3引脚连接到HC-SR04的Echo引脚,再利用一个IO引脚(本实验选取GPIO23)作为HC-SR04的触发源Trig引脚,其原理图如下图所示。基本介绍整体框架关键模块T1表示t2-t1的差也就是测试方波的高电平时间对应的计数值关键模块最后将模型编译下载下载到主控板,然后在CCS中打开模型生成的工程文件,先点击编译,再点击调试,然后将下图的两个变量添加到Expressions中,再点击运行前,我们先将超声波传感器插在6号板子上(即MPU6050模块的板子)。然后在点击运行可以看到各个变量的值,用纸在超声波传感器的前方移动,观测Distan的变化是否和实际距离一致,同时观察两个LED的变化。实验效果实时刷新数据目录6.1eCAP超声波测距6.2ePWM电机调速6.3eQEP正交解码6.3.1正交编码器QEP概述6.3.2光电编码器电机测速的基本原理6.3.3eQEP正交解码模块使用说明6.3.4编码器信号采集6.4SIL软件在环测试6.5PIL处理器在环测试在有刷直流电机的固定部分有磁铁,这里称作主磁极;固定部分还有电刷。转动部分有环形铁芯和绕在环形铁芯上的绕组。如图所示的两极有刷直流电机的固定部分(定子)上装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁芯。定子与转子之间有一气隙。在电枢铁芯上放置了由A和X两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的铜片上,此铜片称为换向片。换向片之间互相绝缘,由换向片构成的整体称为换向器。换向器固定在转轴上,换向片与转轴之间亦互相绝缘。在换向片上放置着一对固定不动的电刷B1和B2,当电枢旋转时,电枢线圈通过换向片和电刷与外电路接通。有刷直流电机的工作原理6.2PWM电机调速直流电机速度是由功率大小控制的,所以,它是由占空比决定的(当然,也要控制频率跟上)。相关知识:1、电机和减速器的扭矩(N·m)=电机功率(W)/(2*π*转速/60)。2、占空比是指直流电机在一个通电与断电周期中其通电时间所占的比例,占空比越大,相对提供的功率越小。3、直流电机三相绕组按照规律周期性通电,转速越高,通电频率越高。4、增速过程(据第1、2、3条综合分析),电机扭矩不变时,占空比越小,提供功率越大,转速越高,电机绕组通电频率越高,导致扭矩有所增加,用以克服加速增加的阻力,直至平衡、稳速。有刷直流电机的工作原理结合有刷直流电机的原理,小车采用的是TI公司的DRV8833系列的有刷直流电机驱动芯片。DRV8833电机驱动芯片有两个全桥电路可以同时驱动两个直流无刷电机,其一个简单的PWM接口便可以方便地对控制器电路进行接口。本实验设置DRV8833工作在PWM输入模式,其原理图如下图所示:DRV8833基本介绍整体框架实验一和实验二为选择的是ePWM1,实验三和实验四选择的是ePWM2。分别将四个实验依次下载到主控板中,观察电机的转动方向。思考:1.在实验一中将WA设置为20,WB的值设为0,每次让WA增加5,观察电机的转动情况(每次WA增加5,电机转速是什么情况?)。2.在实验一中将WA设置为60,WB的值设为0,每次让WB增加5,观察电机的转动情况(当WB小于WA时,每次WB增加5,电机转速是什么情况?当给定WB的值大于WA时,每次WB增加5,电机转动方向和转速又是什么情况?)。目录6.1eCAP超声波测距6.2ePWM电机调速6.3eQEP正交解码6.3.1正交编码器QEP概述6.3.2光电编码器电机测速的基本原理6.3.3eQEP正交解码模块使用说明6.3.4编码器信号采集6.4SIL软件在环测试6.5PIL处理器在环测试
编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。根据光电编码器产生脉冲的方式不同,可以分为增量式、绝对式以及复合式3大类。增量式编码器一般安装在电机或其他旋转机构的轴上,在码盘旋转过程中,输出两个信号称为QEPA与QEPB,两路信号相差90°,这就是所谓的正交信号,当电机正转时,脉冲信号A的相位超前脉冲信号B的相位90°,此时逻辑电路处理后可形成高电平的方向信号Dir。当电机反转时,脉冲信号A的相位滞后脉冲信号B的相位90°,此时逻辑电路处理后的方向信号Dir为低电平。因此根据超前与滞后的关系可以确定电机的转向。基本介绍6.3eQEP正交解码
本套件平衡小车采用的是集成在JGB37-520减速电机上的增量式霍尔编码器。这是一款增量式输出的霍尔编码器。编码器有AB相输出,所以不仅可以测速,还可以辨别转向。根据下图的接线说明可以看到,我们只需给编码器电源5V供电,在电机转动的时候即可通过AB相输出方波信号。编码器自带了上拉电阻,所以无需外部上拉,可以直接连接到单片机IO读取。基本介绍DSP28069有两路eQEP模块,每个模块有2个引脚,分别是:QEPA和QEPB。这两个引脚被使用在正交时钟模式或者直接计数模式。本实验采用EQEP1和EQEP2模块获取左右轮编码器正交信息。其中EQEP1的QEP1A和QEP1B引脚分别连接到电机编码器1的A相和B相,EQEP2的QEP2A和QEP2B引脚分别连接到电机编码器2的A相和B相。本实验的原理图如下:基本介绍整体框架关键模块PWM调速的两个实验关键模块编译问题实验效果在上述配置完成,并完成模型的搭建后,将模型编译烧写到主控板,然后在CCS中打开模型生成的工程文件,先点击编译,再点击调试,然后将下图的两个变量添加到Expressions中,再点击运行。思考1.在实验一中将WA设置为30,WB的值设为0,每次让WA增加5,观察Left_Speed的大小变化情况。2.在实验一中将WA设置为0,WB的值设为30,每次让WB增加5,观察Left_Speed正负变化情况。3.在实验三中将WA设置为25,WB的值设为0,每次让WA增加5,观察Right_Speed的大小变化情况。4.在实验三中将WA设置为0,WB的值设为30,每次让WB增加5,观察Right_Speed的正负变化情况。5.将实验一和实验三的WA都设为最大值2000,观察Left_Speed和Right_Speed的最大值是多少。目录6.1eCAP超声波测距6.2ePWM电机调速6.3eQEP正交解码6.3.1正交编码器QEP概述6.3.2光电编码器电机测速的基本原理6.3.3eQEP正交解码模块使用说明6.3.4编码器信号采集6.4SIL软件在环测试6.5PIL处理器在环测试如图1所示,如果在Simulink模型中,将控制算法模型和被控对象模型连起来形成闭环,就是我们经常说的MIL,顾名思义,在模型层面上实现闭环测试。这种测试通常发生在两种场景之下,一是系统工程师为了验证算法,使用控制算法模型控制被控对象模型;另外一种是软件工程师做模型级别的集成测试。当然,MIL测试的前提是要有被控对象模型,搭建被控对象模型或者采购现成的被控对象模型都可以。MIL模型在环测试:
SIL测试,这里的Software是指控制策略模型转换成的C代码编译之后的软件。我们可以想象,对于图1,如果我们把控制策略模型替换成由控制策略模型转换得到的C代码编译后的DLL文件,如果我们使用了和MIL测试时相同的测试用例,如果我们的测试用例足够多,如果我们得到了和MIL测试相同的结果,那么我们是不是可以认为我们生成的C代码就和用于代码生成的模型是一致的呢?没错,SIL测试的目的就是为了验证自动生成的代码和用于代码生成的模型中行为上是一致的。SIL软件在环测试:图1模型在环测试(MIL)示意图6.4SIL软件在环测试
也就是说SIL测试是一种等效性测试,既然是等效性测试,那么我们就没必要搭建图1那样的闭环模型,而可以用图2实现等效性测试:图2软件在环测试(SIL)示意图
其实Simulink提供了SIL仿真模式,所以,我们可以用更方便的方式实现SIL测试,使用set_param(model_name,’SimulationMode’,’Software-in-the-loop(SIL)’)设置算法模型的仿真模式为SIL,然后对比Normal模式下的输出结果即可,并且这样做有助于过程自动化。如图3所示:图3选择SIL仿真模式测试第一步:MATLAB的当前文件夹如下,创建两个slx文件。第二步:打开Blink_LED.slx,配置Solver为定步长类型,离散型,步长1s等;HardwareImplementation配置如下。第三步:在AllParameters中输入CreateBlock找到对应的参数设置,我们选择SIL,再选择CodeGeneration>Verification>Enableportablewordsizes。第四步:搭建模型如下,点击编译下载按钮,稍等片刻会生成一个slx模型,我们将它复制到SIL_Blink_LED.slx中。生成的SIL模块产生一个方波第五步:在SIL_Blink_LED.slx中搭建模型如下,参数配置同Blink_LED.slx。第六步:分别将Normal和SIL模块添加信号线数据标记。第七步:添加两个Lamp,分别与两个信号线绑定,信号线输出为0的时候,Lamp为绿色;输出为1的时候,Lamp为红色。求差,用于验证是否有误第八步:点击Run运行,仿真结束,看见两个Lamp都为红色,双击Scope查看三路输入的曲线,中间一路数据为0,说明SIL生成代码的仿真结果和实际Normal的仿真结果一致。延时一个采样周期数据类型转换生成的SIL模块目录6.1eCAP超声波测距6.2ePWM电机调速6.3eQEP正交解码6.3.1正交编码器QEP概述6.3.2光电编码器电机测速的基本原理6.3.3eQEP正交解码模块使用说明6.3.4编码器信号采集6.4SIL软件在环测试6.5PIL处理器在环测试
SIL测试是验证代码和模型的一致性,代码运行在Windows平台上,某种程度上说,这并不能保证代码到目标处理器上的运行结果也能够和模型保持一致。所以,就有了PIL测试。
PIL和SIL的不同之处在于,SIL将生成的代码通过DLL的方式运行在Windows平台上,而PIL,是将生成的代码运行到目标处理器上,两种模式使用的编译器也是不同的,SIL使用的就是Windows下的编译器,比如VisualStudioC++或者LCC编译器,而PIL使用的是目标编译器。前面说过,等效性测试的目的是为了防止代码生成过程出错,同样,编译过程也可能出错,编译器也可能有bug,综合模型测试、SIL测试和PIL测试的结果,也可以帮助我们发现编译器出错可能引入的bug。
SIL和PIL是等效性测试,测试的目的是为了验证自动生成的代码和模型具有相同的行为,既然如此,对于SIL和PIL的测试用例就没有功能意义上的要求,只要要求代码和模型输入的测试数据相同即可,当然希望数据量足够大,能够覆盖各种路径以及各种信号范围。另外,因为PIL测试中代码运行在实际的控制器上,所以PIL测试除了可以验证代码和模型是否一致之外,还可以获得算法在实际控制器上的最长运行时间,而这个最长时间的价值,做嵌入式实时软件开发的工程师都懂得。6.5PIL处理器在环测试
在PIL测试中,生成的代码运行在TexasInstrumentsC2000处理器上。将PIL仿真结果传递给Simulink,验证仿真结果的数值等效性和代码生成结果。PIL验证过程是开发周期的一个关键部分,以确保部署代码的行为与设计相匹配。本实验将采用Mathworks官方提供的例子来介绍如何使用子系统创建PIL
Block方法配置用于代码生成和验证的Simulink模型。
我们提供的板子不支持通过USB数据线与Simulink通信,需要用到USB转TLL模块实现,前面已经介绍USB转TTL模块如何与主控板的连接,这里就不再介绍。
第一步:首先在电脑的设备管理器找到USB转TTL对应的COM口,然后在MATLAB中打开此模型所在的文件路径,里面一个Simulink模型和PIL通讯说明。第二步:在MALAB命令行窗口输入如下命令
按上述方法设置COM端口,并将以下命令中的“COM1”替换为与主控板对应的正确串行端口:setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','COMPort','COM1');%选择对应的COM通过输入波特率设置PIL通信的波特率为setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','BaudRate',115200);通过以下命令启用串行通信PIL:setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','enableserial',true);第三步:打开c2000_pil_block.slx,看见Controller下方有一个需要连接的模块,这个就是需要将Controller生成PIL的模块。第四步:我们首先在AllParameters中输入CreateBlock找到对应的参数设置,我们选择PIL,选择Ode3求解器,定步长为0.01s,选择在将程序烧写到RAM减少编译时间。第五步:我们选择Controller子系统单击鼠标右键,在C/C++Code中选择将此子系统部署到硬件,随后会出现下图的界面,然后点击Build,稍等片刻我们可以看见会出现一个新的模块以及在MATLAB的当前文件夹生成了一个Controller_pbs.mexw64和代码文件。第六步:将生成的Controller模块复制到c2000_pil_block.slx模型缺少的模块那里,ManualSwitch开关选择与上面的子系统连接,然后在点击Run按钮,稍等片刻可以看见Scope会生成一条曲线,然后将ManualSwitch开关选择与下面的子系统连接,可以看见Scope的数据和Controller连接是的曲线一样,说明代码到目标处理器上的运行结果也能够和模型保持一致。感谢倾听合肥工业大学智能平衡移动机器人第6章
智能平衡移动机器人进阶应用目录6.6S-Function6.6.1使用手写S-函数合并定制代码6.6.2使用S-FunctionBuilder块合并定制代码6.6.3使用代码继承工具合并定制代码6.7OLED12864显示6.8MPU6050数据读取6.9ADC电压采集6.10本章小结我们可以使用S-Function扩展Simulink®对仿真和代码生成的支持。例如,可以使用它们:表示自定义算法将现有外部代码集成到Simulink和代码生成器中表示与硬件对接的设备驱动程序为嵌入式系统生成高度优化的代码在Simulink仿真过程中验证为子系统生成的代码通过S-Function的应用程序编程接口,可以非常灵活地在Simulink环境中实现通用算法。以下情形适合用S-Function来实现仿真和代码生成:“我不关心效率,我只想让我的算法能够自动在Simulink和代码生成器产品中工作。”“我想在Simulink和代码生成器产品中实现一种高度优化的算法,它看起来就像是一个内置模块,并且能生成高效的代码。”“我有很多人工代码需要集成。我希望高效地从Simulink和代码生成器产品中调用我的函数。”6.6S-Function
下面以Mathworks官方的一个实例来简单介绍Simulink中生成S-Function的三种常用手段。使用S-FunctionBuilder块。使用此方法,可以将S-函数的特征输入到块对话框中.这种方法不需要任何有关编写S-函数的知识。但是,对S-Function结构的基本理解可以使S-FunctionBuilder对话框更易于使用。使用代码继承工具(LegacyCodeTool)。使用此命令行方法,在MATLAB工作区中的数据结构中定义S-函数的特征。这种方法所需的S-函数知识最少。手写wrapperS-function。使用这种方法,您可以手动编写一个新的C、S-函数和相关的TLC文件.这种方法需要对CS-函数的结构有更多的了解。第一步:首先确保wrapsfcn.c、doubleIt.c和doubleIt.h在该路径下,再打开sfcndemo_choosing_sfun.mdl。第二步:编译wrapsfcn.cS-function,请运行以下mex命令。当前文件夹下生成一个mex64文件。mexwrapsfcn.cdoubleIt.c6.6.1
使用手写S-函数合并定制代码在S-FunctionBuilder对话框中进行如下操作1.在S-functionname输入:S-Function的名称builder_wrapsfcn,S-functionParameters面板列出了S-FunctionBuilder所包含的参数。2.在数据属性(DataProperties)页面:指定输入(input)和输出(output)端口的名称分别为in1和out1。3.库文件(Libraries)页面:Library/Object/Sourcefiles模板输入:doubleIt.cIncludes模板输入:#include<math.h>#include<doubleIt.h>4.输出(Outputs)页面输入:*out1=doubleIt(*in1);5.编译信息(BuildInfo)页面选择GeneratewrapperTLC
option。6.6.2
使用S-FunctionBuilder块合并定制代码当你完成以上操作后,点击“Build”,S-FunctionBuilder会生成三个文件。FileNameDescriptionbuilder_wrapsfcn.cThemainS-function.builder_wrapsfcn_wrapper.cAwrapperfilecontainingseparatefunctionsforthecodeenteredintheOutputs,ContinuousDerivatives,andDiscreteUpdatespanesoftheS-FunctionBuilder.builder_wrapsfcn.tlcTheS-function'sTLCfile.确保doubleIt.c和doubleIt.h文件位于您的工作文件夹中,然后在MATLAB命令提示符下键入lct_wrapsfcn运行脚本,或者双击打开lct_wrapsfcn.m然后在编辑器工具栏下方点击运行(run)。脚本通过以下命令创建和编译S函数legacy_wrapsfcn.c,并创建TLC文件Legal_Wrapsfcn.tlc。%CreatetheLegacyCodeTooldatastructuredef=legacy_code('initialize');%Populatethedatastruturedef.SourceFiles={'doubleIt.c'};def.HeaderFiles={'doubleIt.h'};def.SFunctionName='legacy_wrapsfcn';def.OutputFcnSpec='doubley1=doubleIt(doubleu1)';def.SampleTime=[-1,0];%GeneratetheS-functionlegacy_code('sfcn_cmex_generate',def);%CompiletheMEX-filelegacy_code('compile',def);%GenerateaTLC-filelegacy_code('sfcn_tlc_generate',def);关于命令的解释请参阅:/help/simulink/slref/legacy_code.html?searchHighlight=Integrate%20C%20Functions%20Using%20Legacy%20Code%20Tool&s_tid=doc_srchtitle关于命令的使用请参阅:/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool.html6.6.3
使用代码继承工具合并定制代码
OLED(有机发光二极管)作为一种新型的显示技术,其自身可以发光,亮度、对比度高,功耗低,在当下备受追捧。在正常的显示调整参数过程中,这种屏幕被越来越多地使用。我们使用的一般是分辨率为128x64,尺寸为0.96寸的屏幕。由于其较小的尺寸和比较高的分辨率,让它有着很好的显示效果和便携性。目前我们经常使用的OLED屏幕一般有两种接口,IIC或者SPI,两者使用的通信协议稍有不同,这里OLED屏幕硬件上采用SPI协议的接口,软件上采用的模拟SPI协议。6.7
OLED数据显示实验名称用途DSP28069引脚GND电源地GNDVCC电源正(3.3~5.5V)3.3VSCL在SPI和IIC通信中为时钟管脚GPIO51SDA在SPI和IIC通信中为数据管脚GPIO53RES用来复位(低电平复位)GPIO54DC数据和命令控制管脚GPIO55CS片选管脚GPIO11模块接口定义与连接图第一行显示:AnHuiHopemotion;第二行显示:BalanceCar;第三行显示:56.62;第四行显示:120实验目标实验操作新建模型,完成系统时钟、步长为0.005s等相关参数的配置。从外设驱动工具箱选择初始化函数模块Initial_OLED完成IO的初始化,然后在在主函数的While循环中完成液晶的显示,最后通过两个LED的亮灭验证程序是否正常在运行。点开字符显示模块可以发现参数窗口X、Y,X表示第一个字符所在的行,Y表示第一个字符所在的列,通过设定X、Y即可设置字符所在的位置注意输入会将字符转化成ASCII,要用到abs('*'),*表示你输入的字符,例如在Constant模块中输入[abs('H'),0],输入字符串,例如[abs('H'),abs('M'),0],注意最后一个字符输入为0,否则会出现乱码,Constant最好为unit8型。注模块介绍整体框架
左边的display_string_8x16模块将X、Y的参数都设为1,(X表示行1、3、5、7,Y表示列1-120);右边的display_string_8x16模块将X、Y的参数分别设为3、24;OLED_show_float模块将X、Y的参数分别设为5、24,Len(数据长度)为4,Dot(小数点位数)为2,这里为了验证能否输出为56.62;OLED_show_numbe模块将X、Y的参数分别设为7、24,Len(数据长度)为3。
在完成上述配置,并完成模型的搭建后,将液晶显示模块插在主控板上,然后将模型编译烧写到主控板,观察OLED是否能够正常显示想要的数据。模型烧写到DSP中,OLED显示的结果如下图所示:实验效果
为了完成小车的直立控制需要测量小车的倾角和角速度。而InvenSense公司推出的MPU6050就集成了三轴加速度计,可以通过IIC接口同时输出三个方向上的加速度信号。MPU6050里面集成了三轴陀螺仪,可以同时输出三个方向的陀螺仪信号。MPU6050内部也置入了一个温度传感器。MPU6050是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。MPU6050基本介绍
6.8
MPU6050数据读取实验MPU6050模块的接口定义与连接图引脚名称说明DSP28069VCC3.3-5V(内部有稳压芯片)5VGND地线GNDSCLMPU6050作为从机的IIC时钟线SCLASDAMPU6050作为从机的IIC数据线SDAAXCLMPU6050作为主机的IIC时钟线
XDAMPU6050作为主机的IIC数据线
ADO地址管脚,该管脚决定了IIC地址的最低位GNDINT中断关键模块通过调用ReadData()函数并给出相应的参数,便可以得到MPU6050的原始数据。该模块是集成了经过卡尔曼滤波后得到的车身角度、陀螺仪x轴角速度、陀螺仪Z轴角速度完成I2C通信协议的初始化完成MPU6050传感器陀螺仪的量程±2000°/S、加速度计量程±4g等配置为了完成平衡移动机器人的直立控制需要测量平衡移动机器人的倾角和角速度。实验目标实验操作完成系统时钟等相关配置。首先完成初始化函数的搭建,然后将MPU6050的数据读取出来以及将角度值提取到存储模块中,通过LED1灯的亮灭来验证模式有没有烧写到主控板中,然后将读取的角度值通过OLED模块实现数据显示。注意:因为角度值有正有负,所以加了一个正负条件判断,特别要注意数据类型要一致通过以上步骤完成整个模型搭建。将模型烧写到主控板,将液晶显示模块插在主控板上,将车子分别平衡放置、往前倾、往后倾,查看OLED显示的数据。关键模块实验效果将模型烧写到主控板,将液晶显示模块插在主控板上,将车子分别平衡放置、往前倾、往后倾,查看OLED显示的数据。本实验使用电阻分压的方式对电池电压进行测量,根据我们的经验,一般航模电池的电量是和电压相关的,比如满电的时候是12.6V,过放(电压低于9.6V)必然导致电池永久过放,所以我们有必要通过监控电池电压的变化,近似表示电池的电量,在电池电量比较低的情况下,提醒我们充电。电压检测模块的原理图如下图所示。简单分析可知,电池电压经过电阻分压,衰竭为原来的1/11之后,送单片机ADC检测,以12位ADC的DSP28069举例,temp为ADC采集的变量,那么很容易计算得到电池的电量:Volt=temp*3.3*11/4096(单位:V)。基本原理介绍6.9
ADC采集电池电压实验完成使能ADC的时钟;设置SOC1采样通道ADCINA0;设置SOC1采样窗大小等操作。AdcRegs.ADCSOCFRC1.bit.SOC1=1;//SOC1开始转换temp=AdcResult.ADCRESULT1;//获取SOC1结果寄存器的值Volt=(float)(temp*3.3*11/4096);//计算电池电压关键模块使用电阻分压的方式对电池电压进行测量。实验目标实验操作完成系统时钟等相关配置从外设工具箱找到ADC初始化函数模块、电压检测函数模块从外设工具箱找到电压数据存储模块、电压数据写入模块、电压数据读取模块利用液晶在While循环显示电压值,display_string_8x16显示“Volt:”字符,X=3、Y=24(X/Y可自行设定),OLED_show_float读取电压值,X=3、Y=64、Len=4、Dot=2完成以上配置,搭建模型将模型烧写到主控板,将液晶显示模块插在主控板上,然后打开带有电压检测电路的电源板供电开关,查看OLED显示的数据关键模块整体框架实验效果将模型烧写到主控板,将液晶显示模块插在主控板上,然后打开带有电压检测电路的电源板供电开关,查看OLED显示的数据。
本章主要介绍了智能平衡移动机器人的进阶应用,包括eCAP超声波测距、ePWM电机调速、eQEP正交解码、SIL软件在环测试、PIL处理器在环测试、S-Function、OLED12864显示、MPU6050数据读取、ADC电压采集以及相关MATLAB/Simulink的搭建与仿真实验。通过本章的学习,接下来可以利用平衡移动机器人完成更为综合的应用。6.10
本章小结智能平衡移动机器人第7章
综合实验合肥工业大学
7.1平衡控制——直立环
7.1.1平衡控制原理 7.1.2平衡控制模型 7.1.3平衡控制中基于模型设计与自动代码生成技术 7.1.4平衡控制应用现象
7.2平衡控制——速度环
7.2.1应用原理 7.2.2速度控制模型 7.2.3速度控制应用现象7.3APP控制 7.3.1应用原理 7.3.2APP控制模型 7.3.3APP控制应用现象 7.4红外循迹应用 7.4.1模块介绍 7.4.2使用原理 7.4.3模型搭建
7.4.4具体实验现象
7.1平衡控制——直立环7.1.1平衡控制原理下图是一个单摆模型,对其进行受力分析如图。在重力作用下,单摆受到和角度成正比,运动方向相反的回复力。而且在空气中运动的单摆,由于受到空气的阻尼力,单摆最终会停止在垂直平衡位置。空气的阻尼力与单摆运动速度成正比,方向相反。F=−mgsinθ≈−mgθ总结单摆能够稳定在垂直位置的条件有两个:受到与位移(角度)相反的回复力,在此回复力作用下,单摆便进行周期运动。受到与运动速度(角速度)相反的阻尼力。阻尼力越大,单摆越会尽快在垂直位置稳定下来。直立着的车模可以看成放置在可以左右移动平台上的倒立着的单摆。倒立摆之所以不能象单摆一样可以稳定在垂直位置,就是因为在它偏离平衡位置的时候,所受到的回复力与位移方向相同,而不是相反!因此,倒立摆便会加速偏离垂直位置,直到倒下。如何通过控制使得倒立摆能够像单摆一样,稳定在垂直位置呢?两个办法:X改变重力的方向;增加额外的受力,使得恢复力与位移方向相反才行。控制倒立摆底部车轮,使得它作加速运动。这样站在小车上(非惯性系,以车轮作为坐标原点)分析倒立摆受力,它就会受到额外的惯性力,该力与车轮的加速度方向相反,大小成正比。这样倒立摆所受到的回复力为:式中,由于θ很小,所以进行了线性化。假设负反馈控制是车轮加速度a与偏角θ成正比,比例为k1。如果比例k1>g(是重力加速度)那么回复力的方向便于位移方向相反了。此外,为了使得倒立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力。虽然存在着空气和摩擦力等阻尼力,相对阻尼力比较小。因此需要另外增加控制阻尼力。增加的阻尼力与偏角的速度成正比,方向相反。因此可以得到下式:按照上面的控制方法,把倒立摆模型变为单摆模型,能够稳定在垂直位置。因此,可得控制车轮加速度的控制算法。式中,θ为车模倾角;θ‘为角速度;k1、k2均为比例系数;两项相加后作为车轮加速度的控制量。只要保证在条件下,可以使得车模像单摆一样维持在直立状态。其中有两个控制参数k1>g、k2>0,决定了车模是否能够稳定到垂直平衡位置,它必须大于重力加速度;决定了车模回到垂直位置的阻尼系数,选取合适的阻尼系数可以保证车模尽快稳定在垂直位置。在角度反馈控制中,与角度成比例的控制量是称为比例控制;与角速度成比例的控制量称为微分控制。因此上面系数分别称为比例和微分控制参数。其中微分参数相当于阻尼力,可以有效抑制车模震荡。总结控制车模直立稳定的条件如下:(1)能够精确测量车模倾角θ的大小和角速度θ'的大小;(2)可以控制车轮的加速度。直立控制算法的关键在于获取车模的角度和角速度,通过测量车模的倾角和倾角速度控制车模车轮的加速度来消除车模的倾角。测量车模倾角和倾角速度可以通过安装在车模上的加速度传感器和陀螺仪实现。而车模的倾角以及角速度的测量,我们使用的MPU6050集成了三轴陀螺仪和三轴加速度计,可以通过IIC接口同时输出三个方向上的加速度信号和陀螺仪信号。车模运行速度和加速度是通过控制车轮速度实现的,车轮通过车模两个后轮电机经由减速齿轮箱驱动,因此通过控制电机转速可以实现对车轮的运动控制。加速度控制量由施加在电机上面的电压代替,直接调节控制电机的PWM的占空比来调节电机转动的加速度。7.1.2平衡控制模型关键模块关键模块关键模块关键模块7.1.3平衡控制中基于模型设计与自动代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西壮族自治区药用植物园公开招聘实名编制高层次人才16人笔试题库含答案详解(培优B卷)
- 2026广东惠州市博罗县罗浮山文化旅游集团有限公司下属子公司招聘6名考前冲刺密卷附参考答案详解(研优卷)
- 篮球过人考试题目及答案
- 康复评定考试题目及答案
- 清华附属期末考试题及答案
- 功能性纤维生产线项目环境影响报告书
- 工程施工项目管理实务
- 工程施工精细化管理方案
- 高盐废水资源化利用项目安全生产应急管理预案
- 钢筋工程标准化施工作业指导书
- 客运驾驶员安全培训课件
- 人教版四年级下册数学计算题每日一练带答案(共15天)
- 云南省相对集中行政处罚权事项指导目录(2024年版)
- Unit1-Unit3 (单元测试)-2024-2025学年人教PEP版(2024)英语三年级上册
- 华师大版初中数学知识点梳理
- 人民军队优良传统附有答案
- 人教版高中物理必修二同步练习及答案
- GB/T 43632-2024供应链安全管理体系供应链韧性的开发要求及使用指南
- (4059题)2023年学习强国挑战赛答题题库附答案(最全版)
- 体育与健康六年级上期教案
- 首营企业、品种、客户审批表
评论
0/150
提交评论