用Attiny13制作Boost电路-Arduino中文社区 - Powered by Discuz!
查看: 2110|回复: 5

用Attiny13制作Boost电路

[复制链接]

该用户从未签到

发表于 2020-5-28 13:11 | 显示全部楼层 |阅读模式
本帖最后由 希岩 于 2020-8-10 12:34 编辑

制作简单升压Boost电路

在舵机驱动板、步进电机驱动和功放电路中通常会用到12V电源,但手头只有3.7V锂电池怎么办?一种办法是将锂电池串联起来,这种方法需要3个相同的电池。不想串联怎么办?那就制作一个简单的升压电路吧。
Boost电路,即升压电路,其原理比较容易理解。如下图所示,详细工作原理这里不介绍,自己去网上查,资料很多。简单说就是开关闭合时,通过给电感充电,电感储存电能,断开开关,电感自感电压叠加到电源两端,使得电压升高。

需要设计的参数是:输入电压Vi=3.7V,输出电压Vo=12V,输出最大电流为1A,电流纹波10%,电压波动10%。根据输入输出的关系,可得占空比为70%。通过PWM控制开关S的启闭,PWM频率影响选择参数的大小,一般PWM频率越高,所需电感和电容越小。
手头买了ATtiny13A直插的单片机,只有八个引脚,采用ISP编程,个头非常小,FLASH只有1kb。支持两路PWM,本以为PWM速度可以很高,没想到采用内部9.6MHz RC振荡器时最大才37.5KHz,实在是非常慢的。根据公式计算可得滤波电容不小于15.4uF,计算可得电感值不小于15uH。综合考虑手头元件,选择了16V 2200uF电容和100uH的电感。
加上电压反馈,电路原理图如下所示。

电路比较简单,只加入了比例反馈调节,未使用PID调节。加入反馈调节后,输出端开路情况下能够不过压,仍然稳定在12V。同时,有负载时也能够保持较好电压稳定性。下图是实际的电路

当然这离不开可编程控制器的软件设计。软件设计也比较的简单,这里给出全部程序。当然,Boost电路经常用专用芯片。
  1. //注意将option中target选为attint13A
  2. #include<iot13Av.h>
  3. #include<AVRdef.h>
  4. unsigned intadcValue;
  5. //初始化定时器------------------------------------------------------------
  6. voidInit_PWM(void)
  7. {TCCR0A=0b10000011;                  //普通方式
  8.   TCCR0B=0b00000001;                       //预分频1,计时6.67us,page68
  9.   OCR0A=180;
  10. }
  11. //初始化控制器------------------------------------------------------------------
  12. //初始化时钟-------------------------------------------------------------------
  13. voidInit_Clock(void)
  14. {OSCCAL =0x51;                 //时钟矫正至9.6Mhz,page22
  15. //CLKPR = 0x80;                 //时钟分频器使能CLKPR_CLKPCE  
  16. //CLKPR = 0x00;                 //系统时钟8分频,p24(0>1;1>2;...8>256)
  17. }
  18. voidInit_ADC0(void)
  19. {ADMUX=0x01;                       //通道1,右对齐
  20. ADCSRA = 0b11000001;              // ADC使能,ADC开始转换,ADC单次转换,分频因子为128
  21. DIDR0=0x04;
  22. }
  23. //-----------------------------------------------------------------------
  24. voidInit_Port(void)
  25. { DDRB   = 0x01;
  26.   PORTB = 0x00;                 //PB0设为输出,其它为输入
  27. }
  28. //选择内部标定的RC振荡器9.6Mhz
  29. voidInit_devices(void)
  30. {Init_Clock();
  31. Init_Port();
  32. Init_PWM();
  33. }
  34. //ADC处理函数,电压微调
  35. voidAdcSample(void)
  36. {
  37. ADCSRA|=0x40;        //开始一次转换
  38. adcValue=0;
  39. while(ADCSRA&0x40);
  40. adcValue=ADCL;
  41. adcValue|=ADCH<<8;
  42. if((adcValue<800)&&(OCR0A<184))OCR0A++;    //电压不低于8.4V
  43. elseif((adcValue>890)&&(OCR0A>0)) OCR0A-=5;    //电压不超过13V
  44. }
  45. //-----------------------------------------------------------------------------
  46. void main(void)
  47. { unsigned chari,j;
  48.   CLI();                       //清中断
  49.   Init_devices();              //初始化设备
  50.   for(i=0;i<250;i++)
  51.     for(j=0;j<250;j++);        //延迟
  52.   Init_ADC0();
  53.   while(1)
  54.   {   
  55.        AdcSample();
  56.   }
  57. }
复制代码

231.png
2016-05-30_215916.png
IMG_20160530_212016.jpg
IMG_20160530_214651.jpg

该用户从未签到

 楼主| 发表于 2020-5-28 13:11 | 显示全部楼层
我的天,图片怎么全跑下面去了,编辑起来真麻烦

该用户从未签到

发表于 2020-5-28 15:44 | 显示全部楼层
极限情况下输入平均 3A,峰值能有 5-6A,这个电感目测用料很足

该用户从未签到

 楼主| 发表于 2020-5-28 21:34 | 显示全部楼层
t3486784401 发表于 2020-5-28 15:44
极限情况下输入平均 3A,峰值能有 5-6A,这个电感目测用料很足

哈哈哈

该用户从未签到

发表于 2020-7-9 22:00 | 显示全部楼层
楼主试试学会使用图床

该用户从未签到

 楼主| 发表于 2020-8-10 12:34 | 显示全部楼层
ino 发表于 2020-7-9 22:00
楼主试试学会使用图床

整了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

arduino 2560串口无法通信问题
arduino 2560串口无法通信
这样将2560主板和蓝牙模块连接到一起进行通信,结果arduino2560可以通过电脑给蓝牙模
求助各位大佬,proteus8软件为什么搜不到uno板子
求助各位大佬,proteus8软
求各位大佬帮忙看看,小白第一次用就出了这个,泪了
【Arduino】168种传感器系列实验(171)---HLK-V20离线语音模块
【Arduino】168种传感器系
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
esp8266网页配置wifi 及Blinker秘钥,实现远程开灯
esp8266网页配置wifi 及Bl
经过一段时间的学习借鉴,写了一段可以web配网,配Blinker秘钥的程序,借鉴很多大佬,
【Arduino】168种传感器模块系列实验(144)---0.91寸OLED液晶屏
【Arduino】168种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表