已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目编号:2015-2016学年第一学期微机原理(单片机)课程设计总结报告项目名称:步进电机控制A 班级: 姓名: 学号:微机原理(单片机)课程设计任务书项目名称:步进电机控制A内容与要求: 上位机:完成界面设计与通讯程序(1)能够设置步进电机启动、停止、正传、反转(2)能够设置步进电机转速(快、中、慢),圈数(3)能够保存电机的工作状态至文档,从文档读取电机的工作状态(4)可以对串口进行设置下位机:完成电路设计与控制程序(1)采用步进电机的控制,默认中速正传1圈(2)按键1可控制电机的启动和停止,按键2可控制电机的转动方向,按键3可控制电机的转速,按键4可控制转动圈数(每按1次加1圈)(3)由串行LCD显示当前转动方向、转速、圈数(4)通过串口与上位机通讯。项目组任务分担评价表姓名分担任务组内评价周欧翔LCD显示模块设计与编程、下位机串口通讯程序、上位机串口通讯程序、上位机界面、上位机控制程序6张璐下位机硬件连接、电路焊接、步进电机控制程序4课程设计报告评分表内容总体方案硬件设计软件设计结果分析明细清单问题分析心得体会参考文献程序代码格式规范总分学生1得分学生2得分 微机原理(单片机)课程设计报告目录1. 总体方案 .12. 硬件设计 .13. 软件设计 .34. 结果分析或项目所实现的功能、指标 55. 明细清单 .66. 设计调试中遇到的疑难问题及解决方法 .77. 心得体会与建议 .78. 参考文献 .8附录 .9 30微机原理(单片机)课程设计报告控 制 器LCD显示模块上位机步进电机模块外部按键模块一、总体方案图1-1 步进电机控制A总体功能模块示意图图中,控制器为89C52MCU,负责与上位机通讯、控制步进电机的开闭转速转向圈数、控制LCD显示、接受外部按键输入;步进电机模块为42BYGHW型步进电机,为系统的执行模块;外部按键模块按键1可控制电机的启动和停止,按键2可控制电机的转动方向,按键3可控制电机的转速,按键4可控制转动圈数(每按1次加1圈);LCD显示当前转动方向、转速、圈数;上位机设置步进电机启动、停止、正传、反转、步进电机转速(快、中、慢),圈数,并保存电机的工作状态至文档,从文档读取电机的工作状态,可以对串口进行设置,由VS2010MFC编程而得。二、硬件设计控制芯片:80C52单片机学习板驱动芯片:UM2003显示屏:LCD1602电机:42BYGHW混合式步进电机选择控制芯片时还是选用80C52系列,板子当然用面积小的比较好;电机的驱动芯片选用ULN2003,ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统,市场价5.00-6.00左右;与80C52学习板配套的LCD显示屏一般都是LCD1602型号,市场价4.00-5.00左右;步进电机选用42BYGHW混合式步进电机,步进电机一般分为三种:反应式、永磁式、混合式,反应式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或1.5度;永磁式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大;混合式步进是指混合了永磁式和反应式的优点。它又分为两相、三相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度,混合式步进电机随着相数(通电绕组数)的增加,步进角减小,精度提高,这种步进电机的应用最为广泛。42BYGHW市场价30.00-40.00左右。ULN2003作为电极的驱动芯片,由七个硅NPN达林顿管组成。ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。除管脚8接地、管脚9接VCC之外,管脚1-7作为脉冲输入端,管脚10-16脉冲信号输出端。一般从80C52单片机输出出来的脉冲作为脉冲的输入端,脉冲信号输出端输出幅值12V及以上的脉冲来驱动电机转动。详细的硬件电路图如下:三、软件设计是否接收到数据电机状态相应改变用户是否按下按键更新界面否是否是电机状态相应改变更新界面传递给下位机上位机主要为用户提供控制界面,在用户按下相应按键之前一直等待,按下按键后按照按下按键的类型改变相应的电机状态,更新界面,并传递给下位机;如果下位机的传递了电机状态,便改变成相应的电机状态,更新界面。图3-1 上位机程序流程图开始根 据 电 机 状 态 显 示 并 驱 动 电 机是否接收到数据电机状态相应改变是否是否有外部按键按下电机状态相应改变否是而下位机需要根据电机状态来控制步进电机,并将相应的电机状态打印到LCD显示屏上;如果接受到上位机传递的数据便改变自己相应的电机状态,如果有外部按键按下,则改变自己相应的电机状态,并将该状态上传给上位机。图3-2 下位机程序流程图四、结果分析或项目所实现的功能、指标上位机运行界面如下:图4-1 上位机运行图像图中转向0代表反转,1代表正转,保存参数按钮能够将目前的电机参数存入.txt文件中,“读取参数”按钮能够将.txt中的参数读入。右下角的小框为接受到的下位机电机参数。第一位数字开闭字位0代表电机停止,1代表电机起转。第二位数字为速度字位0代表低数,1代表中数,2代表高速。第三位数字代表正反位,0为反转,1为正转。最后一位数字代表圈数。运行前必须先设置好串口,才能使用。下位机组装如下图: 图4-2 下位机组装图按键1可控制电机的启动和停止,按键2可控制电机的转动方向,按键3可控制电机的转速,按键4可控制转动圈数(每按1次加1圈),在电机停转的时候,LCD显示“OFF”,在电机启动的时候,LCD第一行第一个单词显示“ON”,下个字符正转显示Z反转时显示F,然后显示“LOOP:”后面跟圈数,第二行显示”SPEED:”,L代表低速,M代表中速,H代表高速。五、明细清单器件单价LY5A-L2A V4 STC89C52学习板1602液晶显示器42BYGHWULN2003 合计:六、设计调试中遇到的疑难问题及解决方法周欧翔:1、对于MFC中C+串口类不熟悉,所以只能在网上查有关的实例,并按照自己的要求不停地修改,然后在实验室不停地实验,并且在界面中专门用了一个编辑框不停地查看回传的数据。还有对于下位机串口设置方面有些不熟悉,我就一直在查找有关方面的书籍,以及相关的例子进行修改。2、对于串口的时序一开始的时候不是很懂,一开始的时候想着在上下位机通讯的时候就只是由上位机传输数字字符串,由字符在字符串中的位置来决定传递的是什么,但是时序老是出错,最后没有办法,只有将所有的字符换成单独的字母字符,这样就不会出错了。3、MFC在VS2010中的COMBO控件老是出错,不能够显示下拉栏,在网上找了好多的实力也没有解决,可能是我电脑配置的问题。所以最后我只是使用了普通的EDIT控件,在控件中输入数据来达到设置串口的目的。张璐:1、硬件原理图比较简单,只是需要上网查阅相关管脚的资料。焊接电路时基本没有什么问题,但是进行调试时电机不转。用万用表测VCC以及地端,并检查各管脚有没有虚焊。焊接没有问题,我们又用示波器测量ULN2003的输入信号和输出信号,输入信号即单片机的输出信号为5v脉冲没有问题,但输出信号一直为高电平。无奈应该是驱动芯片有问题。我们又换了一块板子;2、第二次接入电路电机依旧不转,检查过后发现是芯片插反了。调整过后电机终于转了起来。但是电机转动幅度不大。将控制程序中四路输出相邻的延时时间变长,电机终于正常转动了。后来对电机控制的各种参数进行微调,最终达到了实验效果。七、心得体会与建议周欧翔:单片机是自动化行业在实际生产生活中必不可少的伙伴,现在越来越多的产品都涉及到了单片机领域,所以这次的课程设计对我意义颇深,特别是这种给你一个题目,自主去做的模式,非常符合实际生产中生产形式。自主查找信息,学习单片机芯片资料,寻找相关的例程,这些都是非常宝贵的经验。这个题目如果再往深了做就是结合手机安卓系统与上位机的通讯,或者就是手机充当上位机,来远程控制步进电机。我觉得老师在芯片资料方面给的不是太详细,有些东西必须在网上找相似的器件才能够满足要求,加大了查找资料的难度,然后实验报告所占的分值过多,实验报告终究只是其次,最重要的还是将项目完成,所以我认为项目完成情况应该占分数的大头。张璐:单片机在各行各业的应用都很广泛,特别在自动化行业是重头。之前做大创项目有接触过这方面,所以上手并不难。对步进电机的控制之前没有做过,但通过查阅资料后也大致明白了其具体原理,就是基于单片机自身产生的晶振,由串口输出一定占空比的脉冲进而控制步进电机。硬件方面主要由我负责,虽然之前做过DSP小车底盘的焊接,但是此次实验硬件部分进行得也不是很顺利。主要是有些芯片是坏掉的,所以耽误了一些时间。上位机程序是由周欧翔同学编写,但我也对相关知识进行了学习,这种单独做小项目能够做出来成果后我们有很大的成就感,而且从中受益匪浅。课程设计时间安排较为灵活十分合理,我们也基本比较满意。可能大家对于验收等待老师比较有意见,我觉得老师本来就比较忙碌,我们等待验收是应该的,而且大部分同学第一次验收都存在问题,都没有太多的耐心。对于实验室的建议就是,可以对用过的芯片、器件进行复查,有些器件已经坏掉了,再给同学们继续使用会耽误项目的进程。最后感谢三位实验老师的细心教导!参考文献1林洋电子.LY5A-L2A V4原理图. L2常州市合泰电机电器有限公司.42BYGHW产品说明书3郭天祥. 新概念51单片机C语言教程 入门 提高【M】.北京.电子工业出版社附录下位机源程序:#include sbit lcden = P12; /LCD使能端 sbit lcdrs = P10; /LCD控制端 sbit on_off_key = P37; /按键1 sbit orientation_key = P36; /按键2 sbit speed_key = P35; /按键3 sbit loop_key = P34; /按键4 bit clockwise_flag = 1; /转向位 bit on_off_flag = 0; /开关位 bit com_flag = 0; /COM位 unsigned char char_num = 0; unsigned char on_off,clock=0; unsigned char num = 1; unsigned char loops = 1; /圈数 unsigned char table_begin = 0; unsigned char code table1 = 0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01;/电机运行表 unsigned char code char_table5 = Speed:;/LCD显示字符串数组 unsigned char code char_table4 = Loop:; /LCD显示字符串数组 unsigned char code char_table3 = ON Z ;/LCD显示字符串数组 unsigned char code char_table2 = ON F ;/LCD显示字符串数组 unsigned char code char_table1 = OFF ;/LCD显示字符串数组 unsigned char speed_c = 0; unsigned char loop_c = 0; unsigned char receive_char = 0; unsigned char letter_inx =0; unsigned char loop_count = 0;/用于判断已转的圈数 void delay(unsigned char i) /延时函数 unsigned char j,k;for(j=i;j0;j-)for(k=125;k0;k-); void write_status(unsigned char com) /LCD状态设置 lcdrs = 0; P0 = com; delay(5); lcden = 1; delay(5); lcden = 0; void write_data(unsigned char Data) /LCD显示一个字符 lcdrs = 1; P0 = Data; delay(5); lcden = 1; delay(5); lcden =0; void init_lcd() /LCD初始化 lcden=0; write_status(0x38); write_status(0x0c); write_status(0x06); write_status(0x01); write_status(0x80); void init_com() /串口初始化 TMOD = 0x20; TH1 = 0xfa; /波特率为4800 TL1 = 0xfa; TR1 = 1; REN = 1; SM0 = 0; SM1 = 1; EA = 1; ES = 1; void send_data() /向上位机发送数据 ES = 0;on_off = on_off_flag;clock = clockwise_flag;SBUF = 0+on_off;while(!TI);TI = 0;SBUF = ; while(!TI);TI = 0;SBUF = 0+num;while(!TI);TI = 0;SBUF = ; while(!TI);TI = 0; SBUF = 0+clock; while(!TI);TI = 0;SBUF = ; while(!TI);TI = 0; SBUF = 0+loops; while(!TI);TI = 0;ES = 1; void key() /检查按键状态的函数 if(on_off_key = 0) delay(5); if(on_off_key = 0) on_off_flag = on_off_flag; send_data();while(on_off_key=0); if(orientation_key = 0) delay(5); if(orientation_key=0) clockwise_flag = clockwise_flag; loop_count=0; send_data(); while(orientation_key=0) ; if(speed_key = 0) delay(5); if(speed_key = 0) if(num=2) num=0; else num+; send_data(); while(speed_key = 0) ; if(loop_key = 0) delay(5); if(loop_key = 0) loops+; send_data(); while(speed_key = 0) ; void display() /LCD显示函数 init_lcd(); if(on_off_flag=0) for(char_num=0;char_num4;char_num+) write_data(char_table1char_num); else if(clockwise_flag=1) for(char_num=0;char_num5;char_num+) write_data(char_table3char_num); for(char_num=0;char_num5;char_num+) write_data(char_table4char_num); write_data(0+loops); write_status(0x80+0x40); for(char_num=0;char_num6;char_num+) write_data(char_table5char_num); if(num=0) write_data(L); else if(num=1) write_data(M); else if(num=2) write_data(H); else for(char_num=0;char_num5;char_num+) write_data(char_table2char_num); for(char_num=0;char_num5;char_num+) write_data(char_table4char_num); write_data(0+loops); write_status(0x80+0x40); for(char_num=0;char_num6;char_num+) write_data(char_table5char_num); if(num=0) write_data(L); else if(num=1) write_data(M); else if(num=2) write_data(H); void dispose()/判断是否反向 if(clockwise_flag = 0) table_begin=0; else table_begin=4; void motor_run() /驱动电机 unsigned char i,j; if(on_off_flag = 0) /如果需要停止电机 display(); P1 = 0x00; return;else display(); if(loop_count=50*loops) on_off_flag = 0; loop_count=0; send_data(); return; loop_count+;for(j=0+table_begin;j4+table_begin;j+) P1 = table1j; for(i=(num+1)*2;i=0&receive_charLoadIcon(IDR_MAINFRAME);void CmotorDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_SLIDER1, Speed_Slider);DDX_Control(pDX, IDC_MSCOMM1, m_mscomm);DDX_Text(pDX, IDC_EDIT2, m_clockwise_edit);DDX_Text(pDX, IDC_EDIT1, m_loop_edit);DDX_Text(pDX, IDC_BODEEDIT, m_bode_str);DDX_Text(pDX, IDC_ODDEDIT, m_odd_str);DDX_Text(pDX, IDC_DATAEDIT, m_data_str);DDX_Text(pDX, IDC_EDIT8, m_serial_num);DDX_Text(pDX, IDC_EDIT3, m_onoff);DDX_Text(pDX, IDC_EDIT4, m_strReceive);DDX_Control(pDX, IDC_EDIT8, m_serial_edit);DDX_Control(pDX, IDC_BODEEDIT, m_bode_edit);BEGIN_MESSAGE_MAP(CmotorDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CmotorDlg:OnNMCustomdrawSlider1)ON_BN_CLICKED(IDC_START, &CmotorDlg:OnBnClickedStart)ON_BN_CLICKED(IDC_LOAD, &CmotorDlg:OnBnClickedLoad)ON_BN_CLICKED(IDC_SAVE, &CmotorDlg:OnBnClickedSave)ON_BN_CLICKED(IDC_STOP, &CmotorDlg:OnBnClickedStop)ON_BN_CLICKED(IDC_Orientation, &CmotorDlg:OnBnClickedOrientation)ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CmotorDlg:OnDeltaposSpin1)ON_BN_CLICKED(IDC_APPLYBUTTON, &CmotorDlg:OnBnClickedApplybutton)ON_EN_CHANGE(IDC_EDIT8, &CmotorDlg:OnEnChangeEdit8)ON_EN_CHANGE(IDC_BODEEDIT, &CmotorDlg:OnEnChangeBodeedit)END_MESSAGE_MAP()/ CmotorDlg 消息处理程序BOOL CmotorDlg:OnInitDialog()CDialogEx:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码 m_bode_str = _T(9600);m_odd_str = _T(无);m_data_str = _T(8);m_serial_num = _T(11);m_bode = 4800;m_odd = n;m_data = 8;m_serial = 1;Speed_Slider.SetRange(0,2);Speed_Slider.SetTicFreq(1);Speed_Slider.SetPos(0);m_mscomm.put_CommPort(11);m_mscomm.put_Settings(_T(9600, n, 8, 1);m_mscomm.put_InputMode(1); m_mscomm.put_InputLen(0);m_mscomm.put_InBufferSize(1024);m_mscomm.put_OutBufferSize(1024);m_mscomm.put_RThreshold(1);m_mscomm.put_SThreshold(0);/m_mscomm.put_PortOpen(true);/打开串口CString str1(1);m_clockwise_edit = str1;CString str2; str2.Format(_T(%d),m_loop);m_loop_edit = str2;updateStatus();UpdateData(false);return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CmotorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CmotorDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CmotorDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CmotorDlg:OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);/ TODO: 在此添加控件通知处理程序代码int pos = Speed_Slider.GetPos();m_speed = pos;updateStatus();ComSendData();*pResult = 0;void CmotorDlg:OnBnClickedStart()/ TODO: 在此添加控件通知处理程序代码m_motor_on = 1;updateStatus();ComSendData();void CmotorDlg:OnBnClickedLoad()/ TODO: 在此添加控件通知处理程序代码CStdioFile m_file;CString m_path_str;CString str;TCHAR szFilter = _T( 文本文件 (*.txt)|*.txt| 所有文件(*.*)|*.*| );CFileDialog file(TRUE,_T(txt),NULL,OFN_HIDEREADONLY/*|OFN_OVERWRITEPROMPT*/|OFN_ALLOWMULTISELECT,szFilter,this);if(IDOK=file.DoModal()m_path_str = file.GetPathName();m_file.Open(m_path_str,CFile:modeRead);CString o_str,s_str,c_str,l_str;m_file.ReadString(o_str);m_file.ReadString(s_str);m_file.ReadString(c_str);m_file.ReadString(l_str);m_motor_on = _ttoi(o_str);m_speed = _ttoi(s_str);m_clockwise = _ttoi(c_str);m_loop = _ttoi(l_str);updateStatus();m_file.Close();ComSendData();void CmotorDlg:OnBnClickedSave()/ TODO: 在此添加控件通知处理程序代码TCHAR szFilter = _T( 文本文件 (*.txt)|*.txt| 所有文件(*.*)|*.*| );CFileDialog file(FALSE,_T( ),_T(my),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT/*|OFN_ALLOWMULTISELECT*/,szFilter,this);CStdioFile sfile;CString m_path;CString str;int size=0;if(IDOK=file.DoModal()m_path = file.GetPathName();sfile.Open(m_path,CFile:modeCreate|CFile:modeWrite); CStrin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国AV连接线数据监测研究报告
- 2024年中国瓦楞辊市场调查研究报告
- 2024年中国核桃夹心巧克力市场调查研究报告
- 2024年中国悬挂传动超声清洗机市场调查研究报告
- 2024年中国乘员侧安全气袋市场调查研究报告
- 2024八年级数学上册第五章平行四边形4多边形的内角与外角和第2课时多边形的外角和习题课件鲁教版五四制
- 2024年云南驾驶员客运从业资格证考试题及答案
- 2024年湛江客运从业资格证
- 2024年乌鲁木齐道路运输客运从业资格证考试模拟试题
- 城市轻轨工程施工组织设计
- 合同法中的合同适用范围详解
- 人教版七年级数学上册期中测试卷-附带有答案
- DB3714-T 0004-2021 肉种鸭强制换羽技术规程
- 《智能建造导论》 课件全套 刘占省 第1-12章 智能建造的兴起-中国智能建造之路
- 树立信心主题班会课件1
- 临床医学中的病患随访与健康教育
- 量子天线技术初探
- 山东省济南市2023-2024学年三年级上学期期中数学试卷
- 2023~2024学年度上期高中2022级期中联考数学参考答案及评分标准
- 全国优质课一等奖高中物理必修一《曲线运动》课件
- 初一年级班级日志记载表(详)
评论
0/150
提交评论