《山东理工大学计算机嵌入式系统设计a》由会员分享,可在线阅读,更多相关《山东理工大学计算机嵌入式系统设计a(19页珍藏版)》请在金锄头文库上搜索。
1、1山东理工大学计算机学院课课程程设设计计嵌入式系统设计(A)班级计科1104姓名学号指导教师巩秀钢 赵明波二15年 1月 15日课程设计任务书及成绩评定课程设计任务书及成绩评定21、设计题目:、设计题目:根据某路A/D采集值控制电机的速度2、题目的设计内容和要求、题目的设计内容和要求: (1)通过超级终端控制A/D通道选择 (2)A/D采集的数值大则转速快,A/D采集的数值小则转速慢。3、设计任务和要求:、设计任务和要求: 3.1程序设计、调试:要求画出程序框图,设计出全部程序并给出 程序设计说明和程序注释,并在实验系统上调试通过。 3.2课程设计说明书内容: a、本次课程设计的目的和意义。
2、b、设计报告:字数约20003000字(不包括程序清单) ,内容包括: 1 设计题目; 2 系统的主要功能、作用以及主要技术性能指标; 3 总体设计方案、工作和组成原理(框图)或设计说明、采用的技术 路线等; 4 系统设计: 接口电路设计, 程序设计 (程序框图和程序清单及注释) 其他有关的理论分析和计算; 5 设计总结:对整个设计工作过程进行归纳和综合,对设计中所存在 的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设 计实践的认识、收获和提高。 c、作品的使用或操作说明。 d、设计图纸或图表(如接口电路原理图等) 。装订时将课程设计说明 书附在该3页之后。 设计内容不允许抄袭
3、和复印,否则取消设计成绩。4、工作安排、工作安排: (设计进度及完成情况)(设计进度及完成情况) 第一阶段:选择设计项目,根据题目要求查阅资料构思设计方案、进 行电路原理图设计和程序设计以及其它准备工作。 第二阶段:对第一阶段完成的设计内容进行详细的检查或修改无错后,3按照设计方案自行在实验系统上进行程序的输入和调试。为便于调试 和查错,程序最好采用模块化结构,一部分一部分的调试,通过反复 的调试或修改直到达到设计要求为止。 第三阶段:按照3中的内容和要求撰写课程设计说明书。日期内容 12.30-12.31 选择设计题目,查阅相关资料设计方案 1.1-1.2进行电路原理图设计 1.3-1.4熟
4、悉工程环境,进行初步程序设计 1.5-1.6在实验系统上进行程序输入和调试 1.7-1.8根据要求撰写课程设计说明书5 5、主要参考文献及资料:、主要参考文献及资料:UP-CUP S210经典实验指导书 从实践中学arm体系结构与接口技术4学科部主任_(签字)6 6、成绩评定:、成绩评定:评语:设计成绩:指导老师:(签字)二年月日5目录目录 摘要6 本次课程设计的目的和意义.7 系统的主要功能、作用以及主要技术性能指标.8 总体设计方案9 系统设计10 设计总结15 作品的操作说明166摘要摘要 随着社会经济和科学技术的发展,嵌入式技术的应用越来越多走进人 们的生活,由于 linux 具有对各
5、种设备的广泛支持性,因此越来越多的应 用于各种智能信息产品中,本设计采用 ARM9 处理器,通过串口采集用 户的输入数据,从而选择 AD 通道,并将该通道的 AD 值转化为电机的转 速,AD 值越大电机转速也越快,从而实现对电机的控制。关键字:嵌入式系统 ARM9 AD 电机7本次课程设计的目的和意义本次课程设计的目的和意义 随着以计算机和计算机技术为核心的信息科学的发展, 以 ARM 为主处 理器的平台越来越受到欢迎,嵌入式平台拥有小巧、价格低廉、功耗小及 维护成本低等优点。 因此基于嵌入式平台构建控制系统可以降低其生产维 护成本,提高其可靠性和可控件,具有较高的市场价值。 本次设计采用的是
6、 ARM9 处理器,通过串口采集用户输入数据,可以 更好的满足用户需求,然后将用户选择的 AD 通道来控制电机转动。 通过一周多的学习,更加加深了我对嵌入式系统的了解,同时通过查 阅资料学会了利用嵌入式平台实现自己的所需功能, 也加深了自己所学的 嵌入式系统设计这本书的了解,知道了只啃课本是没有用的,只有通过实 践才能知道自己的不足,并求加以弥补。8系统的主要功能、作用以及主要技术性能指标系统的主要功能、作用以及主要技术性能指标 系统的主要功能根据用户输入的通道来选择某路 A/D 采集值控制电机 的速度。其要求是(1)通过超级终端控制 A/D 通道选择; (2)A/D 采集 的数值大则转速快,
7、A/D 采集的数值小则转速慢。 系统分析 因为要首先采集用户的数据,所以要进行串口的配置,共有三路 AD 通道,所以要实现对三路 AD 通道的的数据采集以及通知电机转动,最后 便是将串口采集到的用户数据进行判断, 并将用户选择的通道来控制电机 转动。 硬件设计9总体设计方案总体设计方案10系统设计系统设计接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论 分析和计算 三路 AD: 板上的 3 个 ADC 电位器对应 AIN0-2, 可通过跳线选择处 理器的 AIN0-2 是连接电位器还是引出到扩展槽。 另外 PCB 上单独增加 了一个具有 AIN0-7 的接口,同扩展槽上 AIN
8、0-7,其中 AIN0-2,AIN5, AIN7 也受跳线选择。 ADC 电路的参考电压 VREF 由多圈电位 RP1004 来提供,调试程序时需要用万用表检测 VREF 测试点并调整到合理电压 值, 否则 ADC 电位器的分压值或者扩展槽的电压将会和软件得出的数值 存在不确定关系。 三路 A/D 电路图如图串口读取数据原理: PC 机通过串口连接 ARM 平台,主程序中循环判断串口标志寄存器是11否不为空,如果不为空,说明串口接受到用户输入,然后再去判断串口的 数据寄存器中的内容,如果数据寄存器为 0,说明用户选择 0 通道,然后 读取 A/D 通道 0 的值去设置 PWM,从而控制电机转速
9、,同理通道 1,2 也是 如此。 串口电路图如下JTAG 调试电路如图电机转速控制原理: 在程序中电机转速是通过 PWM 来控制的,PWM 是由定时器 0 产生, 读取 A/D 通道值后, 然后通过设置定时器 0 的捕获比较寄存器, 从而产生 一定占空比的方波脉冲,从而改变电机的转速。 电机电路图12程序设计 #include “/inc/drivers.h“ #include “/inc/lib.h“ #include #include #include #include “inc/max504.h“ #include “inc/MotorCtrl.h“ #include “inc/EXIO
10、.h“ #include #include #pragma import(_use_no_semihosting_swi)/ ensure no functions that use semihosting#define MCLK (50700000) #define MOTOR_SEVER_FRE1000/20kHz #define MOTOR_CONT(MCLK/2/2/MOTOR_SEVER_FRE) #define MOTOR_MID(MOTOR_CONT/2)#defineADCCON_FLAG(0x115)#defineADCCON_ENABLE_START_BYREAD(0x11
11、)#define rADCCON(*(volatile unsigned *)0x58000000) #define rADCDAT0(*(volatile unsigned *)0x5800000C) #define PRSCVL (496) #defineADCCON_ENABLE_START (0x1) #define STDBM (0x02) #define PRSCEN (0x114)#define rADCCON(*(volatile unsigned *)0x58000000) #define rADCDAT0(*(volatile unsigned *)0x5800000C)
12、#define rUTRSTAT0(*(volatile unsigned *)0x50000010)13#define rUTRSTAT1(*(volatile unsigned *)0x50004010) #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch) #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch) #define RdURXH0()(*(volatile unsign
13、ed char *)0x50000024) #define RdURXH1()(*(volatile unsigned char *)0x50004024) /#define rUTRSTAT0(*(volatile unsigned *)0x50000024) #define RdURXH0()(*(volatile unsigned char *)0x50000024)void init_ADdevice()/AD 初始化 /初始化 rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN); int GetADresult(int channel)
14、/获取 AD 采样数值 rADCCON=ADCCON_ENABLE_START_BYREAD|(channel3)|PRSCEN|PRSCVL;hudelay(10); while(!(rADCCON/转换结束return (0x3ff/返回采样值int main(void) int i,j,ADData,lastADData,count=0; char Revdata10; int Channel;/用户输入的选择通道 /A,AB, B,BC, CCD,D,DA int stepdata=0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90;ARMTargetIni
15、t();/开发版初始化 init_MotorPort();/电机初始化 init_ADdevice();/AD 初始化while(1) Uart_Printf(0,“nBegin control DC motor.ttPress 0or1or2 to control step motor.n“); while(1) for(i=0;i2;i+) ADData=GetADresult(Channel);/得到某个通道的 AD 转化数值 /Uart_Printf(0,“addata=%d“,ADData); hudelay(10); SetPWM(ADData-512)*MOTOR_CONT/10
16、24);/根据 AD 值设置 PWM 转速 hudelay(10);if(rUTRSTAT0 14if(Revdata0=0x30)/用户输入 0,选择 0 通道 Channel=0; Uart_Printf(0,“nNowAD is 0 Channel,Begin control step motor.tPress 0or1or2 to control DC motor.n“); /goto next; if(Revdata0=0x31) /用户输入 1,选择 1 通道 Channel=1; Uart_Printf(0,“nNowAD is 1 Channel,Begin control step motor.tPress 0or1or2 to control DC motor.n“);