- 外部电路
这是最基础的升压电路 ,需要的原件不多,由于要用到PWM,二极管最好用肖特基快恢复二极管,电容耐压值也要高一点
这里我在输出端接了一个氖管 ,由于氖管起辉电压在七八十伏左右,这样便于观察实验现象
? ? 2.原理
三极管基极利用单片机产生PWM波控制其开关占空比,而三极管开关过程会让电感产生感生电动势,与电源叠加从而达到升压效果,二极管与电容是用于稳定输出的。
? ? 3.制作
由上图可以看到,我用了一个变压器当电感,自己绕也是可以的,不过要记得加铁芯,不过三极管没找到大功率的就用拆下来的2N2222了(接负载发热严重),代码放文末。
? ? 4.效果演示
由于不方便上传视频,就多放了几张图片
? ? ?5.程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar time;
double zkb=25; //定义占空比,并初始占空比为25%
sbit PWM=P1^0; //P1^0口输出PWM
sbit key_up=P3^0; //电机加速的按键 的I/O口
sbit key_down=P3^1; //电机减速的按键 的I/O口
/************函数声明**************/
void delay(uint z); //延时
void Motor_up(); //电机加速,即增加占空比
void Motor_down(); //电机减速,即减少占空比
void timer0_init(); //定时器0初始化
/*********主函数********************/
void main()
{
timer0_init();
delay(5);
while(1)
{
Motor_up();
Motor_down();
}
}
/****************延时处理**********************/
void delay(uint z) //延时xms程序
{
uint x,y;
for(y=z;x>0;x--)
for(y=110;y>0;y--);
}
void Motor_up() //电机加速
{
if(key_up==0)
{
delay(2); //此处时间不能太长,否者会与中断产生冲突
if(key_up==0)
{
zkb+=0.5; //每按一次加速按键占空比加0.5
if(zkb>=80) //限定占空比上限80
{
zkb=80;
}
}
while(!key_up);
}
}
void Motor_down()//电机减速
{
if(key_down==0)
{
delay(2);//此处时间不能太长,否者会与中断产生冲突
if(key_down==0)
{
zkb-=0.5; //每按一次减速按键占空比减0.5
if(zkb<=10) //限定占空比下限10
{
zkb=10;
}
}
while(!key_down);
}
}
/***********定时器0初始化***********/
void timer0_init()
{
TMOD=0x01; //定时器0工作于方式1
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
ET0=1;
EA=1;
}
/**************定时0中断处理******************/
void timer0_int() interrupt 1
{
TR0=0; //设置定时器初值期间,关闭定时器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
time++;
if(time<zkb) //zkb为占空比
{
PWM=1; //输出高电平
}
else
PWM=0;
if(time>=100)
{
time=0;
}
}
- 为提供足够电流,程序中PWM输出脚是接了无刷电机驱动模块的,直接使用IO口的话电感最好不要圈数太多且输出IO口接个电阻防止烧坏单片机
- 这个程序是可以用按键控制PWM占空比的(每按一次调幅0.5,也可以在程序中修改)
- 这个电路理论上是可以控制占空比控制输出电压的,但用的电感等参数不知,所以六伏的电压只能放大到80伏左右
- 电路还有很多值得改进的地方,资源有限,凑合着用吧
|