




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书 名称 院 系 班 级 姓 名 系主任 教研室主任 指导教师 课程设计任务书 课程名称: 起讫时间: 院 系: 班级: 指导教师: 系 主 任: 目 录一、需求分析. .3微控制器应用Motor Speed Control程序设计. 3二、设计过程. 4三、运行结果. 71.实验板的布局图. 72.实训步骤.83.运行结果展示.9四、程序代码.101Demonstrator.c程序102PC_Comm.c程序.13五、心得体会. 18六、参考文献. 19一需求分析本程序由5人共同设计,用以实现以下程序:微控制器应用Motor Speed Control程序设计打开Programmers Notepad 用C语言完成程序的编写,再打开AVR studio,把程序载入到Butterfly实验板进行调试,最终实现由微控制器控制的风扇的转动。过程中,要求有实际的程序,并保证程序的正确性与可操作性,运行可执行程序,得到运行结果,风扇转动,对结果进行分析,结果是否合理,不合理要对实验程序进行重新调试,通过PC机对程序进行故障排查。二设计过程实验器件:一个9V的电动机,一个9V的电池,一个9V的电池连接器,一个4N28光隔离器,一个TIP115功率晶体管,一个150Ohm 电阻,还有一个2.2k的电阻。我已经包括了简单原理的光导体,它帮助减少我们在修改这一电路的状态,以致我们将破坏这个微控制器。我实际上设法将光导体和大功率的晶体管燃烧,当以开玩笑的言行做这个设计。至少对我来说,这不是太夸张了。因为这不是一个电子文本,我们不需要学习关于电流是怎么工作的。对应插图,我们就不会有任何的问题。画出原理图打开Programmers Notepad软件设计出实验程序打开AVR studio把程序载入到Butterfly实验板进行调试。具体过程:1 马达可以用泡沫芯板切割下来组成和黏贴来作为底部,左边直立部分用于下一个工程来做光导体。2 风扇部分类似于车轮的模式在课本的附录6,剪下来贴在一张比较坚实的薄硬纸板上,用电胶带贴在轴上,使得轮子中心部分沿着径向是可滑动的,工作的。如图的抠图图象用于下一个工程。我们用一个光隔离器来隔离电机功率电路从而帮助减少在蝴蝶效应中产生爆炸的可能性。光绝缘体是一个类似于光隔离器的装置,它有一个空中通道在IR 灯发光二极管和IR检测晶体管之间,如图。这个不透明的对象通过二极管和检测器导致晶体管熄灭因此电流“中断”。我们可以把晶体管联结到蝴蝶效应的引脚和检测器的中断上。你有没有注意到在图中的轮子的开关? 如果拼凑好电机基础部分,使车轮通过在光导体槽旋转时,每次正常运行。当槽通过时,晶体管开启和关闭。写好软件程序,以便于附着在光导体引脚电压变化引起的蝴蝶中断的效应,如果指望正好一秒,有多少次每秒旋转的车轮,这是在HZ.COOL转速!接一根长的电线到光隔离器上,然后添加电工胶带以防止短路。接下来小心的用胶水贴到在一个电机位置上,通过它旋转风轮。确保风轮平衡,稳定,要完全封锁和解除封在风轮光隔离器插槽转动时。.光导体的引脚1对应3V光导体的引脚2 对应一个200ohm 的电阻200ohm 的电阻对应电池的接地。光导体的引脚3对应PORTB 引脚4。光导体引脚4对应电池的接地。我意识我已经学会了机械工程技术运用于这个工程在初始阶段。尽管初学者作做的比我更有吸引力,但是目的达到了,它工作了。三运行结果实训步骤(1) 启动运行programmers软件做相应设计,如图:(2) 打开控制程序pc_comm.c和makefile文件,按相应步骤进行编译.(3) 编译无误后,打开AVR studio 4软件,如图:(4) 在上图中打开pc_comm.cof文件,装入给定程序模板,运行演示;(5) 运行成功编译程序效果图:四程序代码第一个程序Demonstrator.c/ Demonstrator.c Motor Speed Control version#include PC_Comm.h#include Demonstrator.hunsigned char milliseconds = 0;unsigned int second = 0; / count to 1000 and trigger one second eventunsigned int speed = 0; / IR detector count per secondunsigned int lastspeed = 0; / IR detector count per secondvoid initializer()/ Calibrate the oscillator: OSCCAL_calibration(); / Initialize the USARTUSARTinit();/ Set for pin change on PINB0DDRB = (1 PINB0); / set pin 0 to outputPORTB = (1 PINB0); / set pin 0 to enable pullupPCMSK0 = (1 PINB0); / EIFR = (1 7); / flag for PCINT15-8EIMSK = (1 7); / mask for PCINT15-8DDRB = 0X00; / set PORTB for input PORTB = 0xFF; / enable pullup on for input/ set PORTD for outputDDRD = (1 PIND0); / set pin 0 to outputPORTD = (1 PIND0); / set pin 0 to enable pullupmilliSecInit(127); / 50% duty cycle 1kHz signal/ say hellosendString(rPC_Comm.c ready to communicate.r); / identify yourself specificallysendString(You are talking to the Motor Speed Control demo.r);sendString(setxxx to set speedr);void parseInput(char s)/ parse first characterswitch (s0)case s:if( (s1 = e) & (s2 = t)parse_set(s);break;case d:if( (s1 = e) & (s2 = m) & (s3 = o) & (s4 = ?) )sendString(You are talking to the Motor Speed Control demo.r);break;default:sendString(rYou sent: );sendChar(s0);sendString( - I dont understand.r);break;s0 = 0;int parse_set(char s)char set11;unsigned char i = 3, j = 0;while( (si != 0) & (j = 0) & (si 4)/ must be 256sendString(Error - Parse_set number too large);return 0;elseset_speed(atoi(set);return 1;void set_speed(int count)char speed11;sendString(Setting the Compare Timer Count to: );itoa(count,speed,10);sendString(speed);sendChar(r);milliSecInit(count);/*The USART init set the system oscillator to 2 mHz. We set the Timer0 prescalerto clk/8 which gives a 250 kHz input to the timer/counter. A compare of 250 throwsan interrupt every millisecond.*/void milliSecInit(unsigned char count) / Enable timer0 compare interruptTIMSK0 = (1OCIE0A);/ Sets the compare valuesetOCR0A(count);/ Set PWM Phase Correct mode, CLK/8 prescalerTCCR0A = (0FOC0A)|(0WGM01)|(1WGM00)|(1 64)count = 0;string0 = 0;sendString(Error - received 64 characters); return 0;char isCharAvailable()/ Does the RX0 bit of the USART Status and Control Register/ indicate a char has been received?if ( (UCSR0A & (0x80) ) return 1;else return 0;char receiveChar()/ Return the char in the UDR0 registerreturn UDR0;void sendChar(char data) int i = 0; / To send data with the USART put the data in the USART data register UDR0 = data; / Check to see if the global interrupts are enabled if(SREG & 0x80) / Wait until the byte is sent or we count outwhile ( !(UCSR0A&0x40) & (i10000) )i+; else / Wait until the byte is sent while( !(UCSR0A&0x40) ); / Clear the TXCflag UCSR0A=UCSR0A|0x40; void sendString(char s)int i = 0;while(i 64) / dont get stuck if it is a bad stringif( si = 0 ) break; / quit on string terminatorsendChar(si+);void USARTinit() / Increase the oscillator to 2 Mhz for the 19200 baudrate: CLKPR = (1CLKPCE); / set Clock Prescaler Change Enable / set prescaler = 4, Inter RC 8Mhz / 4 = 2Mhz CLKPR = (18); UBRR0L = 12;/(unsigned char)baudrate; / Enable 2x speed change UCSR0A = (1U2X0); / Enable receiver and transmitter UCSR0B = (1RXEN0)|(1TXEN0)|(0RXCIE0)|(0UDRIE0); / Set the USART to asynchronous at 8 bits no parity and 1 stop bit UCSR0C = (0UMSEL0)|(0UPM00)|(0USBS0)|(3UCSZ00)|(0UCPOL0); / Enable interrupts sei(); / Setup the interrupt mask and flagsPCMSK1 = (1PINB6) | (1PINB4); / set pin-change interrupt mask EIFR = (1PCIF1); / clear external intterupt flag 1EIMSK = (1PCIE1); / enable external interrupt 1 /Calibrate the internal OSCCAL byte, using the external /32,768 kHz crystal as referencevoid OSCCAL_calibration(void) unsigned char calibrate = 0;/FALSE; int temp; unsigned char tempL; CLKPR = (1CLKPCE); / set Clock Prescaler Change Enable / set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz CLKPR = (1CLKPS1) | (1CLKPS0); TIMSK2 = 0; /disable OCIE2A and TOIE2 ASSR = (1AS2); /select asynchronous operation of timer2 (32,768kHz) OCR2A = 200; / set timer2 compare value TIMSK0 = 0; / delete any interrupt sources TCCR1B = (1CS10); / start timer1 with no prescaling TCCR2A = (1CS20); / start timer2 with no prescaling while(ASSR & 0x01) | (ASSR & 0x04); /wait for TCN2UB and TCR2UB to be cleared / wait for external crystal to stabilisefor(int i = 0; i 10; i+)_delay_loop_2(30000); while(!calibrate) cli(); / mt _disable_interrupt(); / disable global interrupt TIFR1 = 0xFF; / delete TIFR1 flags TIFR2 = 0xFF; / delete TIFR2 flags TCNT1H = 0; / clear timer1 counter TCNT1L = 0; TCNT2 = 0; / clear timer2 counter while ( !(TIFR2 & (1OCF2A) ); / wait for timer2 compareflag TCCR1B = 0; / stop timer1 sei(); / _enable_interrupt(); / enable global interrupt if ( (TIFR1 & (1TOV1) ) temp = 0xFFFF; / if timer1 overflows, set the temp to 0xFFFF else / read out the timer1 counter value tempL = TCNT1L; temp = TCNT1H; temp = (temp 6250) OSCCAL-; / the internRC oscillator runs to fast, decrease the OSCCAL else if (temp 6120) OSCCAL+; / the internRC oscillator runs to slow, increase the OSCCAL else calibrate = 1;/TRUE; / the interRC is correct TCCR1B = (1CS10); / start timer1 五心得体会作为一名应用电子技术专业的大二学生,我觉得做微控制器的设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年六安市裕安区石婆店镇公开招考村级后备干部8名笔试模拟试题及答案解析
- 基于人工智能的智能仓储与物流配送优化方案
- 2025西安大兴医院卫星医院三桥社区卫生服务中心招聘(2人)笔试模拟试题及答案解析
- 2025贵州贵阳市第十九中学临聘教师招聘考试参考题库附答案解析
- 毕业论文查重修改
- 江西省水务集团有限公司2025年第二批社会招聘【25人】考试备考题库及答案解析
- 2025老师劳动合同范本
- 2025年采购合同变更官方范本
- 2025浙江省旅游投资集团人才招聘17人(第四批)考试模拟试题及答案解析
- 关于XX纪念白求恩教案教学设计
- 医务人员职业暴露与防护讲课
- 全过程造价咨询服务的质量承诺及保证措施
- 体适能评定理论与方法课件
- GB/T 44625-2024动态响应同步调相机技术要求
- 三级物联网安装调试员技能鉴定考试题及答案
- DB1507∕T 107-2024 奶牛乳房炎防治技术规范
- 景区旅游基础设施配套项目清单
- 《胃癌腹膜转移诊治中国专家共识(2023版)》解读
- YBT 189-2014 连铸保护渣水分含量(110℃)测定试验方法
- 星巴克劳动合同范本
- 07J912-1变配电所建筑构造
评论
0/150
提交评论