欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式
概要
本次文章主要介绍一种基于AT89S51单片机所设计出的汽车电动窗控制设计方法:通过对于电枢电流的采样信号放大,模数转换教,将数字电压信号输入单片机当中,单片机通过将输的信号与最初所设定好的值来进行对比,判断是否出现堵转电流。根据判断结果再进行电机正转反转停转的控制,从而解决了实际生活过程当中车窗升降的问题。比较于之前的汽车电动车窗来说,本系统具有更多的优点,比如说反应更为灵敏,响应速度更快,操作性更强。
关键词:AT89S51 电流采样 信号放大
一、总体结构设计
本文设计了一种汽车的单片机的电控制系统,实现车窗的升降以及动态调整,如图2-1所示,由继电器模块、直流电机模块、升降器模块、单片机组成。
图2.1 系统结构图
2.1 总体技术方案
本车窗控制系统硬件部分主要由车窗玻璃、升降器、直流 电机、单片机,升 / 降按钮和 CAN 控制器构成。相对于传统 的点触式开关控制的汽车电动车窗,本设计在电机正反转控制、 车窗防夹等功能上,有反应灵敏、响应速度快、可操作性强等优点
2.1.1 继电器模块功能
检测模块主要对12节电池的电压温度进行实时检测回报给控制模块,由控制模块对每节电池的状态做出评价并返回相应命令。
2.1.2 直流电机模块功能
均衡电源模块在电池充电过程中可控制检测模块中的均衡放电回路对相关电池模组的多节电池进行均衡放电。达到均衡状态时关闭放电回路。
2.1.3 升降器模块功能
控制模块包括主控芯片及其外围电路,主控芯片分别与检测模块的电压检测回路、均衡充电回路连接。主控芯片主要功能:通过电路对检测模块中均衡充电回路,可以实现对任意指定的一节电池进行均衡充电。主控芯片接收检测模块中电压检测回路检测到的电池模组中各节单体电池的电压值并进行运算比较处理,当电池模组中的某节单体电池处于“过充电状态”时,控制模块中的控制程序驱动均衡电源模块,结合检测模块中的光耦合器件和检测芯片的控制门打开检测模块中的均衡放电回路。
二、硬件电路设计
3.1 电机驱动系统的设计
在一般的汽车电动车窗设计过程当中,我们采用的都是永磁式的直流电机。这种电机与其他经济相比,结构更小,操作更加简单,噪音也比较小电动车窗的升降功能主要是通过改变电流方向来进行的,之前的汽车电动车窗一般采用的是点触式的开关来改变电流方向,但是在本次实验过程当中,我们采用单片机输出高低电平控制继电器断和来改变电流方向,从而改变电机的正反转。
图2 电动车窗的电机控制系统
表1 电机控制真值表
三、软件详细设计
实验的过程当中,电流信号变为了电压信号,随后经过放大,通过数模转换输入单片机,单片机接着将输入到的信号与最初设定好的值进行比较,从而来判断是否有堵转电路出现。
四、仿真结果及分析
加热盘电路:
程序:
#include <htc.h>
#define uint unsigned int
void init();
void check_number();
uint check_current(void);
void inter(void);
void window_up(void);
void window_down();
void window_stop();
uint get_ad(void);
void delay(uint y);
//======================定义的全局变量============================
uint x,p,q,i,sum,down_position,up_position;
uint curnum[10];
//========================程序延时程序=============================
void delay(uint y) //延时函数
{
uint a,b;
for(a=y;a>0;a--)
for(b=110;b>0;b--);
}
//===================================================================
//====================完成对PIC16F877A的芯片功能初始化=============
void init() //初始化函数
{
i=0;
sum=0;
TRISA=0xff; //设置A口为全输入方式
TRISB=0xc0; //设置B口为RB1、RB2输出,RB6、RB7输入
TRISC=0xff; //设置霍尔元件脉冲输入端
RB1=0; //关断电机回路
RB2=0;
T1CON=0x02; //外部脉冲上升沿同步计数,分频比为1:1,TMR1为关断
TMR1L=0x00; //设置TMR1L寄存器的值
p=0x0b; //防夹区的上限脉冲数
q=0x08; //防夹区的下限脉冲数
ADCON0=0x41; //4MHZ的时钟频率,通道0
ADCON1=0x8e; //右对齐方式,AN0为模拟输入,其余为I/O输入
ADRESH=0; //设置ADRESH寄存器的值
ADRESL=0; //设置ADRESL寄存器的值
delay(10);
}
//=================读取ADC值,并且返回==============================
uint get_ad(void) //模拟电流转换函数
{
uint adval;
ADON=1; //开启AD转换
while(ADON); //当AD转换结束执行下面的语句
adval=ADRESH; //取出转换值
adval=(adval<<8)+ADRESL;
return(adval); //返回转换的值
}
//=============================滤波算法==============================
uint check_current(void) //采样电流求均值函数
{
uint count,k;
curnum[i++]=get_ad(); //电流的采样值送给curnum
if(i==10) //当采到第11次时,将第1次的采样值省去,加入第11次采样值
{
i=9;
for(k=0;k<11;k++)
{
curnum[k]=curnum[k+1];
}
}
for(count=0;count<10;count++)
{
sum=sum+curnum[count]; //求10次采样的电流之和
}
return(sum/10); //返回平均电流
}
void check_number() //防夹检测函数
{
if(TMR1L<q) //判断车窗是否在防夹区以下
{
delay(20); //是则延时20ms继续检测按键的情况
}
else if(TMR1L>p) //判断车窗是否在防夹区以上
{
RB2=0; //是则说明到顶,关断电机
up_position=TMR1L; //将上升的车窗位置送入up_position
}
else
{
inter(); //在防夹区内则执行防夹函数
}
}
void window_up(void) //车窗上升函数
{
if(RA2==0) //电机正转,车窗上升
{
delay(10);
if(RA2==0) //确定按键是按下
{
while(!RA2); //按键被释放
TMR1L=up_position; //将上升位置赋给TMR1寄存器
RB2=1; //启动电机正转
TMR1ON=1; //开计数器TMR1
delay(20); //避免启动时的过大电流造成芯片的误动作
// check_current(); //采样电流检测
x=check_current(); //电流采样平均值给x
if(x>=2) //过流则检查是否在防夹区
{
check_number();
}
}
}
}
void window_down() //车窗下降函数
{
if(RA3==0) //电机反转,车窗下降
{
delay(10);
if(RA3==0)
{
while(!RA3);
TMR1L=down_position; //将车窗的位置赋给TMR1
RB1=1; //启动电机反转
TMR1ON=1;
delay(20);
check_current();
x=check_current();
if(x>2)
{
window_stop();
}
}
}
}
void window_stop() //电机关断函数
{
RB1=0; //关断电机
down_position=TMR1L; //将车窗反转的高度送进down_position
up_position=up_position-down_position; //计算出当前车窗的上升高度送入//up_position
down_position=0;
}
//============================函数主程序============================
void main(void)
{
init();
while(1)
{
window_up();
window_down();
}
}
//============================函数中断处理==========================
void inter(void) //防夹函数
{
RB2=0; //使电机反转
RB1=1;
up_position=TMR1L; //将车窗上升的高度位置送进up_position
delay(50); //延时50ms
window_stop();
}
五、结论
毕业设计还没开始的时候,,进入分布式控制研究所学习,跟随张利老师学习。不久便我进入实验室学习。今年5月份,我并查阅资料,补充相关项目知识等等,在师兄师姐们的带领下,今年6月份,经过我的努力半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。
在这次毕业设计中苦恼过,无奈过,纠结过。但是经过老师,师兄,同学的帮助,我一个又一个的克服了这些困难。经过了这些过程后体会到的是成就感,喜悦感。在其中我学到了很多,了解了很多,自己的知识面有了很大的提高。其中主要有:学会了用Altium Designer绘制电路图,掌握几种元件的用法。初步学会了单片机编程,了解到一些单片机的用法。办公软件如word,PPT等有了很大的提高。对于硬件电路方面有了一定理解。
六、 文章目录
目录
中文摘要 3
英文摘要 4
1 绪 论 5
1.1 研究的目的和意义 5
1.2 国内外研究现状和发展趋势 5
1.3 均衡控制的优点 7
1.4 论文主要内容 7
2 总体结构设计 8
2.1 总体技术方案 8
2.1.1 检测模块功能 8
2.1.2 均衡电源模块功能 8
2.1.3 控制模块功能 8
2.1.4 均衡放电方法的特征 9
2.1.5 总体功能流程 9
3 均衡放电硬件电路设计 11
3.1 控制模块的设计 11
3.1.1 控制模块电路的设计 11
3.1.2 主控芯片的选型 12
3.2 均衡模块的设计 13
3.3 检测模块的设计 14
3.3.1 检测芯片的选取 14
3.3.2 电路设计 15
3.4 电池模组的设计 17
3.5 放电均衡过程 18
4 均衡放电的软件部分设计 19
4.1 系统程序总流程 19
4.2 数据采集流程 20
4.2.1 SPI通讯原理 20
4.2.2 SPI读写程序 21
4.2.3 LTC6802-1读写程序 21
4.3 仿真分析 23
5 感悟与收获 25
致谢 26
参考文献 27
附录 29
系统原理图 29