tag 标签: tms320f28027

相关博文
  • 热度 19
    2015-1-7 08:28
    1297 次阅读|
    0 个评论
    随着32位DSP的普及,32位处理器已经成为控制领域的主流产品,与传统的微处理器相比速度更快、性能更强、资源丰富,更符合发展的脚步。TMS320F28027是一款32位的DSP,具有运算速度快、稳定性高的优点。本文利用TMS320F28027控制两个步进电机,从而使物体在平面内运动,实现物体在平面内可以任意地画指定的曲线和圆等。图1为悬挂系统的模型。 1 系统总体方案的设计 图2为悬挂系统控制框图,以TMS320F28027为控制芯片,利用L298N 驱动两个步进电机。步进电机采用42HS4813A4,其额定电流为1.3A,步距角为1.8°,利用LCD-12864液晶显示被控制物的实时坐标。控制2个步进电机正向、反向转动来达到物体在平面内任意运动的效果。 图1 悬挂系统的模型 图2 悬挂系统控制框图 2 硬件电路设计 2.1 L298N L298N是ST公司生产的一种高电压、大电流电机驱动芯片。图3为L298N模块的电路原理图。该芯片的主要特点是:工作电压高,其最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H 桥的高电压大电流全桥式驱动器。利用2个L298N来分别控制2个步进电机,步进电机的额定电流为1.3A,同时通2相时,电流为2.6A,L298N 可以达到42HS4813A4步进电机的电流要求。 图3 L298N模块电路原理图 2.2 绝对式编码器 绝对式编码器的精度必须要高于步进电机的精度,所以这里采用的是10位绝对式编码器。选用的型号是Mini1024J,精度为10位,优点在于采用无接触霍尔检测技术,传感器运行不受灰尘或其他杂物影响,很好克服了基于光学检测原理的缺点。 3 系统软件设计 3.1 几何关系1:从任意点移动到任意点算法 坐标示意图如图4所示,有如下的边长和角度关系: 图4 坐标示意图 3.2 几何关系2:当前位置坐标显示算法 如图5所示,存在以下的角度和边长关系: 控制代码如下: 图5 坐标示意图 3.3 电机位置闭环控制方法 步进电机闭环控制框图如图6所示,TMS320F28027分别用2个定时器来控制两个电机,用绝对式编码器对位置进行监控,进行失步补偿,保证位置正确,并且可以使曲线圆滑。 图6 步进电机闭环控制框图 步进电机的型号为42HS4813A4,为了防止失步,步进电机每步的最小间隔为4ms,并且用软件对步进电机进行了十六细分,即每步的间距为0.45°。控制电机部分的程序流程图如图7所示。 图7 控制电机部分的程序流程图 控制代码如下: 3.4 画图算法 利用几何关系任意点到任意点的算法,分别给处理器一连串的位置坐标,控制物体的运动轨迹,如图8所示。 图8 画圆取点示意图 相同间隔取N个点,分别输入处理器,来控制物体的坐标。将取的点传递给TMS320F28027时,为了让圆足够的平滑,消去锯齿状,所以在圆上取了200个点。控制代码如下所示: 4 系统测试 系统完成后,进行了两项测试,分别是画圆运动和运动到指定点。 其中画圆运动测试是在输入圆心坐标以及半径后,对实际画出圆的直径与理论直径作了对比,并且记录了画圆的耗时。此测试中,圆心坐标为(40.0cm,40.0cm),输入的半径值为30.0cm,测试结果如表1所列。 表1 画图运动测试结果 其中,运动到指定点测试是以坐标原点为起始点,在输入指定坐标之后,对原点到指定点距离的理论值和实际值作了对比,并且记录了运动完后回到原点的误差距离,即是否能准确回到原点。在此测试中,运动的原点坐标为(0cm,0cm),目标坐标为(49.0cm,50.0cm),即距离原点为70.0cm,实际测试时,运动到(49.1cm,49.2cm),即距离原点69.5cm,测试结果如表2所列。 表2 运动到指定点测试 由测试结果可看出,该系统具有高效、稳定、准确的优点,符合实验预期。
  • 热度 22
    2014-2-23 12:37
    2621 次阅读|
    0 个评论
    看各位大神都在EDNchina上发表自己的技术博客,特权、王敏志大神是FPGA领域内大牛级别的人物,看他们的技术博客总能收获良多。夏宇闻老师的书加上这两位大神的博文让我在探索FPGA的世界中少走了很多弯路。自己也希望能有一天像他们那样,对某个技术既有全面的掌握,更有独到的见解。看他们写的那么优秀的博文,我甚至不敢在网站上去发表自己的见地,总觉得自己的想法是肤浅的,没有意义的。犹豫了很久,今天还是鼓起勇气来写一篇,是的,不敢暴露自己的错误就永远不会进步,不发表自己的观点,就无法得到高手的指正。记得那位写MSP430F147的软核的大牛说过一句:我写的这个东西不会拿来卖钱,只会起到抛砖引玉的作用,吸引更多的人进入到这个领域,同时引出真正的大神。 花了两天的时间,仔细把F2802x系列的ePWM模块的子模块看了一遍,没有强迫自己去记那些繁琐的寄存器,只是对各个模块的功能有了一些初步的印象,从官方的介绍中抽象出了便于自己理解的模型。这个系列的ePWM主要由以下几个子模块构成:时基模块(Time-base module)、计数比较模块(counter compare module)、动作限定模块(Action qualitier module),死区产生模块(Dead-band module),斩波模块(PWM chopper module),制动模块(Trip zone module),事件触发模块(Event trigger module),数字比较模块(Digital compare module)。 时基模块说的简单点就是一个计数器模块。了解PWM波产生机理的人都知道,PWM波产生就是一个计数器不断的循环计数,然后另外有一个比较模块,时刻将该计数器中的计数值与自己设定的某个值相比,当计数值与预设值相等时,则产生一个高脉冲,对应的动作模块在接受到这个高脉冲时就会产生拉高、拉低或翻转输出的动作,即实现PWM波产生。那么这个时基模块其实就是扮演的一个计数器的角色。这个计数器和大多数计数器一样,也可以进行增计数(up model)、减计数(down model)、增减计数(up-down model),不过,这个计数器比其它计数器高级一点的地方就在于它含有一个同步功能。比如有三个ePWM模块工作,那么就有三个这样的计数器。如果不进行同步,那么这三个计数器中的值之间的关系是不确定的,也就导致各个ePWM输出的PWM波的相位是不确定的。如果我们需要各个ePWM模块的输出有严格的相位关系(如相差180°),那么就可以采用这个同步功能,将各个计数器产生同步事件时的初始值进行设定,然后给出一个同步信号,那么各个计数器的值就会马上从设定的初始值处开始继续计数,通过这种方式,即可实现多路PWM波相位限定的功能。(PS:记得去年电赛假期培训时,用FPGA产生两路相位可调的PWM波,PWM波是出来了,可就是无法调整相位,采用了很多种方法都没能实现,最后不得不放弃改而用别的方案,这次看到这种设计方式,顿觉高明,那个没能实现的模块我想这次我会很快就能写出来了。也许这种设计在大神们眼中早已司空见惯,可对于我们这种摸着石头过河的本科僧来说,还是很有含金量的。) 当然,时基模块还会产生一系列的输出信号,如(计数值==0(CTR=0))、(计数值==PRD(CTR=PRD))以及计数器计数方向((CTR Dir)向上or向下,用于up-down模式中),这些信号作为其他模块的输入信号,后面会讲到。这里我也就不多说,所知甚浅嘛哈哈,再多说就是关公面前耍大刀了。 和时基模块有密切关系的另一个模块就是计数比较模块,这个模块在上面已经有提到。这里的计数比较模块主要实现的功能就是每个系统时钟到来时将预设比较值与时基模块中计数器的计数值进行比较,当计数值与比较器中预设值相等时则产生一个计数时钟周期的高脉冲,这个高脉冲则会触发动作限定模块产生对应的高低电平变化,即产生PWM波。每个计数比较模块都有两个比较通道,这两个比较通道产生的比较事件都可对两个输出(EPWMxA、EPWMxB)的状态进行控制。总体来说,这个比较模块就是一路输入,两路输出。输入是计数器中的计数值,输出是两个比较通道上的状态(CTR=CMPA,CTR=CMPB),预设值与计数值相等则输出高电平,不等则输出低电平。 动作限定模块就是决定当比较事件发生时输出上究竟作何变化的模块。这个模块有5个输入信号,其中(计数值==0(CTR=0))、(计数值==PRD(CTR=PRD))以及计数器计数方向((CTR Dir)向上or向下,用于up-down模式中)这三个信号来自时基模块,两个比较通道上的状态(CTR=CMPA,CTR=CMPB)来自计数比较模块。动作限定模块根据控制寄存器中的设定,对输入的5路信号进行反应,输入的CTR=0、CTR=PRD信号都可通过设置直接影响输出,当为增计数模式或减计数模式时,CTR=CMPA、CTR=CMPB都可通过设置直接影响输出,当为增减计数模式时,CTR=CMPA、CTR=CMPB则配合CTR Dir信号进行输出状态的控制。动作限定模块可通过设置,根据输入信号对输出产生拉高、拉低、翻转、保持四种动作。 死区产生模块的作用就是对来自动作限定模块的两路输出PWM波的上升沿和下降沿进行一定的延时,延时时间可设定。模块即可只对输入信号的上升沿或下降沿延时,也可对上升沿和下降沿都进行延时。 斩波模块的作用就是对加入死区后的PWM波用一个更高频率的载波进行二次调制,以得到更高的信号频率。斩波模块可对调制后的信号第一个脉冲宽度进行调制,并调制其后脉冲的占空比。这样做的目的是为了保证第一个脉冲能让被驱动的开关管有足够的驱动功率以便顺利开启。 制动模块的作用就是根据外部制动输入信号对PWM输出状态进行强制限定,已达到迅速关闭输出的效果。有6组输入制动信号,TZ1-TZ6,TZ1-TZ3由外部输入引脚供源,TZ4由EQEP1ERR供源,当然,这个信号并不是所有的器件都有,只有在包含EQEP1模块的器件中才有。TZ5被连接至系统时钟故障逻辑模块,TZ6被连接至CPU的EMUSTOP信号。数字比较信号也可被用作制动输入信号。所有的制动输入信号都可以被配置来产生单次或循环的制动动作。模块同时支持软件强制制动。 事件触发模块就是通过设置对来自时基模块,计数比较模块,数字比较模块的信号进行处理并触发中断或ADC转换的模块。 数字比较器模块就是将模拟比较器的输出和外部输入制动信号进行比较以产生制动信号。对于这两点,脑海中不是特别清晰,感觉理解有误,也就不敢多言,怕误导了大家。 补充一点,很多模块中的寄存器都有一个影子寄存器,计数比较模块的预设值寄存器CMPx有一个影子寄存器,动作限定模块中的AQCSFRC也有一个影子寄存器。所谓影子寄存器,其与活动寄存器地址相同,当使用影子寄存器时,对活动寄存器的读取并不是直接读到的活动寄存器中的值,而是影子寄存器中的值,同样的,对活动寄存器的写也并不是立即写到了活动寄存器中,而是先写在影子寄存器中。影子寄存器中的值只有在某个特定的事件产生时才会与活动寄存器进行同步,如时基计数器中的值等于0或PRD。即影子寄存器相当于对应活动寄存器的一个缓存,对活动寄存器的读写都是在对影子寄存器进行操作,影子寄存器每当一个周期性的事件到来时与活动寄存器进行一次同步。这样就有可能出现对寄存器的写并不能马上生效的问题,从而影响事件延迟发生。例如,当前计数器为增计数模式,影子寄存器与活动寄存器的同步事件设为当计数值=PRD时。某一时刻计数值为0x0080,而预设比较寄存器的值为0x007F,此刻给预设比较寄存器写入0x0090这个值,这个值并不会直接写入活动的预设比较值寄存器,而是写入了对应的影子寄存器,这样,活动的预设比较器中的值还是0x007F,当计数值增加到0x0090时并不会产生比较事件。只有当计数值达到PRD的值时,活动的预设比较寄存器的值从对应的影子寄存器中被更新为0x0090,只有当计数器下一轮计数到0x0090时才会产生比较事件。即某个突变的预设比较值的变化有可能会因为影子寄存器的存在而产生一个PRD的延迟。TI的TMS320x2802x, 2803x Piccolo Enhanced Pulse Width Modulator (ePWM) Module Reference Guide 提供了如何避免这种问题的详细解决方案。(参看P44。) 初次接触这个芯片,以前自己一直是搞硬件的(PCB,FPGA)。现在因工作需要开始学习DSP,难免储备不够,理解中有偏差,若有不对的地方,还劳烦各位大神指出,以便小弟学习更正。  
相关资源
  • 所需E币: 3
    时间: 2019-12-24 16:30
    大小: 1.68MB
    上传者: givh79_163.com
    tms320f28027中文手册TMS320F28027,TMS320F28026,TMS320F28023,TMS320F28022TMS320F28021,TMS320F28020,TMS320F280200www.ti.com.cnZHCSA13I……