基于DSP2812的运动控制平台
扫描二维码
随时随地手机看文章
在大二的时候我加入到了学院的创新实验室,加入实验室后每天都很努力,怕学习不好表现不好会被导师赶出去,每天早上7点签到,然后就开始学习英语,如果有课就在8点去上课,没课就开始学习相关专业课;晚上必须在实验室待到10点以后才能回寝室,每个假期只能回家一周多,所以从大二开始我就没有了寒暑假,这些都是导师的要求,也是工作室每个成员必须做到的。大二导师主要抓模数电和单片机,记得曾经做过OCL模拟功放,数字功放,电源等一些模拟类设计,并以音质和效率进行评比;用单片机做过一些多功能数字钟,红外解码等一些作品,数字钟以运行一天谁的误差最小来评比。
到了大三,我们每个人根据自己的兴趣爱好选择了自己的方向,我们实验室一直以来都是以FPGA为主打方向的,很多人选择了FPGA,而我却选择了DSP,实验室师兄做DSP的也几乎没有,我就成立孤军奋战。接下来凑了1000元买了开发板,开始接触DSP,刚开始的入门真的遇到了很多的问题,总是踏不进那个门槛,一个人的钻研会浪费更多的时间,但每个问题让人记忆犹新,如今论坛上很多刚接触DSP的网友遇到的问题也就是当初我遇到过的。
基本熟悉了DSP2812后我做的第一个设计就是2011年中国机器人大赛项目中的机器人游中国小车,整个车体的硬件单路都是我们自己设计,画PCB并用学院的PCB刻板机花一夜的时间做出来,焊接调试,可能是由于设计的不合理和保护做的不是很好,烧坏过2块核心板;第二个设计就是我要快乐分享的运动控制平台的设计,下面就是我的设计:
设计以TMS320F2812为控制器,结合其控制方便、处理速度快等特点,运用PID算法进行速度环调节,500线光电编码器进行速度的反馈,变M/T法进行速度的精确采集,霍尔电流传感器进行电流的采集和继电器确保过流的断电保护,可控恒流源控制负载大小,VB6.0可视化控制界面的编写,设计了兼有PWM和模拟量控制的直流无刷电动机闭环在线调试系统,给出了该系统的功能、硬件结构和软件设计方法。系统中的主要控制对象是直流无刷电机,还有磁粉制动器作为电机的模拟负载,下面简单介绍一下直流无刷电机和磁粉制动器:
直流无刷电机利用电子换向器取代了机械电刷和机械换向器,因此使这种电机不仅保留了直流电机的优点,而且又具有交流电机的结果简单、运行可靠、维护方便等优点,使它一出现就以极快的速度发展和普及,广泛应用于航空航天,精密仪器,现代家电等领域。磁粉制动器是根据电磁原理和利用磁粉传递转矩的。磁粉制动器具有激磁电流和传递转矩基本成线性关系,作为电机的模拟负载,在调试闭环参数时可以通过调节恒流源的电流大小去控制负载的大小,从而找出最佳闭环系数。
在整个运动控制平台硬件系统中,系统供电电路主要有DCDC模块构成,负责给各个电路模块提供工作电源,其输出电压有±15V,+12V,+5V,+3.3V。信号调理电路完成对各种传感器及采集回来的信号处理,主要包括霍尔电流传感器的模拟量信号、光电编码器的转速信号、给定控制开关量信号等,经调理电路后,使其各种信号的电平和幅值满足DSP控制器的要求;DSP主控电路以TMS320F2812为核心处理器,完成对各种信号的处理以及系统的闭环控制,并通过SCI接口实现控制器与上位机的通讯;恒流源为磁粉制动器提供电流,以便输出与电流成线性关系的扭矩。下面是我画的大体框图:其中2812核心板原理图、PCB、BOM表和Gerber都已经分享到了论坛版块 http://bbs.21ic.com/icview-583101-1-1.html
电机驱动器是由分立元器件H桥搭起来的,没有采用半桥驱动芯片如IR2101等芯片,使用三极管搭建的并有一定的硬件死区作用;我觉得做H桥驱动器最重要的就是上桥臂的浮动导通,这一点一定要做好,在电机驱动中,由于电流较大,上管都采用N型MOSFET。由于每个上管源极的电压是浮动的,因此上管的栅极驱动电压也必须浮置在源极的电压之上才能有效地开启上管。实现这种的方法有多种,如自举法、隔离电压法、脉冲变压器法、电荷泵法、载法驱动法等多种方法。本次设计采用电荷泵法来实现电压的浮动,主要电路如下如所示:
电荷泵的基本原理是通过电容对电荷的积累效应而产生高压,使电流由低电势流向高电势。随着集成电路的不断发展,基于低功耗,低成本的考虑,电荷泵在电路设计中的应用越来越广泛。由于H桥由4个N沟道功率MOSFET组成,如要控制各个MOSFET,各MOSFET的门极电压必须足够高于栅极电压。通常要使MOSFET完全可靠导通,其门极电压一般在10V以上,即Vgs>10V,对于H桥下桥臂,直接加10V以上的电压即可使其导通;而对于上桥臂,驱动电路必须能提供高于电源电压的电压,这就要求驱动电路中增设升压电路,提供高于栅极的电压。考虑到Vgs有上限要求,一般MOSFET导通时Vgs为10V~15V,也就是控制门极电压随栅极电压的变化而变化,即浮动栅驱动。因此在驱动控制电路中设计电荷泵电路,用于提供高于驱动电源电压的电压。
最近看到电动车驱动器上为了扩大电流,在H桥上使用的75NF75上又并联了一个,这样电流会更大,可靠性也更高,值得借鉴。下上桥驱动电路如下图所示:
H桥上MOSFET的漏源极接的4个二极管起到保护MOSFET的作用,当电机停止运转的瞬间,电机中储存的能量会加到H桥上,这样可以通过二极管引导到电源上去,防止了MOSFET被击穿的情况。当然,我们也可以采用吸收电路来吸收开关关断浪涌电压和续流二极管反向恢复浪涌电压,通常有典型的三种吸收电路,分别是RC、RCD、C,三种吸收电路的特点和适用范围如下表所示:
电路类型 |
RC型吸收电路 |
RCD型吸收电路 |
C吸收电路 |
特点 |
结构简单,易造成过冲电压,会引起集电极电流升高 |
克服过冲电压过高,过电压抑制效果较好会引起集电极电流升高 |
电路简单,成本低,易产生震荡,会引起集电极电流升高 |
适用范围 |
小容量,低频装置 |
小冲量,低频装置 |
中等容量装置 |
为了使驱动器使用更加方便,可以在H桥电路之前加入逻辑电路方便控制,具体电路和说明如下:
说明:(1)D1H与D1L为左桥臂的上下控制信号,D2H与D2L为右桥臂的上下控制信号。
(2)Brake为高电平时表示刹车,D1H,D1L,D2H,D2L全为高电平。
(3)Dir表示方向信号,即Dir为高电平正转,则Dir为低电平反转,但前提是Brake为低电平。
(4)PWM1和PWM2表示分别控制正转和反转,通过占空比来控制电机转速。
(5)驱动优点:在刹车的时候通过PWM1短路电机,这样在由正、反转变换时不会出现抖动。
上面逻辑电路的真值表如下所示:
Brake |
Dir |
PWM1 |
PWM2 |
D1H |
D2H |
D1L |
D2L |
|
1 |
× |
PWM1 |
PWM2 |
1 |
1 |
PWM1 |
PWM2 |
刹车 |
0 |
1 |
PWM1 |
PWM2 |
0 |
1 |
1 |
PWM1 |
正转 |
0 |
0 |
PWM1 |
PWM2 |
1 |
0 |
PWM2 |
1 |
反转 |
这里再简单介绍一下它的工作原理:由于DSP输出的控制信号为3.3V,为了能使DAC0832正常工作,需要将DSP输出的控制信号放大为5V,这个过程是有图中三极管Q2通过上拉完成的,电路也存在不足,因为通过此电路就会将DSP输出的控制信号取反,这会给程序编写带来不便。
DAC0832的参考电压是由LM336-2.5V提供的,这样DAC0832转换过程中的参考电压Vref=2.5V,输出电压通过运算放大器LM358之后,就有如下的关系式(期中D表示DSP输出的控制数字量):
Vout = +2.5VDC (1 + R2/R3)(D/256)
电路中调征管采用大功率场效应管IRF540。采用场效应管,更易于实现电压线性控制电流,既能满足输出大电流的要求,也能较好地实现电压近似线性地控制电流。因为当场效应管工作于饱和区时,漏电流Id近似为电压Ugs控制的电流。即当Ud为常数时,满足:Id=f(Ugs),只要Ugs不变,Id就不变。
在此电路中,R5为取样电阻,采用康铜丝绕制(阻值随温度的变化较小),阻值为0.25欧。运放采用OP07作为电压跟随器,UI=Up=Un,场效应管Id=Is(栅极电流相对很小,可忽略不计) 所以Io=Is= Un/R2= UI/R2。正因为Io=UI/R2,电路输入电压UI控制电流Io,即Io不随RL的变化而变化,从而实现压控恒流源。
下面分享光耦隔离和光电编码器反馈信号隔离电路,其中使用74HC14进行信号整形,为了输出3.3V的QEP信号,所以74HC14需要3.3V供电,但是芯片的输入信号峰峰值不能超过3.3V。注:记得光电编码器隔离电路中的C1要去掉,波形才正常。
设计中只采用了过流保护,设计中的过流是指当负载过大引起的过流和控制不当使H桥上下桥臂同时导通导致电源短路产生的过流,这两种情况都会使保护电路工作,继电器断开驱动器母线的链接,DSP输出的两路PWM波变为高阻态,这样就会避免由于H桥上电流过大而烧坏MOS管的情况发生。
上面电路中,霍尔电流传感器CHF-10P通过串入母线中进行电流的采集,A2415S为24V转±15V的隔离电源,主要作用是为CHF-10P提高工作电压,采集电流对应的电压值在3引脚可以测得,并且由输出电压值的正负号判断电流在5和6引脚之间的流入方向,这就会有一个电流与电压之间的线性关系为10A~±4V。由于DSP中ADC模块采集电压范围为0~3V,所以需要将霍尔电流传感器输出的正负电压转换为0~3V,这个过程是由电阻R1、R2、R3转换得到,其中3.3V电压经过两个肖特基二极管(正向导通压降为0.26V)后电压值大概为3.0V,如果输入电阻R1的电压为-3V,先把R3电阻看做不存在,R1和R2串联,一端输入-3V,另一端电压为3V,则DSP_ADC端电压为0V,把R3电阻看回来,0V通过R3电阻接地,当然还是0V。所以输入与输出的关系为-3V~3V对应0V~3V,为了避免输入到DSP_ADC的电压高于3V,加入了D1和D2作为嵌位电路,防止电压高于3V损坏DSP的ADC输入口。还有过流保护就是用继电器切断电机驱动母线电压,DSP的PWM口呈高阻态。
再简介一下DSP2812的事件管理器单元,每个事件管理器模块都有一个正交编码脉冲(QEP)电路。使能QEP电路可以对引脚CAP1/QEP1和CAP2/QEP2(EVA)或CAP4/QEP3和CAP5/QEP4(EVB)输入的正交编码脉冲进行编码和计数。它与光编码器相连可以获得机器旋转的位置和速读信息。如果使能QEP电路,那么CAP1/QEP1和CAP4/QEP3的捕捉功能就被禁止。定时器2(在EVB中为定时器4)为EVA的QEP电路提供时基。定时器必须处于单增/减计数模式并使用QEP电路作为时钟源。正交编码脉冲电路是具有90°固定相移和可变频率的两个脉冲序列。当光编码器和电机转轴产生QEP时,通过监测两个脉冲的先后顺序可以确定电机的旋转方向,通过检测脉冲个数和频率可以确定旋转角度。QEP电路中的方向监测逻辑可以确定哪个序列领先,它为定时器2(或4)产生方向信号。如果CAP1/QEP1(EVB中为CAP4/QEP3)引脚的输入脉冲是领先序列,定时器进行增计数;如果CAP2/QEP2(EVB中为CAP5/QEP4)引脚的输入脉冲是领先序列,定时器进行减计数。两个正交编码输入的两个边沿都被计数,所以QEP逻辑为定时器2(或4)产生的时钟频率是每个输入脉冲序列的4倍。该正交时钟与定时器2(或4)的时钟输入相连。EVA中的每个捕捉单元可以选择定时器1或2作为自己的时基;然而CAP1和CAP2不能选择不同的定时器作为它们自己的时基。EVB中的每个捕捉单元可以选择定时器3或4作为自己的时基;然而CAP4和CAP5不能选择不同的定时器作为它们自己的时基。当捕捉引脚(CAPx)探测到指定的变化时,捕捉单元捕捉定时器的值并将它存在相应的2级深度FIFO堆栈中。使能捕捉单元后,如果相关引脚产生指定的变化,捕捉单元将选用的定时器的当前值存入相应的FIFO堆栈中。如果已经有一个或多个合法值存储在FIFO堆栈中(CAPxFIFO位不为0),相应的中断标志位将置1。如果标志位没有屏蔽,会产生一个外围中断请求。每当一个新的计数器值被捕捉到FIFO堆栈中,CAPFIFOx会调整相应的状态位来反映FIFO堆栈的最新状态。从引脚变化发生到定时器的计数期值锁存需要2个时钟周期。 介绍了这么多,下面简单介绍一下软件部分。
在运动控制平台上集成了各个测试模块,如波特率设计,自动波特率检测,驱动板最佳频率测试,速度在线调试,PID系数在线调试,速度采集,电流采集,负载扭矩输出,速度曲线显示等,这些调试和控制功能足够发挥本次设计的运动控制平台的强大功能。其中自动波特率检测可以用DSP2812去实现,自动波特率检测过程中记得遇到了一个DSP的bug,就是自动检测的第一次肯定是不成功的,把DSP复位一次再次检测,就会正确检测到上位机选用的波特率;除此之外还有一个功能值得提一下,就是根据我个人的理解在此软件上设计了检测电机驱动器的最佳驱动频率的功能,在下图中看不到,在菜单栏中可以选择此功能,选择此功能之后,上位机软件会在占空比为50%的情况下去改变PWM波的频率,并采集显示速度,通过频率改变和速度曲线对比计算出驱动器适合的最佳频率,这个方法不知道是否合理,但是我在运动控制平台上测试的适合没有出现过问题。下面是基于运动控制平台的主控制界面。
运动控制中采用了速度闭环控制,为了实现速度闭环控制,我们要有精确的速度采集,为了达到精确的速度采集,设计中经过4种采集速度算法的比较,最终采用了变M/T法进行了电机速度的采集;为了达到闭环控制,系统中设计了速度闭环PID控制算法,这样可以确保系统在带负载运转下正常工作。下面将会介绍系统中算法的设计与实现。变M/T法是指测速过程中,不仅测取的测速脉冲与高频时钟脉冲随电机的转速不同而变化,而且测量时间T也是变化的。所以变M/T法相比较其它三种测速方法在高速、低速时都具有较高的测量精度,而且响应速度快,在闭环控制系统中具有较高的使用价值。
时间过去有一年多了,好多资料没了,也记不清了,实在写不动了,有什么疑问可以跟帖提问,谢谢!(原创)