切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 9589阅读
  • 25回复

[电源]STM8单片机制作的3-4V升5V的Boost电路 [复制链接]

上一主题 下一主题
离线琪露诺
 
发帖
77
M币
634
专家
7
粉丝
31
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2014-10-15
上大学之后忙成了Doge 很少来论坛转悠
最近稍微空闲于是就鼓捣了一个简易的升压电路 可以用于移动电源

STM8S103F3素一种TSSOP20封装(很小的QwQ)的8位单片机, 具有价格低|外设多|开发方便(有固件库)以及宽工作电压等优点,平均只要1块多就能买一片的
这货里面有3个定时器,一个UART串口,一个I2C串口,一个SPI串口,一个10位16通道的高速ADC(由于封装用不到16通道),还有看门Doge等, 几乎每一个IO口都有自己的外部中断, 内部多个始终源,简直用不完的赶脚啊

这里暂时只用了两个定时器和ADC:
TIM1这个高级16位定时器用于产生固定频率可变占空比的PWM波,通过一个引脚进行输出
TIM4这个普通8位定时器用于隔一段时间进行PI运算从而稳定输出电压
ADC中的4通道(AIN4)用于检测输出电压,而3通道(AIN3)用于提供一个参考电压,约0.6-0.7V,这个电压利用二极管正向导通压降产生的

为什么还需要一个参考电压呢? 因为ADC出来的结果是一个整数, 还需要乘以单片机电源电压再除以2的10次放才是真正的电压. 单片机的供电可能不稳定, 如果没有这个参考,那可能会造成输出不稳定.

下面是电路图,非常简单没有一个多余的原件哦:


程序方面的话也很简单, 就是配置好定时器TIM1 TIM4还有ADC即可, 然后在TIM4中定时运行PID算法.

初始化TIM1, 由主时钟直接驱动不分频, 把它弄成向上计数模式,
        TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, DUTYCYCLE_RESOLUTION, 0);
然后把输出通道1配置成PWM模式,高电平有效,同时开启反向的输出,可以给同步整流的管子用哦w
        TIM1_OC1Init (TIM1_OCMODE_PWM1,
                                                                TIM1_OUTPUTSTATE_ENABLE,
                                                                TIM1_OUTPUTNSTATE_ENABLE,
                                                                0,
                                                                TIM1_OCPOLARITY_HIGH,
                                                                TIM1_OCPOLARITY_HIGH,
                                                                TIM1_OCIDLESTATE_RESET,
                                                                TIM1_OCIDLESTATE_RESET);
启动定时器和PWM输出
        TIM1_CtrlPWMOutputs(ENABLE);
        TIM1_Cmd(ENABLE);
设置占空比为1
        TIM1_SetCompare1(1);

初始化TIM4, 由64次分频的主时钟驱动,当计数到达255的时候触发一次中断
        TIM4_TimeBaseInit(TIM4_PRESCALER_64, 0xFF);
上来就得触发一次更新事件还有中断,让TIM4_PRESCALER_64这货生效
        TIM4_SetCounter(0xFF);
        TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
开总中断
        rim();
开TIM4
        TIM4_Cmd(ENABLE);

PWM的频率素如何计算的:
STM8中的主时钟为16MHz, 内置的, 本制作中让STM8全速工作:
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
也就是说,驱动TIM1的预分频器的频率为16MHz,然后窝没让它分频,当计数到320时自动重装计数器的值,也就是说PWM频率=16MHz/320=50KHz, PWM的分辨率为100/320%

PID素怎么撸的:
PID素一种广泛应用的控制算法, 据说其历史有100多年了?(雾
优点素不需要建立复杂的数学模型, 世界上大部分PID控制器靠良好的P I D系数整定就能工作的很好
这里只用到了PI,其实为了快速响应,还是应该加上D的,不过窝时间少啪麻烦没加, 有兴趣的同学可以试试看
Kp和Ki得从小往大调,保证不震荡的情况下最快速调节就好,程序里面的没有什么问题了

最后发资料包:


哦对了,如果要测试的话需要把STM8S103F的OptionalByte修改下,OptionalByte掌控IO口的功能复用,具体的操作如下:
在STVD中点Tools菜单中的Programmer,然后按如下设置

再去Memory Areas选项卡,把Memory Area下面的选择框选成PROGRAM MEMORY,再点Add把Debug文件夹中的proj.s19文件装进来,最后去Program页面点Start,如果没看到红字,就完成了!

最后发福利(雾
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共9条打赏M币+26专家+1
离线bobjams

发帖
1048
M币
1511
专家
2
粉丝
35
只看该作者 1楼 发表于: 2014-10-15
请登录后查看
离线wenrui
发帖
1
M币
-50
专家
0
粉丝
1
只看该作者 2楼 发表于: 2014-10-15
请登录后查看
离线喜羊羊

发帖
3638
M币
370
专家
10
粉丝
136
只看该作者 3楼 发表于: 2014-10-15
请登录后查看
离线962838542

发帖
982
M币
159
专家
4
粉丝
41
只看该作者 4楼 发表于: 2014-10-18
请登录后查看
离线琪露诺
发帖
77
M币
634
专家
7
粉丝
31
只看该作者 5楼 发表于: 2014-10-20
回 喜羊羊 的帖子
请登录后查看
离线iamminglei

发帖
1106
M币
12
专家
9
粉丝
48
只看该作者 6楼 发表于: 2014-10-21
请登录后查看
离线_woody_

发帖
803
M币
292
专家
4
粉丝
31
只看该作者 7楼 发表于: 2014-10-21
请登录后查看
离线喜羊羊

发帖
3638
M币
370
专家
10
粉丝
136
只看该作者 8楼 发表于: 2014-10-21
回 琪露诺 的帖子
请登录后查看
离线桃源客

发帖
3451
M币
762
专家
18
粉丝
243
只看该作者 9楼 发表于: 2014-11-29
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个