查看: 865|回复: 5

用Attiny13制作Boost电路

[复制链接]
  • TA的每日心情
    开心
    2020-9-9 09:23
  • 签到天数: 153 天

    [LV.7]常住居民III

    发表于 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
  • TA的每日心情
    开心
    2020-9-9 09:23
  • 签到天数: 153 天

    [LV.7]常住居民III

     楼主| 发表于 2020-5-28 13:11 | 显示全部楼层
    我的天,图片怎么全跑下面去了,编辑起来真麻烦
  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2020-5-28 15:44 | 显示全部楼层
    极限情况下输入平均 3A,峰值能有 5-6A,这个电感目测用料很足
  • TA的每日心情
    开心
    2020-9-9 09:23
  • 签到天数: 153 天

    [LV.7]常住居民III

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

    哈哈哈
  • TA的每日心情
    擦汗
    2020-8-27 12:23
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-7-9 22:00 | 显示全部楼层
    楼主试试学会使用图床
  • TA的每日心情
    开心
    2020-9-9 09:23
  • 签到天数: 153 天

    [LV.7]常住居民III

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

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

    本版积分规则

    热门推荐

    【Arduino】168种传感器系列实验(133)---GP2Y0A02YK0F红外测距
    【Arduino】168种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    arduinoUNO 用两个PIN控制一个spi设备(RFID)
    arduinoUNO 用两个PIN控制
    我已经测试,MRFC522的chipSelectPin 是正常的。当pin为低电平时可以正enable并都读写
    求助一下,这个代码哪里有问题
    求助一下,这个代码哪里有
    这是一个控制舵机的代码 问题出在 /UitalWrite(2, LOW); 这一句 纯小白,谢谢
    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    用Arduino制作支持ROS机器
    参赛项目:[/backcolor] 用Arduino制作支持ROS机器人操作系统的7轴机械臂[/backcolor
    增量式编码器 600脉冲,怎样中8266里读取脉冲数和正反
    增量式编码器 600脉冲,怎
    4线 增量式 编码器 供电 5/24V 红;电源+ 黑;电源- 绿;A相 白;B相 600脉冲/
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表