基于嵌入式ARM+Linux平台的直流电机调速控制系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2012--2013学年第二学期物电学院期末考试卷嵌入式系统与应用学号:姓名:班级:成绩:评语:(考试题目及要求)嵌入式大作:采用实验箱上的电位器作为信号输入器件,控制直流电机的运转方向和运转速度。电位器处于中间值时,电机停止不转,电位器顺时针转动时电机顺时针旋转,且速度随着电位器的旋转而增加。电位器向逆时针转动时,电机逆时针旋转,且速度随着电位器旋转的角度增加。电位器转到最大或最小值时,电机的速度应该达到最高速度。电位器在中间位置时,电机不应该出现抖动情况。装订线目录一、设计要求.............................................................................................1二、开发环境及设计工具........................................................................1三、设计思路.............................................................................................11.总体设计............................................................................................12.AD转换.............................................................................................23.平滑滤波............................................................................................24.控制电机转速...................................................................................2四、实验过程.............................................................................................31.创建工作目录...................................................................................32.编译连接............................................................................................33.设置共享目录...................................................................................44.加载电机驱动...................................................................................45.运行程序............................................................................................5五、结果显示.............................................................................................5六、总结.....................................................................................................6七、附录.....................................................................................................7直流电机调速源程序..........................................................................71基于嵌入式ARM+Linux平台的直流电机调速控制系统一、设计要求采用实验箱上的电位器作为信号输入器件,控制直流电机的运转方向和运转速度。电位器处于中间值时,电机停止不转,电位器顺时针转动时电机顺时针旋转,且速度随着电位器的旋转而增加。电位器向逆时针转动时,电机逆时针旋转,且速度随着电位器旋转的角度增加。电位器转到最大或最小值时,电机的速度应该达到最高速度。电位器在中间位置时,电机不应该出现抖动情况。二、开发环境及设计工具UP-tech2410s实验箱,S3c2410处理器,Linux操作系统,VI编译器,armv4l-unknown-linux-gcc编译器。三、设计思路1.总体设计电位器的值可以通过AD模块转换成数字值,将采集来的电位器值经算法滤波处理后用于电机调速,这样就实现了通过电位器控制电机转速和方向。PWM调速AD转换电位器ARM处理器电机驱动程序直流电机PC机显示电机转动情况图3-1总体设计框图22.AD转换转动电位器改变的是模拟信号,需要转换成数字信号用来处理电机转速,利用AD模块采集电位器的值。选择试验箱上最左边的电位器(0通道)。以下为采集模拟量并转为数字量的程序。//sets3c44b0ADregisterandstartADif(init_ADdevice()0)return-1;/*Createthethreads*/pthread_create(&th_com,NULL,comMonitor,0);printf(\nPressEnterkeyexit!\n);for(i=0;i20;i++)d[i]=((float)GetADresult(0)*3.3)/1024.0;//为d[i]赋初值3.平滑滤波为使响应速度和数据稳定度达到最佳效果,对采集来的数据进行平滑滤波处理。代码如下:while(stop==0){d[19]=((float)GetADresult(0)*3.3)/1024.0;//采集数据for(i=1;i20;i++)d[i-1]=d[i];//滑动赋值,舍去最旧的一个值sum=0;for(i=0;i20;i++)sum=sum+d[i];ave=sum/20;//求平均值}4.控制电机转速对电机的控制有转速和方向两个方面。采集来的d值得范围是0.0~3.0,如果直接用来控制电机转速,速度太小,方向也不能改变。所以引用d值,乘以200将其值扩大,再减去一固定值,分成正负两部分,当转速stepwm为正值时,电机顺时针转动,当stepwm为负值时,电机逆时针转动。具体程序代码如下:3a=ave*200;setpwm=a-330;printf(“setpwm=%d\t\t”,setpwm);if(setpwm==0)printf(“stop”);elseif(setpwm0)printf(“anticlockwise”);elseprintf(“clockwise”);printf(“\r”);ave为采集电位器的值经平滑滤波处理后的值,ave的范围是0~3,a=ave*200,a的范围是0~600,再对a减去300,则得到一个范围为-300~300的整数值,这个整数值可作为电机的转速setpwm。当setpwm为-300和300分别是电机逆时针速度最大和顺时针速度最大。经实验发现,setpwm最小为-300,最大为359,正负值不对称,所以改为setpwm=a-330,则setpwm得范围为-330~329。当电位器顺时针旋转到最右端时,电机顺时针旋且转速度最大(329);电位器逆时针旋转到最左端时,电机逆针旋转且速度最大(-330);电位器在中间时,电机停止转动。四、实验过程1.创建工作目录进入自己的目录\home\zyx\,新建新建project目录,拷贝04_AD下的所有文件,拷贝10_dcmotor中的driver文件夹,此时project中包含以下文件:adbinhardware.hmain.cmain.oMakefilereadme.txts3c2410-adc.hsrcdriver2.编译连接修改project下文件的属性,用命令“chmod777*”将所有文件改为可读可写可执行的。然后修改Makefile内容,修改后的Makefile见下图4-1。CC=armv4l-unknown-linux-gcc,定义编译器为armv4l-unknown-linux-gcc,即arm试验箱;4EXEC=ad,编译后生成名为“ad”的可执行程序;OBJS=main.o,编译后生成main.o的二进制文件。图4-1Makefile输入命令vimain.c,进入main.c程序的编辑界面,修改完成后保存退出,main.c程序详见附录。输入命令makeclean和make,编译成功后有以下提示:图4-2编译源程序输入命令gcc–lpthread–oadmain.c连接。3.设置共享目录新建另一个终端,输入:minicom,打开试验箱电源。输入:mount–t–onolock192.168.0.117:/home/zyx//host,若无任何提示,则说明挂载成功。4.加载电机驱动在/home/zyx/目录下输入命令:cp–rfs3c2410s-dc-motor.o/home/zyx/project/,5把驱动拷贝到project目录。然后在minicom中/host/目录下输入:insmods3c2410s-dc-motor.o加载驱动。5.运行程序Makefile中定义了编译器为armv4l-unknown-linux-gcc,所以应在试验箱上运行程序,在minicom终端的/host/project/目录下,输入“./ad”运行程序。则电机开始转动。五、结果显示运行程序,电机转动,电脑屏幕上显示电机转速和转向。旋转电位器,电机转速改变。当电位器顺时针旋转到最右端时,电机顺时针旋且转速度最大(329);电位器逆时针旋转到最左端时,电机逆针旋转且速度最大(-330);电位器在中间时,电机停止转动。将电位器从最右端旋转至最左端的过程中,电机转动情况如下:1.顺时针最大值2.顺时针减速63.逆时针加速顺时针速度减为0后,逆时针转动。4.逆时针最大值六、总结本次课程设计结合了之前做过的实验AD和电机调速内容,总体来说,完成情况还算顺利。在学嵌入式以前,我没有接触过Linux操作系统,在做本次设计时有很多不熟悉的地方,通过嵌入式这门课程,学习了很多新东西,受益匪浅。而本次课程设计的完成,意味着我对嵌入式的学习有一定的收获。在以后的学习中,我会继续学习嵌入式这方面的知识来提高自己。7七、附录直流电机调速源程序:#includestdio.h#includeunistd.h#includesys/types.h#includesys/ipc.h#includesys/ioctl.h#includepthread.h#includefcntl.h#includestring.h#includes3c2410-adc.h#defineADC_DEV/dev/adc/0rawstaticintadc_fd=-1;#defineDCM_IOCTRL_SETPWM(0x10)#defineDCM_TCNTB0(16384)staticintdcm_fd=-1;char*DCM_DEV=/dev/dcm/0raw;voidDelay(intt){inti;for(;t

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功