ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:1.25MB ,
资源ID:6097322      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6097322.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(精品C程序控制风扇转动.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

精品C程序控制风扇转动.docx

1、精品C程序控制风扇转动C程序控制风扇转动课程设计说明书 名称 院 系 班 级 姓 名 系主任 教研室主任 指导教师 课程设计任务书 课程名称: 起讫时间: 院 系: 班级: 指导教师: 系 主 任: 一、需求分析. .3微控制器应用Motor Speed Control程序设计. 3二、设计过程. 4三、运行结果. 71.实验板的布局图. 72.实训步骤.83.运行结果展示.9四、程序代码.101Demonstrator.c程序102PC_Comm.c程序.13五、心得体会. 18六、参考文献. 19一需求分析本程序由5人共同设计,用以实现以下程序:微控制器应用Motor Speed Cont

2、rol程序设计打开Programmers Notepad 用C语言完成程序的编写,再打开AVR studio,把程序载入到Butterfly实验板进行调试,最终实现由微控制器控制的风扇的转动。过程中,要求有实际的程序,并保证程序的正确性与可操作性,运行可执行程序,得到运行结果,风扇转动,对结果进行分析,结果是否合理,不合理要对实验程序进行重新调试,通过PC机对程序进行故障排查。二设计过程实验器件:一个9V的电动机,一个9V的电池,一个9V的电池连接器,一个4N28光隔离器,一个TIP115功率晶体管,一个150Ohm 电阻,还有一个2.2k的电阻。我已经包括了简单原理的光导体,它帮助减少我们在

3、修改这一电路的状态,以致我们将破坏这个微控制器。我实际上设法将光导体和大功率的晶体管燃烧,当以开玩笑的言行做这个设计。至少对我来说,这不是太夸张了。因为这不是一个电子文本,我们不需要学习关于电流是怎么工作的。对应插图,我们就不会有任何的问题。画出原理图打开Programmers Notepad软件设计出实验程序打开AVR studio把程序载入到Butterfly实验板进行调试。具体过程:1马达可以用泡沫芯板切割下来组成和黏贴来作为底部,左边直立部分用于下一个工程来做光导体。2风扇部分类似于车轮的模式在课本的附录6,剪下来贴在一张比较坚实的薄硬纸板上,用电胶带贴在轴上,使得轮子中心部分沿着径向

4、是可滑动的,工作的。如图的抠图图象用于下一个工程。我们用一个光隔离器来隔离电机功率电路从而帮助减少在蝴蝶效应中产生爆炸的可能性。光绝缘体是一个类似于光隔离器的装置,它有一个空中通道在IR 灯发光二极管和IR检测晶体管之间,如图。这个不透明的对象通过二极管和检测器导致晶体管熄灭因此电流“中断”。我们可以把晶体管联结到蝴蝶效应的引脚和检测器的中断上。你有没有注意到在图中的轮子的开关? 如果拼凑好电机基础部分,使车轮通过在光导体槽旋转时,每次正常运行。当槽通过时,晶体管开启和关闭。写好软件程序,以便于附着在光导体引脚电压变化引起的蝴蝶中断的效应,如果指望正好一秒,有多少次每秒旋转的车轮,这是在HZ.

5、COOL转速!接一根长的电线到光隔离器上,然后添加电工胶带以防止短路。接下来小心的用胶水贴到在一个电机位置上,通过它旋转风轮。确保风轮平衡,稳定,要完全封锁和解除封在风轮光隔离器插槽转动时。.光导体的引脚1对应3V光导体的引脚2 对应一个200ohm 的电阻200ohm 的电阻对应电池的接地。光导体的引脚3对应PORTB 引脚4。光导体引脚4对应电池的接地。我意识我已经学会了机械工程技术运用于这个工程在初始阶段。尽管初学者作做的比我更有吸引力,但是目的达到了,它工作了。三运行结果实训步骤(1) 启动运行programmers软件做相应设计,如图:(2) 打开控制程序pc_comm.c和make

6、file文件,按相应步骤进行编译.(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 se

7、cond 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 USART USARTinit(); / Set for pin change on PINB0 DDRB = (1 PINB0); / set pin 0 to output POR

8、TB = (1 PINB0); / set pin 0 to enable pullup PCMSK0 = (1 PINB0); / EIFR = (1 7); / flag for PCINT15-8 EIMSK = (1 7); / mask for PCINT15-8 DDRB = 0X00; / set PORTB for input PORTB = 0xFF; / enable pullup on for input / set PORTD for output DDRD = (1 PIND0); / set pin 0 to output PORTD = (1 PIND0); /

9、set pin 0 to enable pullup milliSecInit(127); / 50% duty cycle 1kHz signal / say hello sendString(rPC_Comm.c ready to communicate.r); / identify yourself specifically sendString(You are talking to the Motor Speed Control demo.r); sendString(setxxx to set speedr);void parseInput(char s) / parse first

10、 character switch (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;

11、int parse_set(char s) char set11; unsigned char i = 3, j = 0; while( (si != 0) & (j = 0) & (si 4)/ must be 256 sendString(Error - Parse_set number too large); return 0; else set_speed(atoi(set); return 1;void set_speed(int count) char speed11; sendString(Setting the Compare Timer Count to: ); itoa(c

12、ount,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

13、) / Enable timer0 compare interrupt TIMSK0 = (1OCIE0A); / Sets the compare value setOCR0A(count); / Set PWM Phase Correct mode, CLK/8 prescaler TCCR0A = (0FOC0A)|(0WGM01)|(1WGM00)|(1 64) count = 0; string0 = 0; sendString(Error - received 64 characters); return 0;char isCharAvailable() / Does the RX

14、0 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 register return UDR0;void sendChar(char data) int i = 0; / To send data with the USART put the data in the USART data r

15、egister UDR0 = data; / Check to see if the global interrupts are enabled if(SREG & 0x80) / Wait until the byte is sent or we count out while ( !(UCSR0A&0x40) & (i10000) ) i+; else / Wait until the byte is sent while( !(UCSR0A&0x40) ); / Clear the TXCflag UCSR0A=UCSR0A|0x40; void sendString(char s) i

16、nt i = 0; while(i 64) / dont get stuck if it is a bad string if( si = 0 ) break; / quit on string terminator sendChar(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

17、 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

18、); / Enable interrupts sei(); / Setup the interrupt mask and flags PCMSK1 = (1PINB6) | (1PINB4); / set pin-change interrupt mask EIFR = (1PCIF1); / clear external intterupt flag 1 EIMSK = (1PCIE1); / enable external interrupt 1 /Calibrate the internal OSCCAL byte, using the external /32,768 kHz crys

19、tal 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); /s

20、elect 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 TCR2U

21、B to be cleared / wait for external crystal to stabilise for(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;

22、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 valu

23、e 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 五心得体会作为一名应用电子技术专业的大二学生,我觉得做微控制器的设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1