直流电机控制实验Word下载.docx
《直流电机控制实验Word下载.docx》由会员分享,可在线阅读,更多相关《直流电机控制实验Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
3.显示当前的年月日、星期、时分秒;
4.实现步进电机的调速和正反转;
可用旋转按钮W1或按键控制调速,在超级终端和数码管上同步显示其正反转和转速信息;
三、实验基本原理
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来设置通讯波特率。
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达林顿集成驱动芯片驱动步进电机,在步进电机和驱动电路之间连接了电阻,防止控制紊乱造成电机的损坏。
四、主要仪器设备及耗材
硬件:
PC机一台,MagicARM2410教学实验开发平台一套
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境,超级终端程序,JTAG仿真器
五、实验步骤
1.安装WigglerJTAG仿真器并打开;
2.运行超级终端,新建一个连接;
3.启动ADS1.2,建立工程,在src组中的main.c中编写主程序代码;
4.选用DebugRel生成目标,编译链接工程,选择【Debug】,进行JTAG仿真;
5.按照超级终端上的提示信息操作;
6.根据实验箱及超级终端上的反馈结果调试程序。
7.主要参考程序如下
intmain(void)
{
uint8g_getch;
inti=0;
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("
\n"
);
for(i=0;
i<
16;
i++)
{
LED_DispNum(i);
//以二进制形式显示十六进制
DelayNS(5);
if(i==15)
i=0;
if(UART_GetFlag()==0x1B)//检测是否按下'
Esc'
键
break;
}
\nTestLED_DispNumtestisOver!
break;
}
2'
Addsubmuldiv();
//加减乘除测试模块
UART_SendStr("
\nTestAddsubmuldiv_TestisOver!
3'
DateWeekTime_Test();
\nTestDateWeekTime_TestisOver!
4'
StepMOTO_Test();
\nTestStepMOTO_TestisOver!
default:
break;
}
}
六、实验数据及处理结果
1、选择Debug进行JTAG仿真后进入选择操作情况界面选择1,可看到实验箱上4个LED灯按16进制数闪亮,最左边的灯为最低位,最右边的灯为最高位。
按esc键返回。
2、输入2,可观察到能实现两位数的加减乘除,按esc键返回。
其超级终端显示如下图:
减法,结果为正值
减法,结果为负值
除法
3、输入3,按提示信息,按任意键输出当前时间,超级终端显示如下图:
4、输入4,观察步进电机的转动情况,可通过旋转W1调节电机的正反转方向和转速情况。
超级终端显示如下图:
七、实验心结
由于这是第一次自己设计程序做实验,刚开始总不知道如何下手。
之后,我们冷静分析,先用基础实验中的简单实验实现了超级终端的正确显示。
之后,又用基础实验中相关的程序,先实现了16进制的显示。
加减乘除就按照C语言编写,然后步进机通过延迟控制转速。
其实,最难的是把上面实现的各个功能输入到超级终端,通过超级终端显示。
我们通过向其他同学请教,并且自己上网查到了相关的实现程序,之后经过多次修改最终得出正确显示。
通过这第一个自己设计的实验,学到了程序的编写,跟MagicARM2410实验箱硬件的实现,受益匪浅,为以后的实验打下了基础。
八、参考资料
《S3C2410实验实验手册》
《嵌入式系统开发与实验教程》
附录:
#include"
config.h"
main.h"
//功能测试选择数组
charselect_test[][50]=
"
\n\nPleaseinput1~4toselecttest:
1LED_DispNume\n"
2Addsubmuldiv_Test\n"
3Dateweektime_Display\n"
4StepMOTO_Test\n"
Pleaseinputanumyouwanttotest:
"
};
voidDelayNS(uint32dly)
{
uint32i;
for(;
dly>
0;
dly--)
for(i=0;
i<
50000;
i++);
}
//串口接收字符临时变量
voidfun_test(void)
for(i=0;
14;
UART_SendStr(select_test[i]);
return0;