![实验一直流、步进电机综合控制系统设计_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/162aebf2-5154-4e2b-80a4-28252c3d3754/162aebf2-5154-4e2b-80a4-28252c3d37541.gif)
![实验一直流、步进电机综合控制系统设计_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/162aebf2-5154-4e2b-80a4-28252c3d3754/162aebf2-5154-4e2b-80a4-28252c3d37542.gif)
![实验一直流、步进电机综合控制系统设计_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/162aebf2-5154-4e2b-80a4-28252c3d3754/162aebf2-5154-4e2b-80a4-28252c3d37543.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验直流、步进电机综合控制系统设计、实验目的通过本次实验熟悉 MagicARM2410 GPIO、UART、RTC,步进电机,直流 电机, IIC 的工作原理;并能熟悉的编程控制。二、实验要求以MagicARM2410为实验平台,设计一个通过串口通信交互控制的综合型 控制系统。具体来说,可在启动时,自动列出一些选项,通过键盘选择某个选项 而实现其功能; 考虑到实时性, 再按某个控制键能立刻停止当前功能而回到初始 的待选状态。具体功能要求如下:1 、实现四个 LED 灯按照十六进制的规则依次亮灭;2、在超级终端上输入两个两位数,实现两位数的加减乘除并显示运算结果;3、显示当前的年月日、星期、时分
2、秒;4、实现步进电机的调速和正反转;可用旋转按钮 W1 或按键控制调速,在超 级终端和数码管上同步显示其正反转和转速信息;5、实现直流电机德调速和正反转;可用旋转按钮 W2 或按键控制调速,在超 级终端和数码管上同步显示其正反转和转速信息;6、利用 IIC 通信,实现 EEPROM 的读写;在超级终端上显示地址和数据。三 、实验原理(一) LED 灯四个小灯分别接于 GPE11、GPE12 GPH4、GPH6端口;控制端口“ 0 “和“ 1 ”分别实现亮灭 (端口设为输出 )如下:void LED_init(void)/ 初始化 I/OrGPECON = (rGPECON & (0x0
3、F<<22) | (0x05<<22);/ rGPECON25:22 = 0101b 设置 GPE11 GPE12为 GPIO输出模式rGPHCON = (rGPHCON & (0x33<<8)|) (0x11<<8);/rGPHCON13:8 = 01xx01b 设置 GPH4 GPH6为 GPIO输出模式(二) UARTUART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。UART首先将接收到的并行数据转换成串
4、行数据来传 输。消息帧从一个低位起始位开始,后面是58个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发 送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从 串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如, 如果产生一个奇偶错误,UART就置位奇偶标志。UART# 用1 发送/接收逻辑2. 波特率的产生3. 数据收发4. 中断控制出现以下情况时,可使UART产生中断:FIFO溢出错误线中止
5、错误(line-break ,即Rx信号一直为0的状态,包括校验位和停止位在内)奇偶校验错误帧错误(停止位不为1)接收超时(接收 FIFO已有数据但未满,而后续数据长时间不来) 发送 接收由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻UART只能向中断产生一个中断请求。通过查询中断状态函数UART In tStatus(),软件可以在同一个中断服务函数里处理多个中断事件(多个并列的if语句)。5回环操作6串行红外协议UART初始化函数如下Void UART_I nit(void)int i;if(g_uart_sel)/判断是否为串口 1/ I/O 口设置(GPH
6、5,GPH4)rGPHUP = rGPHUP | (0x03<<4);rGPHCON = (rGPHCON & (0x00000F00) | (OxOOOOOAOO);/串口模式设置rUFCON1 =0x00;/禁止FIFO功能rUMCON1 :=0x00;/ AFC(流控制)禁能rULCON1 =:0x03; /禁止IRDA,无奇偶校验,1位停止位,8位数据位rUCON1 :=0x245;/使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式,/禁止接收超时中断,使能接收错误中断,正常工作模式, 中断或查询方式(非DMA)/串口波特率设置rUBRDIV
7、1=(i nt)(PCLK/16.0/UART_BPS + 0.5) -1;else/ I/O 口设置(GPH3,GPH2)rGPHUP = rGPHUP | (0x03<<2);rGPHCON = (rGPHCON & (0x000000F0) | (OxOOOOOOAO);/串口模式设置rUFCON0 =:0x00;/禁止FIFO功能rUMCON0 :=0x00;/ AFC(流控制)禁能rULCON0 =:0x03; /禁止IRDA,无奇偶校验,1位停止位,8位数据位rUCON0 =0x245;/使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式,
8、/禁止接收超时中断,使能接收错误中断,正常工作模式,中断或查询方式(非DMA)/串口波特率设置rUBRDIVO=(i nt)(PCLK/16.0/UART_BPS + 0.5) -1;for(i=0;i<100;i+);(三) RTCA概述实时时钟(RTC单元在系统电源关闭的情况下可以在备用电池下工作。 RTC可 以使用STRB/LDRBARM操作传输二进制码十进制数的 8位数据给CPU。数据 包括秒、分钟、小时、日期、天、月、年的时间信息。RTC单元可以在32.768KHZ 的外部晶振下工作,可以可以执行报警功能。B特点-BCD数:秒、分钟、小时、日期、日、月、年-闰年生成器-报警功能
9、:报警中断或从掉电模式中唤醒-已经解决2000年问题-独立电源引脚(RTCVDD-支持对于实时内核时间节拍的毫秒节拍时间中断C实时时钟操作C.1闰年发生器闰年发生器可以基于 BCDDATE BCDMON BCDYEAR的数据,从28、29、30、31中确定每个月的最后一天。该模块在确定某月最后一天的时候会考虑闰 年的因素。一个8位的计数器仅能代表两个 BCD数字,所以它不能确定是否 是00年(该年的最后两个数字是00)。C.2读写寄存器为了写RTC模块中的BCD寄存器,RTCCOh寄存器的位0必须置1。为了显 示秒分小时星期日月年,CPU应该分别读取在 RTC模块中的BCDSEC BCDMIN
10、, BCDHOUR BCDDAY BCDDATE BCDMON 和 BCDYEAR但是,因为多寄存器读 取可能存在一秒的误差。例如,当用户读BCDYEAR口 BCDMON,结构假定是2059年12月31日23点59分。当用户读BCDSE寄存器,值的范围是从1到59 (秒)就没有问题,但是如果值是0,年月日就变成了 2060年1月1日0时 0分因为有刚才提到的1秒误差。在这种情况下如果 BCDSEC为0,用户应该 重读 BCDYEA到 BCDSECC.3备用电池操作RTC逻辑可以由备用电池驱动,其通过RCTVDD引脚给RTC模块提供电源, 即使系统电源关闭。当系统关闭时,CPU和RTC模块的接口
11、是封闭的,备用电 池仅驱动振荡电路和BCD计数器以最小化电源消耗。C.4报警功能RTC在掉电模式或正常操作模式下的特定时间会发出报警信号。在正常操作 模式下报警中断(INT_RTC被激活。在掉电模式下,电源管理唤醒信号(PMWKUP 也如INT_RTC一样被激活。RTC报警寄存器(RTCALM决定了报警的使能状态 和报警时间设定的条。C. 5节拍时间中断RTC节拍时间是用于中断请求。TICNT寄存器有一个中断使能位和对于中断 的计数器值当节拍时间中断出现时,计数器的值为0。中断周期如下:Period =(n+1 ) / 128 seco ndn:节拍计数器值 (1127)RTC节拍时间可以用于
12、实时操作 系统内核时间节拍。如果时间节拍由 RTC时间节拍生成,与实时操作系统功能 相关的时间就会和实时同步。D. R TC寄存器(1)实时时钟控制寄存器(RTCCON(2)节拍时间计数寄存器(TICNT(3)RTC报警控制寄存器(RTCALM(4)报警秒数据寄存器(ALMSEC(5)报警分钟数据寄存器(ALMMIN)(6)报警小时数据寄存器(ALMHOUR(7)报警日期数据寄存器(ALMDATE(8)报警月数据寄存器(ALMMON)(9)报警年数据寄存器(ALMYEAR(10)BCD 秒寄存器(BCDSEC(11)BCD 分寄存器(BCDMIN(12)BCD小时寄存器(BCDHOUR(13)
13、 BCD日期寄存器(BCDDATE(14) BCD 日寄存器(BCDDAY(15) BCD 月寄存器(BCDMON(16) BCD 年寄存器(BCDYEAR(四) 步进机与直流电机工作原理步进电机是一种将电脉冲转化为角位移的执行机构。步进电机正传,双四拍 程序。 时序控制为AB-BC-CD-DA-AJB共控制运转4圈(电机步距角为18度)。 每一步的延时控制。值越大,延时越久;步进电机反转,双四拍程序时序控制为 AD-DC-CB-BA-AD步距角为18度)。每一步的延时控制。值越大,延时越久。正转模式:dly为延时void MOTO_Mode1(ui nt32 dly)/ AB相有效GPIOS
14、ET(MOTOA);GPIOSET(MOTOB);Delay(dly);GPIOCLR(MOTOA);GPIOCLR(MOTOB);/ BC相有效GPIOSET(MOTOB);GPIOSET(MOTOC);Delay(dly);GPIOCLR(MOTOB); GPIOCLR(MOTOC);/ CD相有效GPIOSET(MOTOC);GPIOSET(MOTOD);Delay(dly);GPIOCLR(MOTOC);GPIOCLR(MOTOD);/ DA相有效GPIOSET(MOTOD);GPIOSET(MOTOA);Delay(dly);GPIOCLR(MOTOD);GPIOCLR(MOTOA)
15、;直流电机由PWM脉冲调制控制;脉冲为1是电机转动,0时停止转动。通 过PWM占空比来实现加减速。参考程序:void StepMOTO_Test(void)/ uin t32 a = 0;/步进电机控制口设置rGPCCON = (rGPCCON & (0x0000FC03) | (0x0000540助; GPC0、 GPC5-7 口设置为输出rGPCUP = rGPCUP | 0x00E1;/ 禁止GPC0 GPC5-7口的上拉电阻rGPCDAT= rGPCDAT& (0x00E1);/ 设置GPC0 GPC5-7口输出低电平while(1)UART_SendStr("
16、;Pleaseinput 'z' OR f to control zhengzhuan and fan zhua nn ”);UART_SendStr("Press 'o' key exit testn");switch(getch = UART_GetKey()case 'z':spri ntf("Press 'j' to speed up ; 'ESC' break out.");for(;)Chan ge_Speed();MOTO_Mode1(speed1);/控制步进
17、电机正转/在终端上显示速度(330-speed1);spri ntf(disp_buf2, "Zhe ngzhua n: StepMoto_speed is %d n",UART_Se ndStr(disp_buf2);if(UART_GetFlag() = 'j') speedup(); 加速if(UART_GetFlag() = 0x1B)/ 按 Esc键退出测试break;break;case 'f:spri ntf("Press 'j' to speed up ; 'ESC' break out.&q
18、uot;);for(;)Chan ge_Speed();MOTO_Mode2(speed1); /控制步进电机反转/在终端上显示速度spri ntf(disp_buf2, "Fa nzhua n: StepMoto_speed is %d n".-(330-speed1);if(UART_GetFlag() = 'j')UART_Se ndStr("j"); speedup(); 加速if(UART_GetFlag() = Ox1B) / 按 Esc键退出测试 break;break;default: break;if(getch = &
19、#39;o')/按下字母'o'键退出整个步进电机测试break;直流电机测试程序:void DCMOTO_Test(void)ui nt32 i = 0, a = 0;uin t16 pwm_dac;char get_ch = 0;/ TOUT0 口设置rGPBCON = (rGPBCON & (0x03<<0) | (0x02<<0);/ rGPBCON1:0=10b,设置 TOUT0功能rGPBUP = rGPBUP | 0x0001;/ 禁止TOUT 0 口的上拉电阻/设置GPH9为GPIO输出模式rGPHCON = (rGPHCO
20、N & (0x03<<18) | (0x01<<18); / GPH9 口 rGPHDAT = rGPHDAT & (1<<9);/ 输出 0 电平rGPHUP = rGPHUP | (1<<9);/初始化PWM输出。设PWM周期控制值为255pwm_dac = 250*255330;/ 初始化占空比PWM_Init(255, pwm_dac);while(1)/按'z'键控制正传,f键控制反转,s'键停止转动'Esc退出测试 UART_SendStr("nPressthe key to
21、control state: 'z'-zhengzhuan'f-fa nzhua n's'-stopn");switch(get_ch =UART_GetKey()case 'z':rGPBDAT = rGPHDAT | (1<<9);rGPHDAT = rGPHDAT & (1<<9);while(1)Chan ge_Speed();rTCMPB0 = (speed2*25/330);spri ntf(disp_buf3, "DCMoto_speed is %d n", sp
22、eed2); 终端显示正转速度if(UART_GetFlag() = 's')rGPBDAT = rGPHDAT & (1<<9);rGPHDAT = rGPHDAT & (1<<9); break;break;case 'f:rGPBDAT = rGPHDAT & (1<<9);rGPHDAT = rGPHDAT | (1<<9);while(1)Chan ge_Speed();rTCMPBO = (speed2*25/330);spri ntf(disp_buf3, "DCMoto_s
23、peed is %d n", (-speed2); /终端显示正转速度UART_Se ndStr(disp_buf3);if(UART_GetFlag() = 's')rGPBDAT = rGPHDAT & (1<<9);rGPHDAT = rGPHDAT & (1<<9);break; break;default : break;if(UART_GetFlag() = Ox1B) break;(五) IIC通信实现EEPROM的读写(一) I2C , 一种总线结构。I2C串行总线一般有两根信号线,一根是双向 的数据线SDA,另
24、一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA 都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。实验过程中必须先初始化总线一启动总线后才能用其进行通信。int I2C_Se ndByte(ui nt8 dat) /发送一字节数据,并接收应答位int l2C_RcvByteNA(uint8 *dat)接收I2C总线上一字节数据并发送非应答 位int l2C_RcvByteA(uint8 *dat) 接上I2C总线上一字节数据,并发送应答位 void Stopl2C(ui nt8 sen d)/ 结束总线int ISe ndStr(ui nt8 sla, uin t8
25、*suba, uin t8 *s, uint8 no)【* Descriptions:使用硬件I2C发送数据。* In put: sla从机地址*suba器件子地址(第一字节用来表示子地址字节个数)*s发送数据缓冲区*no发送数据个数* Output:操作成功返回TRUE仲载失败/无从机应答返回FALSE* Note:使用前设置好参数。程序不会更改 s、suba缓冲区的数据】int IRcvStr(ui nt8 sla,ui nt8 *suba,ui nt8 *s,ui nt8 no)v使用硬件I2C读取数据。参数和发送对应(二)测试 EEPROM程序 void TestEEPROM(void
26、)uint8 suba2;int rw_err;int i;rw_err = 0;/写数据测试suba0 = 1;/ 1 位子地址suba1 = 0x00;/ 子地址for(i=0; i<10; i+)dat_bufi = i+'O'UART_Se ndStr("data of write:");for(i = 0; i < 5; i+)UART_Se ndByte(dat_bufi);UART_Se ndStr("n");i2c_opsta=ISe ndStr(CAT1025, suba, dat_buf, 5); for(
27、i=0; i<10000; i+);/ 等待写周期/读出校验for(i=0; i<5; i+) dat_bufi = 0x00;i2c_opsta=IRcvStr(CAT1025, suba, dat_buf, 5);UART_Se ndStr("data of read:");for(i = 0; i < 5; i+)UART_Se ndByte(dat_bufi);UART_Se ndStr("n");for(i=0; i<5; i+)if(dat_bufi != (i+'0') rw_err = 1;/判断操
28、作是否出错,如果出错则蜂鸣报警 if(rw_err) ErrorShow();【如果写入的数据和读出的相同,贝U测试通过】四、实验程序【main函数:主要实现与终端交互的功能,通过键盘输入字符的判断来决定执 行的功能】int mai n(void)uint8 g_getch ;int i = 0;UART_Select(0); / 选择 UART0UART_Init();/UART0 初始化LEDnit();/LED相关初始化EINT_init();/外部中断初始化while(1)fun_test();switch(g_getch = UART_GetKey()case '1'
29、:UART_Se ndByte(g_getch);UART_Se ndStr("n");LED_DispAIIOn(); /LED 灯全亮DelayNS(IO);UART_Se ndStr("nTest LED_DispAll On is Over!n");break;case 2:UART_Se ndByte(g_getch);UART_Se ndStr("n");LED_DispAIIOff(); /LED 灯全灭DelayNS(10);UART_Se ndStr("nTest LED_DispAllOff is Over!n");break;case 3:UART_Se ndByte(g_getch);UART_Se ndStr("n");for(;)/死循环,当检测到按下 Esc键时退LED_onebyone();/ 流水灯if(UART_GetFlag() = Ox1B) / 检测是否按下Esc键 break;LED_DispAIIOff();UART_Se ndStr("nTest LED_O nebyO ne is
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年全钢脉冲电子打火单灶项目投资价值分析报告
- 2025至2030年中国纸壳打包机数据监测研究报告
- 2025至2030年中国棉粘色纱数据监测研究报告
- 2025至2030年中国光盘承载器数据监测研究报告
- 2025-2030年复合材料体育用品企业制定与实施新质生产力战略研究报告
- 2025年度家居定制服务合同附件规范
- 2025年度机床设备生产线配套合同
- 2025年度数据中心建设项目招标代理合同
- 2025年度旧锅炉买卖与拆除废弃物再生资源合同
- 2025年度建筑消防工程消防安全管理咨询服务合同
- 六安市叶集化工园区污水处理厂及配套管网一期工程环境影响报告书
- 运动技能学习与控制课件第一章运动技能学习与控制概述
- 固体废弃物检查记录
- 工程设计费取费标准
- GB/T 5465.1-2009电气设备用图形符号第1部分:概述与分类
- 2023年辽宁铁道职业技术学院高职单招(数学)试题库含答案解析
- CAPP教学讲解课件
- 自然环境的服务功能课件 高中地理人教版(2019)选择性必修3
- 小耳畸形课件
- 新人教版初中初三中考数学总复习课件
- 机械制造有限公司组织架构图模板
评论
0/150
提交评论