北航机电控制工程基础

上传人:壹****1 文档编号:503993741 上传时间:2023-09-14 格式:DOCX 页数:11 大小:219.78KB
返回 下载 相关 举报
北航机电控制工程基础_第1页
第1页 / 共11页
北航机电控制工程基础_第2页
第2页 / 共11页
北航机电控制工程基础_第3页
第3页 / 共11页
北航机电控制工程基础_第4页
第4页 / 共11页
北航机电控制工程基础_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《北航机电控制工程基础》由会员分享,可在线阅读,更多相关《北航机电控制工程基础(11页珍藏版)》请在金锄头文库上搜索。

1、机电控制工程技术作业三: 单片机实验报告 姓名:班级:130717目录一、实验目的 1二、实验任务 1三、实验设备 1四、实验思路及过程 14.1实验箱中基本的器件及其控制方式:14.2程序流程图34.3代码编写3五、程序调试 4六、感想 4七、附录 5一、 实验目的1. 学习使用单片机编程软件ICCV7 for AVR以及烧写软件progisp2. 了解并使用ATmega8单片机及其外围电路二、实验任务通过电位计控制电机转速,按键控制转向与工作方式,并在数码管上稳定的 显示当前工作频率,用 LED 灯显示电机工作方式,当电机频率过低时电机自动 关闭。三、实验设备1. 机电控制工程实验教学平台

2、实验箱2. PC 一台四、实验思路及过程4.1 实验箱中基本的器件及其控制方式实验箱中单片机开发板如下图:舵机按 口电机控制 的跳域电机接口 ”ATmega12V步进电 机电卷器闽图表 1 单片机开发板硬件图解4.1.1 硬件介绍该实验中用到了,ATmega8的最小系统(晶振(11.059MHZ),滤波电 路,复位电路,ISP下载,电源),以及外围器件(4位数码管及其驱动芯片 ZLG7289,4个LED灯,2个中断按钮,1个旋转电位计,以及24BYJ48A 型步进电机和L298芯片)4.1.2 外围器件的工作原理简介 4 位数码管由 ZLG7289 芯片驱动,采用的驱动方式为动态显示,ATme

3、ga8通过PD57管脚与ZLG7289之间进行数据传送。 4个LED灯与PCO3管脚相连,当管脚输出低电平时,LED点亮。 2 个中断开关与 PD2、PD3 相连,其中断方式可以为电平触发和沿 触发 旋转电位计输出电压为05V,与ADC7相连,通过ATmega8中ADC 模块可以得到10位精度的电压数字量值。 24BYJ48A 型步进电机为 4 相直流步进电机,其工作电压为 12V, 由L298芯片控制,L298芯片与ATmega8通过PA14相连。该步进 电机的通电方式为由自己控制。4.2 程序流程图图表2程序流程图4.3 代码编写利用 ICCV7 for AVR 软件编写单片机程序新建一个

4、project,在project中新建一个c程序。利用 Application Builder 按钮辅助建立 C 程序。CPU设置:选择M8,晶振选11.059MHZ,选择INTO和INT1,选择下降沿中断; 端口设置:port B 14 , port CO3 , portD57改为输出(O),值默认为 零 时间计数器:选择TimeO,计数溢出中断 ADC模块设置:启用ADC模块,ADC模块使能,选用开始转换和连续 转换以及ADC转换结束中断使能,10位精度,右对齐 最后在设置中添加主函数即 Include”main”() 将其他控制代码添入程序,完整程序见附录 程序控制的基本思路为,由 AD

5、7 采集电位计电量并进行模数转换后得到一个temp值,该temp值由对应的函数公式转换为定时计数器初值TCNT0,即改 变定时长短,然后在定时计数溢出中断程序中,执行电机换相指令,即可以完成 由电位器控制电机转速任务;电机正反转控制由外部中断 INT1 改变标志变量, 进而电机换相方向即可;电机工作方式由外部中断INTO控制,由LED显示工 作方式,相应函数跟在电机转动函数之后。电机的运动与否,由temp值来确定。 数码管显示由头文件中对应程序完成。五、程序调试本实验调试过程中出现很多问题,主要问题第一是 if 函数中判断条件经常 用成=,而非=,之后就是电机转速跟不上频率变化,两者关系应为线

6、性关系, 而根据分配原理,两者为双曲线关系,为了进行简化,对首末两端取值后进行了 映射关系转化。调试工作很多小错误,但也相应一一克服。六、感想本次是第一次动手使用单片机,发现并没有那么难,其中相应功能能够基本 实现,也相应的进行调试,但由于时间与精力所限,并没有进行高质量的设计, 只是实现基本功能稍微进行改进,这次也正好是理论知识的实际应用,强化了课 上的学习内容,提高了我们的学习兴趣。七、附录/ICC-AVR application builder : 2016/5/28 10:04:25 / Target : M8/ Crystal: 11.059Mhz/ICC-AVR applicati

7、on builder : 2016/5/5 19:32:56 / Target : M8/ Crystal: 11.059Mhz#include#include#include#includeg7289.h#defineA()PORTB =0B00000010;#defineB()PORTB =0B00001000;#defineC()PORTB =0B00000100;#defineD()PORTB =0B00010000;#defineAB()PORTB =0B00001010;#defineBC()PORTB =0B00001100;#defineCD()PORTB =0B0001010

8、0;#defineDA()PORTB =0B00010010;int step = 0;int dir_flag = 0;int temp = 1023;int pre_temp = 1023;int change_adc_flag = 0;int on_off = 0;int judge = 1;int f=50;void port_init(void)PORTB = 0x00;DDRB = 0x1E;PORTC = 0x00; /m103 output onlyDDRC = 0x0F;PORTD = 0x00;DDRD = 0xE0;/TIMER0 initialize - prescal

9、e:1024/ desired value: 233Hz/ actual value: 234.778Hz (0.8%) void timer0_init(void)TCCR0 = 0x00; /stopTCNT0 = 0xD2; /t countTCCR0 = 0x05; /start timer #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF void timer0_ovf_isr(void)TCNT0 = (int)(double)(40+0.1896*temp); if(temp10) on_off=1;if(on_off =

10、1) if(judge=1) if(dir_flag = 1) if(step = 0) A() elseif(step=1)AB()elseif(step=2)B()elseif(step=3)BC()elseif(step=4)C()elseif(step=5)CD()elseif(step=6)D()elseif(step=7)DA()else if(dir_flag = 0) if(step = 0) DA() elseif(step=1)D()elseif(step=2)CD()elseif(step=3)C()elseif(step=4)BC()elseif(step=5)B()e

11、lseif(step=6)AB()elseif(step=7)A()step+;PORTC = 0x0E;if( step = 8) step = 0;else if(judge=2)if(dir_flag = 1) if(step = 0) A() elseif(step=1)B()elseif(step=2)C()elseif(step=3)D()else if(step = 4) A()elseif(step =5)B()elseif(step =6)C()elseif(step =7)D()else if(dir_flag = 0) if(step = 0) D() else if(s

12、tep = 1) C()else if(step = 2) B()else if(step = 3) A() else if(step = 4) D()elseif(step =5)C()elseif(step =6)B()elseif(step =7)A() step+;PORTC = 0x0D;if( step = 8) step = 0; else if(judge=3)if(dir_flag = 1) if(step = 0) AB() elseif(step=1)BC()elseif(step=2)CD()elseif(step=3)DA()else if(step = 4) AB(

13、)elseif(step =5)BC()elseif(step =6)CD()elseif(step =7)DA()else if(dir_flag = 0) if(step = 0) DA() elseif(step=1)CD()elseif(step=2)BC()elseif(step=3)AB()else if(step = 4) DA()elseif(step =5)CD()elseif(step =6)BC()elseif(step =7)AB()step+;PORTC = 0x0B;if( step = 8) step = 0;/reload counter value/ADC initialize/ Conversion time: 150uSvoid adc_init(void)ADCSR = 0x00; /disable adcADMUX = 0x07; /lect adc input 0ACSR = 0x80;ADCSR = 0xEF;#pragma interrupt_handler adc_isr:iv_ADCvoid adc_isr(void)(important)/conversion complete, read value (int)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号