实验一直流步进电机综合控制系统设计.docx
- 文档编号:26700848
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:12
- 大小:213.06KB
实验一直流步进电机综合控制系统设计.docx
《实验一直流步进电机综合控制系统设计.docx》由会员分享,可在线阅读,更多相关《实验一直流步进电机综合控制系统设计.docx(12页珍藏版)》请在冰豆网上搜索。
实验一直流步进电机综合控制系统设计
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合■设计□创新实验日期:
实验成绩:
综合实验一、直流、步进电机综合控制系统设计
一、实验目的
1、初步熟悉实验GPIO口的初始化设置,并熟悉实验箱各个模块的功能;
2、掌握步进机的控制原理及利用延时脉冲来改变步进电机速度;
3、掌握直流电机的控制原理及利用pwm占空比控制来改变速度;
4、学习IIC总线读取和写数据原理,并掌握对CAT1025E2PROOM操作方法;
5、学会控制数码管的显示UART串口函数,并初步掌握中断处理函数的写法;
二、实验基本原理
基于S3C2440处理器分别控制LED灯闪烁,串口打印,RTC显示,步进电机控制和直流电机控制以及EEPROM的读写。
由于S3C2440自带串口模块,RTC模块和EEPROM模块,配置好相应的寄存器值就可控制好各种外设。
(一)GPIO口设置
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的位对应输出低电平。
(二)串口设置
工程模板中包含有串口软件包UART.C,用户可以调用相应的接口函数进行串口数据发送和接收,串口的波特率需要在config.h文件中进行设置,本实验使用默认的115200波特率。
对串口进行初始化时,首先要设置相应I/O口为TXD0,TRD0功能引脚,然后通过ULCON0来设置通讯波特率。
设置UCON0寄存器时,要设置串口工作模式为查询模式,即UCON[3:
0]应为0101b。
(三)RTC设置
S3C2410A具有实时时钟(RTC)功能,能够提供时、分、秒,年、月、日的计时功能,还具有定时报警功能。
RTC单元采用独立的后备电池供电,独立是时钟源(采用32.768KHz晶振),即使系统关闭电源,RTC还可以正常工作。
要初始化RTC的时间值,首先要给RTCON寄存器写为0x01,使能RTC接口(即允许写RTC操作),然后对年寄存器BCDYEAR、月寄存器BCDMON、日寄存器BCDDATE、时寄存器BCDHOUR、分寄存器BCDMIN、秒寄存器BCDSEC、星期寄存器BCDDAY进行初始化,时间值为BCD格式。
初始化完成,将RTCCON寄存器写为0x00,禁能RTC接口(即禁止写RTC操作),接下来就可以直接读取RTC时间寄存器的值来使用了。
(四)加减乘除测试
在UART通讯试验的基础上,用C编程实现两位数的加减乘除,通过选择输入两个两位数进行相应运算,将运算过程及结果显示在超级终端上。
对于加法,两个两位数的和最多是三位,设置三个加法子函数分别显示和的百位、十位和个位;
对于减法,两个两位数的差最多两位,所以设置两个减法子函数分别显示差的十位和个位,在做减法之前,先判断被减数和减数的大小,当减数大的时候在差的最前面添加一个负号;
对于乘法,两个两位数的积最多是四位,因此设置四个乘法子函数分别显示乘积的千位、百位、十位和个位;
对于除法,两个两位数相除最多产生两位数的商,因此设置二个除法子函数,两个分别显示商的十位和个位。
(四)步进电机
步进电机是一种将电脉转化为角位移的数据控制电机,即给它一个脉冲信号,它就按设定的方向转动一个固定的角度。
用户可以通过设置脉冲的个数来控制角位移量,从而实现准确的定位操作;另外,通过控制脉冲频率来控制电机转动速度和加速度,从而实现调速的目的。
当然,对于步进电机各组绕组(即内部线圈)的控制脉冲要有一定的顺序,否则电机无法正常旋转。
MagicARM2410试验箱上的步进电机为四项步进电机,电机驱动为18°。
S3C2410A的GPIO驱动能力有限,必须通过ULCN2003达林顿集成驱动芯片驱动步进电机,在步进电机和驱动电路之间连接了电阻,防止控制紊乱造成电机的损坏。
本工作模块使用的步进电机的步进角是18°,由于步进电机旋转角度与输入脉冲数目成正比,所以输入20个脉冲信号,步进电机就会旋转20个步进角,且刚好转一圈(20*18°=360°)。
旋转一圈的时间是60s/30圈=2s,旋转一个步进角的时间是2s/20=100ms(每圈20个步进角)。
也就是说给一个脉冲信号,旋转一个步进角,延时100ms,再给一个脉冲信号,旋转一个步进角,延时100ms,这样就可以获得转速为30转/分。
同理:
把延时时间改为50ms可以使转速变为60转/分。
(五)直流电机
直流电机的控制相对较为简单。
调节PWM的分频,占空比等改变PWM的输出,最终实现电机的调速。
根据电路图可以,当TOUT0为低电平的时候,电机反转或者停机;当TOUT0为高电平的时候,电机反转,正转,停机。
S3C2410A具有四路PWM输出,输出口分别为TOUT0-TOUT3其中两路带有死区控制功能。
为了能正确输出PWM信号,需要正确设置GPBCON寄存器选择相应的I/O的TOUTx功能。
然后,通过TCFG0寄存器为PWM定时器时钟源设置预分频值,通过TCFG1寄存器选择PWM定时器时钟源。
接着,通过TCNTB0寄存器设置PWM周期,通过TCMPB0设置PWM占空比。
最后,通过TCON寄存器启动PWM定时器,即可输出PWM信号。
(六)IIC总线及I/O接口
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接口为主发送模式。
(七)外部中断
外部中断设置GPF4引脚为外部中断EINT4功能,下降沿触发方式。
初始化S3C2410A中断控制器,设置EINT4为IRQ中断,并使能中断允许。
初始化完成后,等待外部中断产生。
(八)设计过程
本实验为多个实验的综合,可先编辑好各个函数后,在主函数中用条件选择分为5种情况,分别调用实验要求的5种功能函数:
一是实现四个LED灯按照十六进制的规则依次亮灭,主要是在各LED灯按16进制在其相应GPxDAT上写1或0;二是编写加减乘除函数,数据在超级终端上一位一位发送的,要考虑到各种结果的最大可能位数,运算时将接收到的ASCⅡ码转化为相应数字进行运算,发送结果时将各位数对应的ASCⅡ码,从最高位到最低位逐位发送出来,在超级终端上显示的就是其操作结果;三是显示当前系统时间值,调用基础实验中关于RTC实验SendRTC工程中的函数实现;四是控制步进电机速度及方向,本实验通过使用GPIO控制步进电机转动,采用双四拍控制方式,设置两个标志位分别控制方向和速度;五是直流电机靠占空比调节其转速,初始化PWM输出,控制直流电机转动速度,利用独立按键KEY实现速度调节,当速度增大到某个级别时反转,速度再逐渐变小至停止。
三、主要仪器设备及耗材
MAGIC2410开发平台,H-JTAG,PC机各一台
四、实验步骤
1.启动ADS1.2,将实验所需的所有头文件到本实验的工程中。
2.分别编写各个子程序(菜单列出的各项)。
3.在src组中的main.c中编写主程序。
在main.c中修改程序,使用下面程序语句在超级终端上列出选项pleaseselectthefollowing5virtues:
A.LED
B.Maths
C.Time
D.StepMoto
E.DCMoto
使用语句g_getch=UART_GetKey();接收字符,使用语句UART_SendByte(g_getch);发送接收到的字符,使用while循环,嵌入条件选择语句,根据输入的字符选择相应的功能测试
while
(1)
{UARTSend();
g_getch=UART_GetKey();//接收字符
if(g_getch=='A')//判断是否为第一公能
{UART_SendStr("YOUHAVESELECTEDTHEFIRSTVIRTUE!
\n");
function_a();}
elseif(g_getch=='B')//判断是否为第二公能
{UART_SendStr("YOUHAVESELECTEDTHESECONDVIRTUE!
\n");
function_b();}
elseif(g_getch=='C')//判断是否为第三公能
{UART_SendStr("YOUHAVESELECTEDTHETHRETHVIRTUE!
\n");
function_c();
}
elseif(g_getch=='D')//判断是否为第四公能
{UART_SendStr("YOUHAVESELECTEDTHEFOURTHVIRTUE!
\n");
function_d();
}
elseif(g_getch=='E')//判断是否为第五公能
{UART_SendStr("YOUHAVESELECTEDTHETHRETHVIRTUE!
\n");
function_e();}
else
{UART_SendStr("YOUHAVENOTSELECTEDONEVIRTUE!
\n");}}
4.选用DebugRel生成目标,然后编译连接工程。
5.接好跳线,打开电源。
6.选择【Project】->【Debug】启动AXD进行JTAG仿真测试。
(安装H-JTAG软件并打开,将H-JTAG和2410的初始化文件添加到AXD的configure中)
7.打开超级终端,进行实验功能测试。
五、实验流程图
图1主程序流程图
六、实验数据及结果:
本程序有五个选择功能,以下是主页面显示:
图2主页面
1、选择功能A,四个LED灯按十六进制规则依次亮灭:
图3LED显示
2、选择功能2,输入两个两位数,实现加减乘除并显示运算结果:
图4加减乘除运算
3、选择功能3,显示时间:
图5RTC时间显示
4、选择功能D,实现步进电机转速和方向(在超级终端输入方向和速度,如L,1,表示向左转,速度是1):
图6步进电机系统
5、实现直流电机调速和正反转:
图7直流电机系统
七、实验总结
在前面做过的基础实验的基础上,第一个综合实验并不难,本程序包含了五个基本功能:
LED十六进制亮灯、两位数的加减乘除、RTC时间显示、控制步进电机转速及方向、控制直流电机转速及方向。
本实验是一个通过串口通信交互控制的综合系统,通过超级终端来选择相应的功能并结合独立按键KEY一起运作,每实现一个功能,能自动跳出循环进行下一次的选择;在控制直流电机时,按键可以控制转速,每按一次既能重新进行一次选择,也能给电机进行加速,当加到某个级时会反转,在减速至停止,若不想再执行此功能,可以通过选择退出循环再重新进行选择。
在本次实验中,对基础实验的融合是整个实验的基础,可以通过在src中加入多个函数以便主函数调用,而调用通过主函数中的if语句进行选择实现:
一是LED灯的全亮和按照十六进制显示是通过GPIO输出控制实现的。
显示十六进制数值时,LED1为最低位,LED4为最高位;二是两位数的四则运算;三是RTC时间显示,定义初始化时钟值时要注意初始化时间(年月日时分秒)是以BCD码的形式存储在相应寄存器中的(由于实验箱的原因,时间并未正常显示);四是控制步进电机转向及转速。
若将AB--BC--CD--DA--AB看做步进电机正转的话,则反转的顺序就是AD--DC--CB--BA--AD。
实验中定义两个标志位,分别控制方向跟速度,分别发送相应的字符到超级终端后控制电机;五是直流电机的转速和方向通过PWM信号控制,通过改变占空比就能观察到电机方向改变;本实验的返回是通过程序中每运行一个功能后的重新选择,选择否则退出当前功能,再回到主页面重新选择。
通过做综合实验,能学到更多的东西,它的难度虽然比较大,但是通过实践并最后做出实验,很有成就感,同时也很感谢老师在实验中的指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 直流 步进 电机 综合 控制系统 设计