ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:24.15KB ,
资源ID:11505761      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11505761.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验一 直流步进电机综合控制系统研发设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验一 直流步进电机综合控制系统研发设计.docx

1、实验一 直流步进电机综合控制系统研发设计实验一 直流、步进电机综合控制系统设计一、实验目的 通过本次实验熟悉MagicARM2410 GPIO、UART、RTC,步进电机,直流电机,IIC的工作原理;并能熟悉的编程控制。矚慫润厲钐瘗睞枥庑赖。二、实验要求以MagicARM2410为实验平台,设计一个通过串口通信交互控制的综合型控制系统。具体来说,可在启动时,自动列出一些选项,通过键盘选择某个选项而实现其功能;考虑到实时性,再按某个控制键能立刻停止当前功能而回到初始的待选状态。具体功能要求如下: 1、实现四个LED灯按照十六进制的规则依次亮灭; 2、在超级终端上输入两个两位数,实现两位数的加减乘

2、除并显示运算结果; 3、显示当前的年月日、星期、时分秒; 4、实现步进电机的调速和正反转;可用旋转按钮W1或按键控制调速,在超级终端和数码管上同步显示其正反转和转速信息; 5、实现直流电机德调速和正反转;可用旋转按钮W2或按键控制调速,在超级终端和数码管上同步显示其正反转和转速信息; 6、利用IIC通信,实现EEPROM的读写;在超级终端上显示地址和数据。聞創沟燴鐺險爱氇谴净。三 、实验原理(一)LED灯四个小灯分别接于GPE11、GPE12 GPH4、GPH6端口;控制端口“0“和“1”分别实现亮灭(端口设为输出)如下:残骛楼諍锩瀨濟溆塹籟。void LED_init(void) / 初始化

3、I/O rGPECON = (rGPECON & (0x0F22) | (0x0522); / rGPECON25:22 = 0101b,设置GPE11、GPE12为GPIO输出模式酽锕极額閉镇桧猪訣锥。 rGPHCON = (rGPHCON & (0x338) | (0x118); / rGPHCON13:8 = 01xx01b,设置GPH4、GPH6为GPIO输出模式彈贸摄尔霁毙攬砖卤庑。 (二)UARTUART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。UART

4、首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是58个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。 在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。謀荞抟箧飆鐸怼类蒋薔。UART作用1 发送/接收逻辑2 波特率的产生3 数据收发4 中断控制出现以下情况时,可使U

5、ART 产生中断: FIFO 溢出错误线中止错误(line-break,即Rx 信号一直为0 的状态,包括校验位和停止位在内)奇偶校验错误帧错误(停止位不为1)接收超时(接收FIFO 已有数据但未满,而后续数据长时间不来)发送接收由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻 UART 只能向中断产生一个中断请求。通过查询中断状态函数UARTIntStatus( ),软件可以在同一个中断服务函数里处理多个中断事件(多个并列的if 语句)。厦礴恳蹒骈時盡继價骚。5 回环操作6 串行红外协议UART初始化函数如下void UART_Init(void) int i;

6、if(g_uart_sel) / 判断是否为串口1 / I/O口设置 (GPH5,GPH4) rGPHUP = rGPHUP | (0x034); rGPHCON = (rGPHCON & (0x00000F00) | (0x00000A00); 茕桢广鳓鯡选块网羈泪。 / 串口模式设置 rUFCON1 = 0x00; / 禁止FIFO功能 rUMCON1 = 0x00; / AFC(流控制)禁能 rULCON1 = 0x03; / 禁止IRDA,无奇偶校验,1位停止位,8位数据位 rUCON1 = 0x245; / 使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式,鹅

7、娅尽損鹌惨歷茏鴛賴。 / 禁止接收超时中断,使能接收错误中断,正常工作模式,中断或查询方式(非DMA) / 串口波特率设置 rUBRDIV1=(int)(PCLK/16.0/UART_BPS + 0.5) -1; else / I/O口设置 (GPH3,GPH2) rGPHUP = rGPHUP | (0x032); rGPHCON = (rGPHCON & (0x000000F0) | (0x000000A0); 籟丛妈羥为贍偾蛏练淨。 / 串口模式设置 rUFCON0 = 0x00; / 禁止FIFO功能 rUMCON0 = 0x00; / AFC(流控制)禁能 rULCON0 = 0x0

8、3; / 禁止IRDA,无奇偶校验,1位停止位,8位数据位 rUCON0 = 0x245; / 使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式,預頌圣鉉儐歲龈讶骅籴。 / 禁止接收超时中断,使能接收错误中断,正常工作模式,中断或查询方式(非DMA) / 串口波特率设置 rUBRDIV0=(int)(PCLK/16.0/UART_BPS + 0.5) -1; for(i=0;i100;i+);(三)RTCA 概述实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。RTC 可以使用STRB/LDRB ARM 操作传输二进制码十进制数的 8 位数据给 CPU。

9、数据包括秒、分钟、小时、日期、天、月、年的时间信息。RTC 单元可以在 32.768KHz 的外部晶振下工作,可以可以执行报警功能。渗釤呛俨匀谔鱉调硯錦。B 特点- BCD 数:秒、分钟、小时、日期、日、月、年- 闰年生成器- 报警功能:报警中断或从掉电模式中唤醒- 已经解决 2000 年问题- 独立电源引脚(RTCVDD)- 支持对于实时内核时间节拍的毫秒节拍时间中断C 实时时钟操作C.1 闰年发生器闰年发生器可以基于 BCDDATE、BCDMON、BCDYEAR 的数据,从 28、29、30、31 中确定每个月的最后一天。该模块在确定某月最后一天的时候会考虑闰年的因素。一个 8 位的计数器

10、仅能代表两个 BCD 数字,所以它不能确定是否是 00 年(该年的最后两个数字是00)。铙誅卧泻噦圣骋贶頂廡。C.2读写寄存器为了写RTC模块中的BCD寄存器,RTCCON寄存器的位 0 必须置 1。为了显示秒分小时星期日月年,CPU应该分别读取在RTC模块中的BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON,和BCDYEAR。但是,因为多寄存器读取可能存在一秒的误差。例如,当用户读BCDYEAR和BCDMON,结构假定是 2059 年 12 月 31 日 23 点 59 分。当用户读BCDSEC寄存器,值的范围是从 1 到 59(秒)就没有问题,但是如果

11、值是 0,年月日就变成了 2060 年 1 月 1 日0 时 0 分因为有刚才提到的 1 秒误差。在这种情况下如果BCDSEC为 0,用户应该重读BCDYEAR到BCDSEC。擁締凤袜备訊顎轮烂蔷。C.3 备用电池操作RTC 逻辑可以由备用电池驱动,其通过 RCTVDD 引脚给 RTC 模块提供电源,即使系统电源关闭。当系统关闭时,CPU 和 RTC 模块的接口是封闭的,备用电池仅驱动振荡电路和BCD 计数器以最小化电源消耗。贓熱俣阃歲匱阊邺镓騷。C.4 报警功能RTC 在掉电模式或正常操作模式下的特定时间会发出报警信号。在正常操作模式下报警中断(INT_RTC)被激活。在掉电模式下,电源管理

12、唤醒信号(PMWKUP)也如 INT_RTC一样被激活。RTC 报警寄存器(RTCALM)决定了报警的使能状态和报警时间设定的条。坛摶乡囂忏蒌鍥铃氈淚。C.5 节拍时间中断RTC 节拍时间是用于中断请求。TICNT 寄存器有一个中断使能位和对于中断的计数器值当节拍时间中断出现时,计数器的值为 0。中断周期如下:Period = ( n+1 ) / 128 secondn: 节拍计数器值 (1127)RTC 节拍时间可以用于实时操作系统内核时间节拍。如果时间节拍由 RTC 时间节拍生成,与实时操作系统功能相关的时间就会和实时同步。蜡變黲癟報伥铉锚鈰赘。D.RTC寄存器(1)实时时钟控制寄存器(R

13、TCCON)(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)BCD 日期寄存器(BCDDATE)(14)BCD 日寄存器(BCDDAY)(15)BCD 月寄存器(BCDMON)(16)BCD 年

14、寄存器(BCDYEAR)(四)步进机与直流电机工作原理步进电机是一种将电脉冲转化为角位移的执行机构。步进电机正传,双四拍程序。 时序控制为AB-BC-CD-DA-AB,共控制运转4圈(电机步距角为18度)。 每一步的延时控制。值越大,延时越久;步进电机反转,双四拍程序时序控制为AD-DC-CB-BA-AD。步距角为18度)。每一步的延时控制。值越大,延时越久。買鲷鴯譖昙膚遙闫撷凄。正转模式:dly为延时void MOTO_Mode1(uint32 dly) / AB相有效 GPIOSET(MOTOA); GPIOSET(MOTOB); Delay(dly); GPIOCLR(MOTOA); G

15、PIOCLR(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);直流电机由PWM脉冲调制控制;脉冲为1是电机转动,0时停止转动。通过

16、PWM占空比来实现加减速。参考程序:綾镝鯛駕櫬鹕踪韦辚糴。void StepMOTO_Test(void) / uint32 a = 0; / 步进电机控制口设置 rGPCCON = (rGPCCON & (0x0000FC03) | (0x00005401); / GPC0、GPC5-7口设置为输出驅踬髏彦浃绥譎饴憂锦。 rGPCUP = rGPCUP | 0x00E1; / 禁止GPC0、GPC5-7口的上拉电阻猫虿驢绘燈鮒诛髅貺庑。 rGPCDAT = rGPCDAT & (0x00E1); / 设置GPC0、GPC5-7口输出低电平 锹籁饗迳琐筆襖鸥娅薔。 while(1) UART_

17、SendStr(Please input z OR f to control zhengzhuan and fanzhuann);構氽頑黉碩饨荠龈话骛。 UART_SendStr(Press o key exit testn); switch(getch = UART_GetKey() case z: sprintf(Press j to speed up ; ESC break out.); 輒峄陽檉簖疖網儂號泶。 for(;) Change_Speed(); MOTO_Mode1(speed1); / 控制步进电机正转 /在终端上显示速度 sprintf(disp_buf2, Zhengz

18、huan: StepMoto_speed is %d n, (330-speed1);尧侧閆繭絳闕绚勵蜆贅。 UART_SendStr(disp_buf2); if(UART_GetFlag() = j) speedup();/加速 if(UART_GetFlag() = 0x1B) /按Esc键退出测试 break; break; case f: sprintf(Press j to speed up ; ESC break out.); 识饒鎂錕缢灩筧嚌俨淒。 for(; ;) Change_Speed(); MOTO_Mode2(speed1); / 控制步进电机反转 /在终端上显示速度

19、 sprintf(disp_buf2, Fanzhuan: StepMoto_speed is %d n, -(330-speed1);凍鈹鋨劳臘锴痫婦胫籴。 UART_SendStr(disp_buf2); if(UART_GetFlag() = j) UART_SendStr(j); speedup();/加速 if(UART_GetFlag() = 0x1B) /按Esc键退出测试 break; break; default: break; if(getch = o) /按下字母o键退出整个步进电机测试 break; 直流电机测试程序:void DCMOTO_Test(void) uin

20、t32 i = 0, a = 0; uint16 pwm_dac; char get_ch = 0; / TOUT0口设置 rGPBCON = (rGPBCON & (0x030) | (0x020); / rGPBCON1:0 = 10b,设置TOUT0功能 恥諤銪灭萦欢煬鞏鹜錦。 rGPBUP = rGPBUP | 0x0001; / 禁止TOUT0口的上拉电阻 鯊腎鑰诎褳鉀沩懼統庫。 / 设置GPH9为GPIO输出模式 rGPHCON = (rGPHCON & (0x0318) | (0x0118); / GPH9口硕癘鄴颃诌攆檸攜驤蔹。 rGPHDAT = rGPHDAT & (19)

21、; / 输出0电平阌擻輳嬪諫迁择楨秘騖。 rGPHUP = rGPHUP | (19); / 初始化PWM输出。设PWM周期控制值为255 pwm_dac = 250*255/330; / 初始化占空比 PWM_Init(255, pwm_dac); while(1) /按z键控制正传,f键控制反转,s键停止转动 Esc退出测试 UART_SendStr(nPress the key to control state: z-zhengzhuan f-fanzhuan s-stopn); 氬嚕躑竄贸恳彈瀘颔澩。 switch(get_ch =UART_GetKey() case z: rGPBD

22、AT = rGPHDAT | (19); rGPHDAT = rGPHDAT & (19); while(1) Change_Speed(); rTCMPB0 = (speed2*255/330); sprintf(disp_buf3, DCMoto_speed is %d n, speed2); /终端显示正转速度釷鹆資贏車贖孙滅獅赘。 UART_SendStr(disp_buf3); if(UART_GetFlag() = s) rGPBDAT = rGPHDAT & (19); rGPHDAT = rGPHDAT & (19); break; break; case f: rGPBDAT

23、 = rGPHDAT & (19); rGPHDAT = rGPHDAT | (19); while(1) Change_Speed(); rTCMPB0 = (speed2*255/330); sprintf(disp_buf3, DCMoto_speed is %d n, (-speed2); /终端显示正转速度怂阐譜鯪迳導嘯畫長凉。 UART_SendStr(disp_buf3); if(UART_GetFlag() = s) rGPBDAT = rGPHDAT & (19); rGPHDAT = rGPHDAT & (19); break; break; default : break

24、; if(UART_GetFlag() = 0x1B) break; (五)IIC通信实现EEPROM的读写(一)I2C,一种总线结构。I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。谚辞調担鈧谄动禪泻類。实验过程中必须先初始化总线启动总线后才能用其进行通信。int I2C_SendByte(uint8 dat) /发送一字节数据,并接收应答位int I2C_RcvByteNA(uint8 *dat)/ 接收I2C总线上一字节数据并发送非应答位嘰觐詿缧铴嗫偽純铪

25、锩。int I2C_RcvByteA(uint8 *dat)/ 接上I2C总线上一字节数据,并发送应答位熒绐譏钲鏌觶鷹緇機库。void StopI2C(uint8 send)/结束总线int ISendStr(uint8 sla, uint8 *suba, uint8 *s, uint8 no)鶼渍螻偉阅劍鲰腎邏蘞。【* Descriptions: 使用硬件I2C发送数据。* Input: sla 从机地址* suba 器件子地址(第一字节用来表示子地址字节个数)* s 发送数据缓冲区* no 发送数据个数* Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE* Note

26、: 使用前设置好参数。程序不会更改s、suba缓冲区的数据】int IRcvStr(uint8 sla,uint8 *suba,uint8 *s,uint8 no)纣忧蔣氳頑莶驅藥悯骛。/v使用硬件I2C读取数据。参数和发送对应(二)测试EEPROM程序void TestEEPROM(void) uint8 suba2; int rw_err; int i; rw_err = 0; / 写数据测试 suba0 = 1; / 1位子地址 suba1 = 0x00; / 子地址 for(i=0; i10; i+) dat_bufi = i+0; UART_SendStr(data of write

27、:); for(i = 0; i 5; i+) UART_SendByte(dat_bufi); UART_SendStr(n); i2c_opsta=ISendStr(CAT1025, suba, dat_buf, 5); for(i=0; i10000; i+); / 等待写周期 / 读出校验 for(i=0; i5; i+) dat_bufi = 0x00; i2c_opsta=IRcvStr(CAT1025, suba, dat_buf, 5); UART_SendStr(data of read:); for(i = 0; i 5; i+) UART_SendByte(dat_buf

28、i); UART_SendStr(n); for(i=0; i5; i+) if(dat_bufi != (i+0) rw_err = 1; / 判断操作是否出错,如果出错则蜂鸣报警 if(rw_err) ErrorShow(); 【如果写入的数据和读出的相同,则测试通过】四、实验程序【main函数:主要实现与终端交互的功能,通过键盘输入字符的判断来决定执行的功能】int main(void) uint8 g_getch ; int i = 0; UART_Select(0); /选择UART0 UART_Init(); /UART0初始化 LED_init(); /LED相关初始化 EINT_init(); /外部中断初始化 while(1) fun_test();

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

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