STM8单片机制作的3-4V升5V的Boost电路

上大学之后忙成了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次放才是真正的电压. 单片机的供电可能不稳定, 如果没有这个参考,那可能会造成输出不稳定.

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



程序方面的话也很简单, 就是配置好定时器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得从小往大调,保证不震荡的情况下最快速调节就好,程序里面的没有什么问题了

最后发资料包:

MobileCharger.zip
525k
ZIP
97次下载

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

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

最后发福利(雾
53e130adcbef7609b07db61f2edda3cc7dd99ed5.jpg
来自:电气技术 / 电力电子
 
2014-10-15 16:49:07
1楼
先顶翠翠~
但是这货用单片机,是不是显得有些浪费呢~
折叠评论
加载评论中,请稍候...
折叠评论
2楼
引用 奶酪:
先顶翠翠~
但是这货用单片机,是不是显得有些浪费呢~
这么低的电压下,是不是专用IC比这个STM8单片机更贵.......
折叠评论
加载评论中,请稍候...
折叠评论
3楼
引用 坚持and突破:
这么低的电压下,是不是专用IC比这个STM8单片机更贵.......
专用的便宜吧而且效率高
折叠评论
加载评论中,请稍候...
折叠评论
4楼
翠翠你有pid的资料么这坑爹东西无法理解啊
折叠评论
加载评论中,请稍候...
折叠评论
5楼
STM8这性价比也真是快疯了。。这么小的封装里集成了这么一大堆功能。。而且只要一两块钱。。简直丧心病狂,感觉在性价比上AVR都快被秒杀了
PID这玩意真是难以理解。。果然只要一提到算法就脑袋疼。。理解无力QAQ。。话说直接用采样来的电压和基准电压做比较来控制PWM不可行么?
最后,LZ发个⑨福利啊@¥@!~¥#¥%¥……%&……¥%……%#¥%[s::Q]
折叠评论
加载评论中,请稍候...
折叠评论
6楼
首先,STM8可以推挽输出,电流>20毫安,没有使用图腾柱的必要。图腾柱导致实际驱动电压摆幅偏低,开关性能变差。

其次,1n4148串2.2k电阻,电流为1mA。相对于其提供的电压精度来讲,非常不节能。正确的方式:直接将adc脚连接到VCAP,使用内置稳压器提供的1.8V。

再次,根据数据手册,VCAP接GND的电容要求为0.47-3uF,而不是0.1uF。虽然也能工作,但不保证在所有工况下(例如外设全开)时稳定。

补充,没有根据使用的电感类型指定工作频率。

最后,stm8s的RESET脚是不用上拉(可以悬空,内部上拉足够)的。其他的一些单片机不允许这么干,但经过许多实际应用(例如KC312、314)的验证,它确实可以。
折叠评论
加载评论中,请稍候...
折叠评论
7楼
再多个嘴,外部中断不是per pin的,而是per port的。
折叠评论
加载评论中,请稍候...
折叠评论
8楼
杀鸡用牛刀的感觉。。。
折叠评论
加载评论中,请稍候...
折叠评论
9楼
引用 baiwenglong:
STM8这性价比也真是快疯了。。这么小的封装里集成了这么一大堆功能。。而且只要一两块钱。。简直丧心病狂,感觉在性价比上AVR都快被秒杀了
PID这玩意真是难以理解。。果然只要一提到算法就脑袋疼。。理解无力QAQ。。话说直接用采样来的电压和...
哎我没学过微积分
技校伤不起啊
我现在还在脑补高中数学
折叠评论
加载评论中,请稍候...
折叠评论
10楼
引用 1176764177:
哎我没学过微积分
技校伤不起啊
我现在还在脑补高中数学
初中党更伤不起。。百度来的打死看不懂
折叠评论
加载评论中,请稍候...
折叠评论
11楼
小翠姑娘,能搞成带同步整流吗?
折叠评论
加载评论中,请稍候...
折叠评论
12楼
性价比极高的好单片机。 那sg3525让我哭了
折叠评论
加载评论中,请稍候...
折叠评论
13楼
翠翠 换IAR吧,同样建 一个空工程 STVP 编译出来的bin文件2.1kb IAR只有0.5k, 而且还支持C++............
折叠评论
加载评论中,请稍候...
折叠评论
2014-10-16 04:16:18
14楼
引用 baiwenglong:
STM8这性价比也真是快疯了。。这么小的封装里集成了这么一大堆功能。。而且只要一两块钱。。简直丧心病狂,感觉在性价比上AVR都快被秒杀了
PID这玩意真是难以理解。。果然只要一提到算法就脑袋疼。。理解无力QAQ。。话说直接用采样来的电压和...
您说的这个比较法产生pwm是可以的。在单片机上,受制于ADC速度,工作频率会较低,一般用模拟电路实现。
折叠评论
加载评论中,请稍候...
折叠评论
15楼
引用 张静茹:
翠翠 换IAR吧,同样建 一个空工程 STVP 编译出来的bin文件2.1kb IAR只有0.5k, 而且还支持C++............
bin文件的大小,并不严格等于占用代码的大小。

IAR编译器确实更好,工具链自动化程度更高,是真话。做这种对速度要求高的应用,没有好的编译器是不适合的,除非是ASM党。
折叠评论
加载评论中,请稍候...
折叠评论
16楼
引用 1176764177:
哎我没学过微积分
技校伤不起啊
我现在还在脑补高中数学
你就把它看成一个函数嘛,函数声明假设是这样的:
float pidUpdata(float sample, float kp, float ki, float kd)
{
     .....
     return result;
}

函数返回的是PID控制器的计算结果,参数sample是采样值,kp,ki,kd分别是PID调节器所代表的三个环节各自的增益,需要调节的参数也就是这三个。

P是比例环节,用来提高系统响应速度。
I是积分环节,用来消除稳态误差。
D是微分环节,用来增强系统稳定性。

反正天底下的PID都是一样的,把别人的PID函数拿过来用就是了。
折叠评论
加载评论中,请稍候...
折叠评论
17楼
给个建议。低压下二极管压降明显,非常影响效率。
建议改成同步整流,用单片机编写非常方便
折叠评论
加载评论中,请稍候...
折叠评论
18楼
引用 .........:
你就把它看成一个函数嘛,函数声明假设是这样的:
float pidUpdata(float sample, float kp, float ki, float kd)
{
     .....
     return result;
}

...
不理解怎么做的就不敢用这是强迫症么。。。。
折叠评论
加载评论中,请稍候...
折叠评论
2014-10-17 08:14:31
金坷居士(作者)
19楼
引用 novakon:
首先,STM8可以推挽输出,电流>20毫安,没有使用图腾柱的必要。图腾柱导致实际驱动电压摆幅偏低,开关性能变差。

其次,1n4148串2.2k电阻,电流为1mA。相对于其提供的电压精度来讲,非常不节能。正确的方式:直接将adc脚连接到VC...
1. PWM输出那个脚已经素推挽了 20mA 推mos太勉强了
2.VCap那个电压 真的不随供电电压改变么
折叠评论
加载评论中,请稍候...
折叠评论
金坷居士(作者)
20楼
引用 novakon:
再多个嘴,外部中断不是per pin的,而是per port的。
对的 准确说素per port 但素可以在中断里判断哪个pin
折叠评论
加载评论中,请稍候...
折叠评论
金坷居士(作者)
21楼
引用 baiwenglong:
初中党更伤不起。。百度来的打死看不懂
窝也初中开始搞的 最近才明白并搞真正稳定...
折叠评论
加载评论中,请稍候...
折叠评论
金坷居士(作者)
22楼
引用 .........:
你就把它看成一个函数嘛,函数声明假设是这样的:
float pidUpdata(float sample, float kp, float ki, float kd)
{
     .....
     return result;
}

...
不理解不敢用啊 神马变量溢出搞死泥 还有8位单片机算那么多float真的呆娇布?
折叠评论
加载评论中,请稍候...
折叠评论
金坷居士(作者)
23楼
引用 justinpiggy:
给个建议。低压下二极管压降明显,非常影响效率。
建议改成同步整流,用单片机编写非常方便
这个单片机同时提供了反向的PWM信号输出 可用于控制整流的mos 不过这里做实验就没加同步整流
折叠评论
加载评论中,请稍候...
折叠评论
2015-03-02 00:38:51
2015-3-2 0:38:51
24楼
引用 金坷居士:
1. PWM输出那个脚已经素推挽了 20mA 推mos太勉强了
2.VCap那个电压 真的不随供电电压改变么
从百度路过,我也来多嘴一下,推挽一个脚20MA确实少了点,但是可以用几个脚并联一起推MOS嘛,比方说找同一组PORT的5只脚并联推MOS,软件上可以直接把1字节赋值给那一组PORT同时跳变电平。。

那个VCAP我测试过,稳定性还是非常不错的,个体差异就不清楚了,以下是我的测试结果:
【4.88V电源】
Vcap        1.863v   @ LSI 128k CPU/128
Vcap        1.850v   @ HSI 16M


【3.29V电源】
Vcap        1.861v   @ LSI 128k CPU/128
Vcap        1.847v   @ HSI 16M
Vcap        1.848v   @ HSI 16M 50摄氏度(原始气温大概二十几度)







补充:貌似刚才我的脑神经系统跑飞了,现在才发现多脚并联是不行的,PWM外设一次只能控制一只脚。。。

[修改于 5 年前 - 2015-03-02 00:57:55]

折叠评论
加载评论中,请稍候...
折叠评论
25楼
引用 金坷居士:
不理解不敢用啊 神马变量溢出搞死泥 还有8位单片机算那么多float真的呆娇布?
在STM8上用过PID,float是比较慢,大约每秒可以执行几K次。。当我把PID做成整数版之后,每秒可以执行50K次了,精度有所下降,但是好用
折叠评论
加载评论中,请稍候...
折叠评论
26楼
推场管的话~~ 有必要用图腾柱么?记得场管用不着多大电流吧
折叠评论
加载评论中,请稍候...
折叠评论
2015-03-06 18:47:12
2015-3-6 18:47:12
27楼
单片机做的升压电路,这算不算高端大气上档次啊23333

ps:难道我要放弃学的一半的51。。。。。
折叠评论
加载评论中,请稍候...
折叠评论
2015-03-07 13:30:44
28楼
思路很好,如5v的电流不大,用单片升压ic最省事便宜
折叠评论
加载评论中,请稍候...
折叠评论
金坷居士(作者)
29楼
引用 fusecn:
单片机做的升压电路,这算不算高端大气上档次啊23333

ps:难道我要放弃学的一半的51。。。。。
51一样可以做的
折叠评论
加载评论中,请稍候...
折叠评论
2015-03-09 15:18:43
2015-3-9 15:18:43
30楼
东西真心好
折叠评论
加载评论中,请稍候...
折叠评论
2015-05-27 01:35:27
2015-5-27 1:35:27
31楼
Great! 输出电压范围是多少?
折叠评论
加载评论中,请稍候...
折叠评论
32楼
引用 1176764177:
翠翠你有pid的资料么这坑爹东西无法理解啊
位置式PID
typedef struct PID
{
int SetPoint; //  Desired Value
float Kp; //  Proportional Const
float Ki; //  Integral Const
float Kd; //  Derivative Const
int LastError; //
int SumError; //
} PID;
PID Servo_PID;


float PIDCalc( PID *pp, float NextPoint )
{
int32_t dError,Error;
  Error = NextPoint-pp->SetPoint; //
  pp->SumError += Error; //
  dError = Error-pp->LastError; //
  // pp->PrevError = pp->LastError; //
  pp->LastError = Error;
  return (pp->Kp * Error   //  P
          + pp->Ki * pp->SumError //I
          + pp->Kd * dError//    D
        );
}
折叠评论
加载评论中,请稍候...
折叠评论
33楼
引用 1176764177:
翠翠你有pid的资料么这坑爹东西无法理解啊
  增量式PID
err[0]=h_speed-speed;
carspeed=(int)((motor_i*err[0])+ (motor_p*(err[0]-err[1]))+(motor_d*(err[0]+err[2]-2*err[1])));
err[2]=err[1];
err[1]=err[0];
outpwm+=carspeed;
折叠评论
加载评论中,请稍候...
折叠评论
2015-05-28 13:14:56
34楼
引用 金坷仙:
增量式PID
err[0]=h_speed-speed;
carspeed=(int)((motor_i*err[0])+ (motor_p*(err[0]-err[1]))+(motor_d*(err[0]+err[2]-2*...
貌似就一个公式带进去出来就是调整量
折叠评论
加载评论中,请稍候...
折叠评论
2015-06-01 13:42:21
2015-6-1 13:42:21
金坷居士(作者)
35楼
引用 qd118:
思路很好,如5v的电流不大,用单片升压ic最省事便宜
单片机加点显示啊 电源管理啊神马的更方便
折叠评论
加载评论中,请稍候...
折叠评论
2016-01-23 20:48:42
2016-1-23 20:48:42
36楼
都是高手啊
折叠评论
加载评论中,请稍候...
折叠评论
2016-01-25 22:04:01
2016-1-25 22:04:01
37楼
xiexie
折叠评论
加载评论中,请稍候...
折叠评论
2018-08-04 19:26:33
2018-8-4 19:26:33
38楼

这个帖子有意思,标注一下

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

金坷居士
学者 机友 笔友
文章
171
回复
1711
学术分
11
2011/09/23注册,14 天前活动

怪哉!灵异的三极管电流流向! 这素一个在仿真的RCC电路,示波器上绿色的是集电极电流红色的是发射极电流。窝萌都知道发射姬电流素集电极电流和基极电流之和,所以讲道理发射极电流一定比集电极略大。可仿真结果刷了三观,Q1集电极电流一部分流经基极,然后流经Q2的C->E。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png