2022年微机接口实习报告 .pdf
1 1 微机接口实验报告姓名:李 晋 林班级:191102-13 学号:20101002007 指导老师 :墙威实习时间 :2012-12-30 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 7 页2 2 题目:模拟汽车控制系统一、设计目标设计一个模拟汽车控制系统, 使用接口芯片 : 实现用简单逻辑电平控制车的档位(前进 1,前进 2 ,前进 3,后退) ,用步进电机的转速模拟车的速度(若步进电机不能用, 也可以用流水灯的刷新方向和速度,或数码管显示的数值来模拟车的速度),用 A/D 转换器模拟车的油门大小。二、设计所用仪器和器件步进电机, A/D 转换器,逻辑开关,导线。三、设计内容1.设计步进电机的顺时针和逆时针旋转: 2.使用 A/D 转换器转换模拟信号为数字信号. 3.设计电平开关控制输入 ,并将输入结果显示出来 . 四、设计过程1设计方案 : a.电平开关控制档位根据用户拨动的逻辑电平,用I/O 端口读出数值,来判断并决定小车的动作,后退档用步进电机逆时针旋转来模拟,前进挡用步进电机的顺时针旋转模拟,档位的控制用限制Sleep 的时间乘以一定速率来实现。即用简单逻辑电平控制车的档位(前进1,前进 2 ,前进 3,后退) 。unsigned short a= 0 x0c860;/读写数据均用此端口号int i; while(1) i = _inp(a);/读端口数据_outp(a, i);/ 显示数据if(i=128) back(); /汽车倒档else if(i=64) move(4); / 一档,参数表示休眠的时间所乘以的倍率else if(i=32) move(2); / 二档else if(i=16) move(1); / 三档else stop(); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 7 页3 3 b.步进电机的转速模拟车的速度具体根据限制 CUP的 Sleep即休眠时间,达到控制速度的效果。 Sleep的时间越短,速度越快,Sleep的时间越长,速度越慢。步进电机顺时针旋转相序表的加电代码顺序:05H 15H 14H 54H 50H 51H 41H 45H 步进电机顺时针旋转相序表的加电代码顺序:45H 41H 51H 50H 54H 14H 15H 05H 即刚好与顺时针的顺序相反。c.A/D 转换器转换的数值模拟车的油门大小数值越高, Sleep的时间越短,速度越快。unsigned short b=0 x0c880;/AD转换端口号int t; _outp(b,1); t=_inp(b); Sleep(t); 逻辑框图开始拨动电平开关显示数值后退一档二档三档停止结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 7 页4 4 程序流程图i=128 i=64 i=32 i=16 i=其他2所设计系统的硬件连接图用四根导线分别将步进电机的四个接口线分别连上A0,A2,A4,A6。五、分析与讨论实验结果 : 拨动电平开关左边起第一个,步进电机逆时针旋转 ;拨动第二 ,第三,第四个开关,步进电机顺时针旋转 ,并且速度依次递增 .同时,旋转 A/D转换的旋钮 ,步进电机的速度增大或者减小. 结果分析 : 实验结果与预期效果相符合,达到步进电机模拟小车系统的档位,油门的效果. 问题及解决方案 : 实验过程中发现没有达到效果,可能的原因如下 : 1. 实验台和电脑没有连上线Main ()a= 0 x0c860;i = _inp(a); 后退一档二档三档三档停车结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 7 页5 5 2. 实验台子时坏的 ,由于实验室设备已经使用时间过长,加之步进电机本身不允许长时间通电 ,有时可能由于操作时间过长或者操作不当,步进电机已经烧坏了 . 3. 步进电机的四根导线没有连接好. 4. 由于电平开关只用到前面四个,所以其他开关需要调到闭合状态,否则会影响实验结果 . 六实验心得:这次的实验被安排在2012 年的最后几天, 总体来说完成得很顺利, 没有想象中那样可怕,因为前面的几次的上机课已经做过每个模块,这次的小车系统无非是将前几次的实验综合一下,形成一个完善的系统。以致于做实验去的时候倒腾了一上午就完成并验收了。微机接口是软件硬件相结合的一门课程,实验设备也只有机房才有,所以实践起来的机会不是很多,但是真的很有意思,也容易激起学习的兴趣,这次实验更加深了我对本学期所学课本上的基本知识的认识和理解,同时也明白,理论和实践不是可以等同的。只有掌握了基本知识,实践起来才有思路,而实践就没有基本知识那么复杂,但是只有真正实践才体会到知识的运用。在实验过程中也遇到一定的问题,我们几个同学就一起讨论,研究,相互合作,锻炼了我们各方面的能力。通过这次实验,更加理解了微机接口这门课程,同时更加深了学习它的兴趣,特别以硬件的角度去理解各种电子设备的工作原理,我相信对于以后的学习和工作将有很大帮助。七程序源代码:#include conio.h #include stdio.h #include windows.h void back(); / 步进电机逆转,模拟小车倒退void move(int j);/ 步进电机正转,模拟小车前进void stop(); / 空函数,小车停止void main() unsigned short a= 0 x0c860;/读写数据均用此端口号int i; while(1) i = _inp(a);/读端口数据_outp(a, i);/ 显示数据if(i=128) back(); /汽车倒档精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 7 页6 6 else if(i=64) move(4); / 一档else if(i=32) move(2); / 二档else if(i=16) move(1); / 三档else stop(); void back() /步进电机逆转,模拟小车倒退 unsigned short a=0 x0c800;/步进电机 PA口地址unsigned short b=0 x0c880;/AD转换端口号int t;/ 存储 A/D 转换来的数字信号_outp(a,0 x05); _outp(b,1); t=_inp(b); Sleep(t); _outp(a,0 x15); t=_outp(b,1); Sleep(t); _outp(a,0 x14); t=_outp(b,1); Sleep(t); _outp(a,0 x54); t=_outp(b,1); Sleep(t); _outp(a,0 x50); t=_outp(b,1); Sleep(t); _outp(a,0 x51); t=_outp(b,1); Sleep(t); _outp(a,0 x41); t=_outp(b,1); Sleep(t); _outp(a,0 x45); t=_outp(b,1); Sleep(t); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 7 页7 7 void move(int j) unsigned short a=0 x0c800;/步进电机端口unsigned short b=0 x0c880;/AD转换端口号int t; / 存储 A/D 转换来的数字信号_outp(a,0 x45); _outp(b,1); t=_inp(b); Sleep(t*j); _outp(a,0 x41); t=_outp(b,1); Sleep(t*j); _outp(a,0 x51); t=_outp(b,1); Sleep(t*j); _outp(a,0 x50); t=_outp(b,1); Sleep(t*j); _outp(a,0 x54); t=_outp(b,1); Sleep(t*j); _outp(a,0 x14); t=_outp(b,1); Sleep(t*j); _outp(a,0 x15); t=_outp(b,1); Sleep(t*j); _outp(a,0 x05); t=_outp(b,1); Sleep(t*j); void stop() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 7 页