基于STC单片机的模拟雨刷设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.