首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM的直流电机调速系统的设计与实现(2)

基于ARM的直流电机调速系统的设计与实现(2)

2  系统的软件设计  

2.1 定时器工作方式

在S3C44B0X中,每个定时器具有一个倒计时器,通过定时器时钟源驱动16位倒计时寄存器TCNTn。定时器启动前,要向定时计数缓冲区寄存器(TCNTBn)写入一个初始值,这个值在定时器启动时载入到倒计时器TCNTn中。在定时器的比较缓冲器寄存器(TCMPBn)中同样也要写入一初始值,运行时用来载入到比较寄存器TCMPn中与倒计时器TCNTn的值相比较。系统启动时,需要通过置手动刷新位的方式,将TCMPBn和TCNTBn这两个缓冲区的值载入到TCMPn和TCNTn中。TCMPBn和TCNTBn这两个缓冲区的应用(即双缓冲器)使定时器能够在频率和占空比同时变化时,仍然产生一个稳定的输出。一般启动定时器的步骤如下:

1),将初始值写入到TCNTBn和TCMPBn中。

2),设置对应定时器的自动重载位

3),设置对应定时器的手动更新位,反向器置为off状态.

3),设置对应定时器的启动位来启动定时器,同时清除手动更新位。

此时定时器TCNTn开始倒计数,当TCNTn具有与TCMPn相同的值时,TOUTn的逻辑电平由低变高。当计数器TCNTn到达0时将产生定时器中断请求,通知CPU定时器操作已经完成。此时,如果自动重载控制位使能,TCNTBn的值会自动载入到TCNTn寄存器中,并开始下一操作周期。如果通过清除定时器使能位等方法使定时器停止,计数值将不会自动重载。

2.2  调制PWM

脉冲宽度调制(Pulse Width Modulation—PWM)是指将输出信号的基本周期固定,通过调整基本周期内工作周期的大小来控制输出功率。对于一个定时器来说,其时钟源输入频率一般不变,即TCFG0(定时器预分频值)和TCFG1(定时器分割值)的值设定后就不需改变。这样对于PWM提供了一个稳定的时钟源。电机的转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转得越快。系统中PWM脉冲频率就由TCNTBn决定,PWM脉冲宽度值则由TCMPBn的值来决定,而占空比即为TCMPn/TCNTn。如果要使电机转速下降,即得到一个比较低的PWM脉宽输出值,可以减少TCMPBn的值;要使电机转速增加,即得到一个更高的PWM的输出值,可以增加TCMPBn的值。由于双缓冲器的特性,下一个PWM周期的TCMPBn值可以通过ISR(中断服务程序)或其他手段在当前PWM周期中低电平时的任何一点写入,即在程序中可以通过中断重新设定TCMPBn的值来改变电机的转速。缓冲区TCMPBn,TCNTBn的值不一定等于这个周期的TCMPn,TCNTn的值,但一定是TCMPn,TCNTn的下一个周期的值。

2.3  程序代码

本文中的应用程序是在ADS1.2的开发环境下交叉编译后下载到Flash中运行的。程序代码(以定时器1为例):

//初始化端口

void  Init_PortE( )

{

rPCONE=0x5a00; //定义I/O口//PE4,PE5,PE6,PE7的//功能

rPUPE=0xf8; //禁止相应位的电阻上拉使能

}

//启动A号电机,此电机由定时器1控制

void  Start_MotorA ( )

{

rTCNTB1=Motor_CONT;//给两个缓冲器//赋值

rTCMPB1=Motor_cont;

rTCON |=(0x01<<11); //定时器1自动重载

rTCON |=(0x01<<9); //手动刷新置位

rTCON &= ~ (0x01<<10); //关反向器

rTCON |=(0x01<<8); //启动定时器1

rTCON &= ~ (0x01<<9); //清手动刷新位

}
继承事业,薪火相传
返回列表