1、芯片控制。
2、采用MCU+功率器件控制。
3、采用DSP实现全数字式控制。
具体控制方法如下:
1、采用专用芯片,这样控制简单,成本就低,但一般工作电流不大约2A左右,工作电压不高,36VDC左右。
2、采用MCU+功率器件的方式,电流通过模拟电路来控制,MCU提供细分环形分配器,这种方式,控制相对简单,工作电流和电压都可以做大,但控制参数一般比较固定,应用不灵活。
3、采用DSP实现全数字式控制,控制比较复杂,但控制算法灵活,可以自动整定不同电机的控制参数。
dsp电动机是把电能转换成机械能的一种设备。它是利用通电线圈(也就是定子绕组)产生旋转磁场并作用于转子(如鼠笼式闭合铝框)形成磁电动力旋转扭矩。
#include "myapp.h"#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
// :-- Define Timer 0 's Registers ---//
ioport unsigned int *tim0
ioport unsigned int *prd0
ioport unsigned int *tcr0
ioport unsigned int *prsc0
// :-- End of Define -----------------//
void InitMcBSP() //函数声明
unsigned int uN,nCount,nCount1//定义外部变量
main() //主程序
{
unsigned char dbScanCode,dbOld //定义内部变量
dbScanCode=dbOld=0
nCount=nCount1=0
PLL_Init(20) //初始化PLL
SDRAM_init() //初始化SDRAM
InitCTR() //初始化CTR
InitMcBSP() //初始化McBSP
uN=60
CTRGR=1
InitInterrupt() //初始化中断
TIME_init() //初始化定时器
while ( 1 )
{
if ( nCount1==0 )
{
dbScanCode=GetKey() //读取键盘输入的信息
if ( dbScanCode!=dbOld ) //如果键盘输入信息改变,执行
{
dbOld=dbScanCode
if ( dbScanCode==SCANCODE_9 )
break
else if ( dbScanCode==SCANCODE_7 )
PCR1|=2
else if ( dbScanCode==SCANCODE_8)
PCR1&=0x0fffd
else if ( dbScanCode==SCANCODE_1 )
uN=60
else if ( dbScanCode==SCANCODE_2 )
uN=40
else if ( dbScanCode==SCANCODE_3 )
uN=20
else if ( dbScanCode==SCANCODE_4 )
uN=10
else if ( dbScanCode==SCANCODE_5 )
uN=0
}
}
}
CloseCTR() //关显示器
exit(0)
}
void InitInterrupt(void)
{
// 设置中断控制寄存器
IVPD=0x80
IVPH=0x80
IER0=0x10
DBIER0 =0x10
IFR0=0xffff
asm(" BCLR INTM")
}
void interrupt Timer() //中断响应函数
{
nCount++nCount%=100
if ( nCount>uN ) PCR2|=4
else PCR2&=0x0fffb
nCount1++nCount1%=5120
}
void InitMcBSP()
{
// IOPin: McBSP2.FSR S22
//SPCR1.RRST_=0,PCR.RIOEN=1,PCR.FSRM=1,PCR.FSRP=0/1
SPCR1_2&=0x0fffe
PCR2|=0x1400
// IOPin: McBSP1.CLKX S14
//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.CLKXM=1,PCR.CLKXP=0/1
SPCR2_1&=0x0fffe
PCR1|=0x2200
}
void TIME_init(void)
{
tim0 = (unsigned int *)0x1000
prd0 = (unsigned int *)0x1001
tcr0 = (unsigned int *)0x1002
prsc0 = (unsigned int *)0x1003
*tcr0 = 0x04f0
*tim0 = 0
*prd0 = 0x0100
*prsc0 = 2
*tcr0 = 0x00e0
}
涉及到外设部分就得看具体的DSP型号了,查查数据手册吧。
利用安装在电机后面的轴后编码器,编码器在单位时间内计数脉冲的多少就代表了电机转速的快慢。而获取编码器的计数值可以采用DSP相应的模块。比如说TMS320F2812这款芯片就有一个专门的QEP模块可以采集编码器计数脉冲。控制电机的速度一般是利用PWM波,通过发出的PWM波的占空比就可以实现电机的调速了,还是以2812为例,它有专门的PWM模块,具体设置你参考相应的书籍吧
实现闭环的话大概流程是这样的:
首先保证你的硬件是完善的(电机,编码器,驱动器,DSP电路板)
1.在程序的中断里面可以设置采样周期,采集到计数后记过简单的计算
2.计算后得到PWM的占空比(算法我就不说了,你可以是简单的四则运算,噎可以到网上找更好的算法,呵呵,还有啊,多大占空比对应多大速度看你的电机是什么型号了)
3.向电机驱动器发出经过计算后的PWM,驱动器会根据你发出的PWM波来调节电机的电压电流,从而调节电机的速度
这样就实现了 电机速度--编码器采集--DSP计算--PWM波--驱动器--电机速度改变--电机速度 的整个闭环过程了
PS:控制电机速度的话要有相应的驱动器或驱动板,你应该知道的吧
好了,我能说的大概就这么多了,不知道讲清楚了没有,(*^__^*) ……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)