您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于嵌入式ARM+Linux平台的直流电机调速控制系统的设计
题目基于嵌入式ARM+Linux平台的直流电机调速控制系统1基于嵌入式ARM+Linux平台的直流电机调速控制系统的设计摘要本设计基于北京博创兴业科技有限公司开发的UP-NETARM2410-S嵌入式实验平台,它采用ARM7TDMI内核的三星S3C44B0X01芯片,且采用RedHatLinux9.0作为它的操作系统。设计了调速控制系统,并实现驱动程序对直流电机的控制,电机的转动情况会通过实验箱上的AD模块中电位器的旋转不同而变化。在UP-NETARM2410-S嵌入式实验平台上的实验结果表明系统运行正常、稳定。关键词:ARM;Linux;直流电机;驱动一、设计要求2采用实验箱上的电位器作为信号输入器件,控制直流电机的运转方向和运转速度。电位器处于中间值时,电机停止不转,电位器顺时针调大时电机顺时针旋转,且速度随着电位器的旋转而增加。电位器向逆时针转动调小时,电机逆时针旋转,且速度随着电位器旋转的角度增加。电位器转到最大或最小值时,电机的速度应该达到最高速度。电位器在中间位置时,电机不应该出现抖动情况。二、Linux开发环境设置1、建立工作目录[root@home]#mkdirzgc[root@home]#cdzgc2、编写程序源代码在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,在本次开发过程中使用vim,我们可以是用下面的命令来编写dcm_main.c的源代码,进入10_dcmotor目录使用vi命令来编辑代码:[root@10_dcmotor]#vidcm_main.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为dcm_main.c的文件。3、编写Makefile要使上面的dcm_main.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。下面是本次实验用到的Makefile文件。CC=armv4l-unknown-linux-gcc#CC=gccLDFLAGS=-staticEXEC=nihaoOBJS=hello.oall:$(EXEC)$(EXEC):$(OBJS)3$(CC)$(LDFLAGS)-o$@$(OBJS)clean:-rm-f$(EXEC)*.elf*.gdb*.o4、编译应用程序在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:[root@10_dcmotor]#makeclean[root@10_dcmotor]#make三、系统设计1、设计思路根据设计要求,先分别对实验箱上AD程序和电机程序进行调试并熟练,然后在电机主程序中加入AD模块及线程,将AD模块的电位器转动角度转换成的电压幅度的1024倍作为电机转动的pwm值。这样即可以满足设计要求。2、硬件流程框图对直流电机进行调速和控制,需经过AD模块,在linux操作系统中,在电机中加载AD程序后,挂载到实验箱程序。电脑通过串口把执行的程序命令发给S3C44B0X01处理器,在处理器中通过分析数据。手动调节AD模块中电位器后,处理器收到相应信号,并发命令给电机,使电机的转动做出相应的调整。硬件流程框图如图1所示。图1硬件流程框图3、软件设计及调试虽然实验室的arms3c2410开发箱已经搭建好开发环境,可是这一部还是必须得熟悉的,首先是Boot—Loader的移植,然后再进行LINUX内核移植。在宿主机的linux下需要搭建Linux交叉编译环境,用于应用程序的开发和编译。4将硬件系统设计好之后,必须开发、加载直流电机的驱动程序,驱动设备开发商都已经提供,只需要insmod到目标机上,即可编程操作这些设备。dcm_main.c程序中主要实现代码:/****************************************************************/intmain(intargc,char**argv){floatd;pthread_tth_com;void*retval;inti=0;intstatus=1;intsetpwm=0;intfactor=DCM_TCNTB0/1024;if(init_ADdevice()0)return-1;pthread_create(&th_com,NULL,comMonitor,0);//AD模块线程if((dcm_fd=open(DCM_DEV,O_WRONLY))0){printf(Erroropening%sdevice\n,DCM_DEV);return1;}for(;;){d=((float)GetADresult(1)*3.3)/1024.0;printf(a%d=%8.4f\t,i,d);if(d=0.5){//由于电位器在0.5—1.8之间突变d=d*1024.0-0.5*1024.0;//乘以1024使电机转动快些setpwm=-d;}elseif(d=1.8){d=d*1024.0-1.8*1024.0;setpwm=-d;}else{setpwm=0;//在中间范围内电机静止}5ioctl(dcm_fd,DCM_IOCTRL_SETPWM,(setpwm*factor));Delay(500);printf(setpwm=%d\n,setpwm);}pthread_join(th_com,&retval);close(dcm_fd);return0;}软件流程框图如图2所示图2软件流程框图四、测试结果将程序挂载后运行dcm_main.c,手动转动实验箱上AD模块的电位器k1,直流电机会做出相应的变动,处理器将电位器转动对应的电压值和直流电机转动对应的pwm值通过实验箱的串口发回到电脑的linux的minicom运行环境中。1、电位器调到其对应的电压值大于1.8v时,直流电机顺时针转动,且电位器顺时针调大时,电机速度随着电位器的旋转而增加。电位器转到最大时,电机的速度达到最高速度。6图3实验箱上电机正转时电位器转动对应的电压值和电机转动对应的pwm值2、电位器调到其对应的电压值小于0.5v时,直流电机逆时针转动,电位器向逆时针转动调小时,电机速度随着电位器的旋转而增加。电位器转到最小值时,电机的速度达到最高速度。7图4实验箱上电机逆转时电位器转动对应的电压值和电机转动对应的pwm值3、电位器调到其对应的电压值处于中间值时,电机停止不转。图5实验箱上电机静止时电位器转动对应的电压值和电机转动对应的pwm值8参考文献[1]刘宝廷,程树康,等.步进电机及其驱动控制系统[M].哈尔滨:哈尔滨工业大学出版社1997.[2]华清远见嵌入式培训中心.嵌入式LinuxC语言应用程序设计[M].北京:人民邮电出版社2007.[3]北京博创科技ESTC培训中心.2410-S实验指导书.北京博创公司.2005.10[4]韦东山.嵌入式Linux)立用开发完全手[M].北京:人民邮电出版社,2008.[5]李亚锋,欧文盛等.ARM嵌入式LINUX系统开发从入门到精通.北京:清华大学出版社2007.[6]周立功,等.ARM微_控制器基础与实践[M].北京:北京航天航空大学出版社,2003.
本文标题:基于嵌入式ARM+Linux平台的直流电机调速控制系统的设计
链接地址:https://www.777doc.com/doc-5922810 .html