实验一直流步进电机综合控制系统设计文档格式.docx

上传人:b****2 文档编号:15107276 上传时间:2022-10-27 格式:DOCX 页数:17 大小:314.79KB
下载 相关 举报
实验一直流步进电机综合控制系统设计文档格式.docx_第1页
第1页 / 共17页
实验一直流步进电机综合控制系统设计文档格式.docx_第2页
第2页 / 共17页
实验一直流步进电机综合控制系统设计文档格式.docx_第3页
第3页 / 共17页
实验一直流步进电机综合控制系统设计文档格式.docx_第4页
第4页 / 共17页
实验一直流步进电机综合控制系统设计文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

实验一直流步进电机综合控制系统设计文档格式.docx

《实验一直流步进电机综合控制系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《实验一直流步进电机综合控制系统设计文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

实验一直流步进电机综合控制系统设计文档格式.docx

二、实验基本原理

1、S3C2410A具有117个通用I/O口,分为A—H等8个端口,由于每个I/O口都有第2功能,甚至第3功能,所以需要通过设置GPxCON寄存器来选择GPx口I/O口功能,其中x可以为A、B、C、D、E、F、G表示相应的I/O端口。

当I/O口设置为GPIO输出模式(Output模式)时,可以通过写GPxDAT控制相应I/O口输出高电平或低电平,GPxDAT为1的位对应I/O输出高电平,为0的位对应输出低电平。

2、工程模板中包含有串口软件包UART.C,用户可以调用相应的接口函数进行串口数据发送和接收,串口的波特率需要在config.h文件中进行设置,本实验使用默认的115200波特率。

对串口进行初始化时,首先要设置相应I/O口为TXD0,TRD0功能引脚,然后通过ULCON0来设置通讯波特率。

设置UCON0寄存器时,要设置串口工作模式为查询模式,即UCON[3:

0]应为0101b。

3、S3C2410A具有实时时钟(RTC)功能,能够提供时、分、秒,年、月、日的计时功能,还具有定时报警功能。

RTC单元采用独立的后备电池供电,独立是时钟源(采用32.768KHz晶振),即使系统关闭电源,RTC还可以正常工作。

要初始化RTC的时间值,首先要给RTCON寄存器写为0x01,使能RTC接口(即允许写RTC操作),然后对年寄存器BCDYEAR、月寄存器BCDMON、日寄存器BCDDATE、时寄存器BCDHOUR、分寄存器BCDMIN、秒寄存器BCDSEC、星期寄存器BCDDAY进行初始化,时间值为BCD格式。

初始化完成,将RTCCON寄存器写为0x00,禁能RTC接口(即禁止写RTC操作),接下来就可以直接读取RTC时间寄存器的值来使用了。

4、步进电机是一种将电脉转化为角位移的数据控制电机,即给它一个脉冲信号,它就按设定的方向转动一个固定的角度。

用户可以通过设置脉冲的个数来控制角位移量,从而实现准确的定位操作;

另外,通过控制脉冲频率来控制电机转动速度和加速度,从而实现调速的目的。

当然,对于步进电机各组绕组(即内部线圈)的控制脉冲要有一定的顺序,否则电机无法正常旋转。

MagicARM2410试验箱上的步进电机为四项步进电机,电机驱动为18°

S3C2410A的GPIO驱动能力有限,必须通过ULCN2003达林顿集成驱动芯片驱动步进电机,在步进电机和驱动电路之间连接了电阻,防止控制紊乱造成电机的损坏。

5、S3C2410A具有一个硬件I/O接口,可以配置为主发送、主接收、从发送和从接收等4种工作模式。

I/O接口包含4个寄存器,控制寄存器IICCON用于设置IIC总线时钟和中断(标志)使能,还有一位中断标志位;

状态寄存器IICSTAT除了指示当前IIC总线状态外,还有2位IIC操作模式控制位和总线启动/结束控制位;

数据寄存器IICDS用来发送数据或接收数据;

从机地址寄存器IICADD用来保存S3C2410A作从机时的器件地址。

对IIC接口进行初始化时,首先要设置相应的I/O为IICSDA、IICSCL功能引脚,然后通过对IICCON寄存器来设置IIC总线时钟,并使能IIC中断(标志),通过IICSTAT寄存器来设置IIC接口为主发送模式。

6、外部中断:

设置GPF4引脚为外部中断EINT4功能,下降沿触发方式。

初始化S3C2410A中断控制器,设置EINT4为IRQ中断,并使能中断允许。

初始化完成后,等待外部中断产生。

7、设计过程

本实验为多个实验的综合,可先编辑好各个函数后,在主函数中用switch分为8种情况,分别调用实验要求的8种功能函数。

实现四个LED灯按照十六进制的规则依次亮灭,主要是在各LED灯按16进制在其相应GPxDAT上写1或0。

编写加减乘除函数时因为数据在超级终端上是一位一位发送的,所以要考虑到各种结果的最大可能位数,运算时将接收到的ASCⅡ码转化为相应数字进行运算,发送结果时将各位数对应的ASCⅡ码,从最高位到最低位逐位发送出来,在超级终端上显示的就是其操作结果。

显示当前系统时间值可调用实验教材2.16RTC实验SendRTC工程中的函数实现。

步进电机靠延时来控制其转速,本实验用旋转按钮W1来调速,这是通过A/D转换实现的,将W1旋转一周分为10个档,进行A/D转换后为0~1024中的一个数,再除以10,分为10个档。

W1从最左边旋转至中间位置时,电机反转,并且电机转速不断减小。

中间位置,电机停止转动。

从中间位置旋转至最右边时,电机正转,并且速度不断增大。

三、主要仪器设备及耗材

1、硬件:

PC机一台,MagicARM2410教学实验开发平台一套

2、软件:

Windows98/XP/2000系统,ADS1.2集成开发环境

四、实验步骤

1、安装WigglerJTAG仿真器并打开;

2、运行超级终端,新建一个连接;

3、启动ADS1.2,建立工程,在src组中的main.c中编写主程序代码;

4、选用DebugRel生成目标,编译链接工程,选择【Debug】,进行JTAG仿真;

5、按照超级终端上的提示信息操作;

6、根据实验箱及超级终端上的反馈结果调试程序。

五、实验主程序

/****************************************Copyright(c)**************************************************

**

**

**--------------

**:

main.c

**LastmodifiedDate:

2014-0415

**LastVersion:

v1.0

**Description:

**------------------------------------------------------------------------------------------------------

**CreatedBy:

廖丽

**Createddate:

2014-04-115

**Version:

v1.0

**Descriptions:

1LED_DispAllOn

2LED_DispAllOff

3LED_OnebyOne

4LED_DispNume

5Addsubmuldiv_Test

6Dateweektime_Display

7StepMOTO_Test

8EXIT_AllTest

**Modifiedby:

**Modifieddate:

********************************************************************************************************/

#include"

config.h"

main.h"

//功能测试选择数组

charselect_test[][50]=

{

"

\n\nPleaseinput1~10toselecttest:

\n"

1LED_DispAllOn\n"

2LED_DispAllOff\n"

3LED_OnebyOne\n"

4LED_DispNume\n"

5Addsubmuldiv_Test\n"

6Dateweektime_Display\n"

7StepMOTO_Test\n"

8EXIT_AllTest\n"

Pleaseinputanumyouwanttotest:

"

};

/*********************************************************************************************************

**Functionname:

DelayNS

长软件延时。

**延时时间与系统时钟有关。

**Input:

dly延时参数,值越大,延时越久

**Output:

**Createdby:

**CreatedDate:

2014-04-15

**-------------------------------------------------------------------------------------------------------

**ModifiedDate:

voidDelayNS(uint32dly)

{

uint32i;

for(;

dly>

0;

dly--)

for(i=0;

i<

50000;

i++);

}

//串口接收字符临时变量

voidfun_test(void)

inti=0;

for(i=0;

i<

14;

i++)

UART_SendStr(select_test[i]);

intmain(void)

uint8g_getch;

UART_Select(0);

//选择UART0

UART_Init();

//UART0初始化

LED_init();

//LED相关初始化

EINT_init();

//外部中断初始化

while

(1)

{

fun_test();

switch(g_getch=UART_GetKey())

{

case'

1'

:

{

UART_SendByte(g_getch);

UART_SendStr("

);

LED_DispAllOn();

//LED灯全亮

DelayNS(10);

\nTestLED_DispAllOnisOver!

bre

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1