
水滴轮电子刹车系统(DC刹车)
简介
针水滴轮设计的依靠渔轮抛投时动能产生的电力为能源的电子刹车系统(DC刹车)
简介:针水滴轮设计的依靠渔轮抛投时动能产生的电力为能源的电子刹车系统(DC刹车)开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
视频链接:
欢迎大家互相交流,本人微信:tangbure03
项目简介
本项目是基于51单片机的水滴渔轮电子刹车系统。
项目功能
本设计是基于STC8G1K08A单片机设计的渔轮刹车系统;设置有一个可以外部调节刹车的电位器,并预留了三个功能引脚,可以用来控制模式切换以及声光显示或者通过通过光电开关来实现调节功能,这样可以做到完全防水等等。目前功能主要靠电位器来调节实现,能实现不同的刹车力的调节,结合内部的霍尔传感器,可以通过预设结合获取的线杯转速自动调节刹车力的大小。
项目参数
- 本设计主控采用了STC8G1K08A单片机,可以用任何合适尺寸的其他类型低功耗单片机代替;
- 刹车部分采用和禧玛诺一致的两颗单N沟MOS管BSZ110N08NS5ATMA1,这里要根据电路的工作环境选择合适的MOS代替;
- AC-DC整流部分的二极管选择要注意耐压;
- 直流稳压部分尽量保证电源的波纹不要太高;
- 转速检测采用单极性霍尔传感器HX6286ESO。
原理解析(硬件说明)
本项目由以下部分组成,AC-DC整流桥、DC稳压滤波、主控、转速传感器、调节电位器、刹车控制MOS。
本项目主要是通过渔轮抛投过程中线杯轴上的永磁铁与固定的线圈相互切割磁场产生交流电,交流电经过整流桥整流变为直流电。因为所获得的直流电其一电压过高,其二会因为转速等影响不够稳定。所以要经过线性稳压器变为纯净的5V直流电,而后提供给控制部分工作。主控会结合霍尔传感器所获得的转速和外部调节电位器的值进行计算,实时控制刹车MOS管的导通率。到此为止可以把线杯当成发电机的转子,刹车线圈为定子。当MOS的导通率越高,发电机的输出越接近短路状态,导致发电机负载越大,刹车力越大。
至于电子刹车的声音部分,只要是因为刹车的MOS管是由PWM信号控制,当PWM的信号频率在人耳的听觉频率范围内,我们就可以听到刹车的声音,相反,先要关闭电子刹车的声音,只需要把控制的PWM信号频率设定在人耳范围以外即可。
示例图1--电源电路:
采用两个肖特基二极管组成的AD-DC整流电路。
示例图2--电源电路:
TPS7A1601线性稳压器输出稳定的5V直流。
示例图3--外部调节电路:
通过一个10K电位器实现。
示例图4--转速传感器:
通过一个单极性霍尔传感器实现。
示例图5--主控电路:
型号为STC8G1K08A的51单片机。
示例图6--刹车电路:
两颗单N沟MOS管BSZ110N08NS5ATMA1
软件代码
// STC8G1K08A 烧录时选12MHz频率
// 电位器中点接P5.5口取样,调节电位器,P3.3脚出1%--100%占空比脉冲控制刹车MOS
// 因为通过转速来优化刹车控制需要大量的实际抛投测试,所以下面的代码中并未写出霍尔传感器转速控制部分。
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ADC_POWER 0x80 //ADC 电源控制位
#define ADC_FLAG 0x10 //ADC 转换结束标志位
#define ADC_START 0x08 //ADC 开始转换控制位
#define ADC_SPEEDLL 0x00 //210 个时钟周期转换一次
#define ADC_SPEEDL 0x20 //420 个时钟周期转换一次
#define ADC_SPEEDH 0x40 //630 个时钟周期转换一次
#define ADC_SPEEDHH 0x60 //840 个时钟周期转换一次
/********************************************************************
初始定义
*********************************************************************/
uint tcnt=0;
uint sec=0;
uint dat=0;
uint dat1=0;
uint dat2=0;
uint K;
/********************************************************************
I/O定义
*********************************************************************/
sbit Y0=P3^3; // PWM输出端1%--100%占空比
uchar CLK=0; // 脉冲计数
/********************************************************************
定时器T0初始化
*********************************************************************/
void timer0_init(){
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0xF6; //设置定时初始值
TH0 = 0xF6; //设置定时重载值
TR0=1; //开始定时
ET0=1;
EA=1;
}
void InitADC(){
ADC_RES = 0; //AD数据寄存器清空
ADC_CONTR = ADC_POWER | ADC_SPEEDLL; //打开AD电源,转换周期210
_nop_();
_nop_();
_nop_();
}
/********************************************************************
主函数
*********************************************************************/
void main(){
P3M0 = 0xff; P3M1 = 0x00; //推挽输出,可以高电平驱动LED,配合PWM有明暗变化
P5M0 = 0x00; P5M1 = 0x00;
P32=0; // 方便接LED
InitADC(); //AD初始化
ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16/16
ADC_CONTR = 0x80; //使能ADC模块
timer0_init();
while(1){
ADC_CONTR |= 0x45; //启动AD转换 后一位数值5表示选择 ADC5,即P5.5
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
dat = ADC_RES; //读取ADC结果高8位,实际是第B0和B1有用
dat1= ADC_RESL;//读取ADC结果低8位,8个位都有用
K=(dat*256+dat1)/500;//4v串联2K到10K电位器上端子,下端子接地,中点接P5.4口取样
}
}
/********************************************************************
定时器T0中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 { //定时中断服务函数250US一次中断
if(K>0){ //K越大,占空比越大
if(tcnt==0) Y0=1;
if(tcnt==K) Y0=0;
tcnt++;
if(tcnt>100) tcnt=0;
}
}
注意事项
在制作过程中本人踩的坑
- 供电波纹干扰太大,导致主控不能正常工作
- 刹车MOS的寄生电容导致开关不能快速恢复
- C1和C2两颗电容的电容值如果太小会导致主控供电不足
实物图
设计图

BOM


评论