基于STC单片机的模拟雨刷设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级:

姓名:

学号:

成绩:

电子与信息工程学院信息与通信工程系

一、要求及考核

1、要有勤于思考、刻苦钻研的学习精神和严肃认真、一丝不苟、有错必改、精益求精的工作态度。要敢于创新,勇于实践,注意培养创新意识和工程实践意识。

2、广泛查阅相关资料,独立、认真设计,对有抄袭他人设计图纸(论文)或找他人代画设计图纸、代做设计等行为的弄虚作假者一律按不及格记成绩,并根据学校有关规定予以处理。

3、掌握相关课程的基本理论和基本知识,概念清楚,设计计算正确,结构设计合理,实验数据可靠,软件程序运行良好,绘图符合标准,说明书(论文)撰写规范,内容叙述准确,字迹工整,条理清晰,画图符合标准。答辩中回答问题正确。

4、针对设计重点进行论述与说明,如为何选择、如何选择、重点参数的计算、如何进一步改进等。特别要突出自己的新认识、新体会、新观点。文中符号、图、表要统一标准。按指定排版格式进行编排。

5、实习第一周为FPGA讲座。第二三周为电路设计。

6、按照任务书要求的任务进行设计并完成所有设计过程,功能、结果正确。

7、按照要求提交设计要求的实物、以及相应的报告并由指导教师进行答辩。报告的内容主要有9项。①设计任务②设计思路③原理图④器件清单⑤PCB图⑥程序流程图

⑦程序代码⑧FPGA上课心得及电路设计感想⑨参考文献。

8、每1人一组,选择一个题目,每个班级允许2组选择同一题目。也可以自拟题目,报老师同意后方可进行。

9、每组最后提交一份署名报告,一个署名电路板(电路板上用胶带将写好名字、班级、学号的纸条贴好)。

二、设计题目

模拟自动雨刷

1、要求:通过雨滴传感器检测雨滴,利用舵机模拟雨刷,其余扩展功能自行设计。

2、核心元件:舵机,雨滴传感器。

3、模块

1)舵机电路

舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。一般的伺服马达是将细铜线缠绕在三极转子上,当电流流经线圈时便会产生磁场,与转子外围的磁铁产生排斥作用,进而产生转动的作用力。依据物理学原理,物体的转动惯量与质量成正比,因此要转动质量愈大的物体,所需的作用力也愈大。舵机为求转速快、耗电小,于是将细铜线缠绕成极薄的中空圆柱体,形成一

个重量极轻的无极中空转子,并将磁铁置於圆柱体内,这就是无核心马达。

2)雨滴传感器

Arduino机器人套件,雨滴,下雨传感器,可用于各种天气状况的监测,并转成数定信号和AO输出。提供是单片机工作的信号。

3)单片机

调整占空比控制雨刷转动。

4、原理图

5、PCB原理图

6、接线方式:

1、VCC:接电源正极(3-5V)

2、GND:接电源负极

3、DO:TTL开关信号输出

4、AO:模拟信号输出

7、程序

#include "STC15Fxxxx.H"

#define Timer0_Reload (MAIN_Fosc / 5000) //Timer 0 中断频率, 5000次/秒#define uint unsigned int

#define uchar unsigned char

sbit pwm = P0^0;

sbit MH_RD = P2^7;

uint time = 0;

uchar mark = 10;

void Timer0_init(void)

{

TMOD = 0x00; //工作模式, 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断

AUXR |= 0x80; //1T mode

TH0 = (u8)((65536UL - Timer0_Reload) / 256);

TL0 = (u8)((65536UL - Timer0_Reload) % 256);

TR0 = 0; //停止计数

EA = 1; //开总中断

ET0 = 1; //允许中断

}

void delay_ms(uint ms)

{

uint i;

do{

i = MAIN_Fosc / 13000;

while(--i);

}while(--ms);

}

/******************** 主函数**************************/

void main(void)

{

uchar i;

Timer0_init();

TR0 = 1;

delay_ms(1000);

while(1)

{

if(MH_RD==0)

{

if(mark>=10)

{

mark = 10;

for(i=0;i<5;i++)

{

mark--;

delay_ms(400);

}

}

delay_ms(1000);

if(mark<=5)

{

mark = 5;

for(i=0;i<5;i++)

{

mark++;

delay_ms(400);

}

}

}

}

}

//================================================================= =======

// 函数: void timer0_int (void) interrupt TIMER0_VECTOR

// 描述: timer0中断函数.

// 参数: none.

相关文档
最新文档