STM8单片机制作的3-4V升5V的Boost电路
金坷居士2014/10/15电气电工 IP:澳大利亚

上大学之后忙成了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得从小往大调,保证不震荡的情况下最快速调节就好,程序里面的没有什么问题了

最后发资料包:

attachment icon MobileCharger.zip 524.51KB ZIP 197次下载
哦对了,如果要测试的话需要把STM8S103F的OptionalByte修改下,OptionalByte掌控IO口的功能复用,具体的操作如下:
在STVD中点Tools菜单中的Programmer,然后按如下设置
OB.png
再去Memory Areas选项卡,把Memory Area下面的选择框选成PROGRAM MEMORY,再点Add把Debug文件夹中的proj.s19文件装进来,最后去Program页面点Start,如果没看到红字,就完成了!

最后发福利(雾
53e130adcbef7609b07db61f2edda3cc7dd99ed5.jpg
来自:电气工程 / 电气电工
39
 
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
奶酪
9年6个月前 IP:上海
726452
先顶翠翠~
但是这货用单片机,是不是显得有些浪费呢~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
坚持and突破
9年6个月前 IP:河北
726453
引用 奶酪:
先顶翠翠~
但是这货用单片机,是不是显得有些浪费呢~
这么低的电压下,是不是专用IC比这个STM8单片机更贵.......
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
9年6个月前 IP:北京
726463
引用 坚持and突破:
这么低的电压下,是不是专用IC比这个STM8单片机更贵.......
专用的便宜吧而且效率高
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
9年6个月前 IP:北京
726464
翠翠你有pid的资料么这坑爹东西无法理解啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
最高主机泡泡
9年6个月前 IP:天津
726468
STM8这性价比也真是快疯了。。这么小的封装里集成了这么一大堆功能。。而且只要一两块钱。。简直丧心病狂,感觉在性价比上AVR都快被秒杀了
PID这玩意真是难以理解。。果然只要一提到算法就脑袋疼。。理解无力QAQ。。话说直接用采样来的电压和基准电压做比较来控制PWM不可行么?
最后,LZ发个⑨福利啊@¥@!~¥#¥%¥……%&……¥%……%#¥%[s::Q]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
9年6个月前 IP:广东
726469
首先,STM8可以推挽输出,电流>20毫安,没有使用图腾柱的必要。图腾柱导致实际驱动电压摆幅偏低,开关性能变差。

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

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

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

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

IAR编译器确实更好,工具链自动化程度更高,是真话。做这种对速度要求高的应用,没有好的编译器是不适合的,除非是ASM党。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
.........
9年6个月前 IP:江西
726570
引用 1176764177:
哎我没学过微积分
技校伤不起啊
我现在还在脑补高中数学
你就把它看成一个函数嘛,函数声明假设是这样的:
float pidUpdata(float sample, float kp, float ki, float kd)
{
     .....
     return result;
}

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

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

反正天底下的PID都是一样的,把别人的PID函数拿过来用就是了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
9年6个月前 IP:北京
726589
给个建议。低压下二极管压降明显,非常影响效率。
建议改成同步整流,用单片机编写非常方便
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
9年6个月前 IP:北京
726618
引用 .........:
你就把它看成一个函数嘛,函数声明假设是这样的:
float pidUpdata(float sample, float kp, float ki, float kd)
{
     .....
     return result;
}

...
不理解怎么做的就不敢用这是强迫症么。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士作者
9年6个月前 IP:澳大利亚
726695
引用 novakon:
首先,STM8可以推挽输出,电流>20毫安,没有使用图腾柱的必要。图腾柱导致实际驱动电压摆幅偏低,开关性能变差。

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

...
不理解不敢用啊 神马变量溢出搞死泥 还有8位单片机算那么多float真的呆娇布?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士作者
9年6个月前 IP:澳大利亚
726700
引用 justinpiggy:
给个建议。低压下二极管压降明显,非常影响效率。
建议改成同步整流,用单片机编写非常方便
这个单片机同时提供了反向的PWM信号输出 可用于控制整流的mos 不过这里做实验就没加同步整流
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wwwajjlcn
9年2个月前 修改于 9年2个月前 IP:广东
753423
引用 金坷居士:
1. PWM输出那个脚已经素推挽了 20mA 推mos太勉强了
XXXXap那个电压 真的不随供电电压改变么
从百度路过,我也来多嘴一下,推挽一个脚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外设一次只能控制一只脚。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wwwajjlcn
9年2个月前 IP:广东
753425
引用 金坷居士:
不理解不敢用啊 神马变量溢出搞死泥 还有8位单片机算那么多float真的呆娇布?
在STM8上用过PID,float是比较慢,大约每秒可以执行几K次。。当我把PID做成整数版之后,每秒可以执行50K次了,精度有所下降,但是好用
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuchouxuan
9年2个月前 IP:河北
753473
推场管的话~~ 有必要用图腾柱么?记得场管用不着多大电流吧
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
fusecn
9年2个月前 IP:云南
754503
单片机做的升压电路,这算不算高端大气上档次啊23333

ps:难道我要放弃学的一半的51。。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
qd118
9年1个月前 IP:广东
754652
思路很好,如5v的电流不大,用单片升压ic最省事便宜
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士作者
9年1个月前 IP:澳大利亚
754699
引用 fusecn:
单片机做的升压电路,这算不算高端大气上档次啊23333

ps:难道我要放弃学的一半的51。。。。。
51一样可以做的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
delay
9年1个月前 IP:湖北
755104
东西真心好
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mikewen
8年11个月前 IP:加拿大
770790
Great! 输出电压范围是多少?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷仙
8年11个月前 IP:湖南
770893
引用 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
        );
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷仙
8年11个月前 IP:湖南
770894
引用 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;
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
8年11个月前 IP:北京
770938
引用 金坷仙:
增量式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*...
貌似就一个公式带进去出来就是调整量
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士作者
8年11个月前 IP:澳大利亚
771396
引用 qd118:
思路很好,如5v的电流不大,用单片升压ic最省事便宜
单片机加点显示啊 电源管理啊神马的更方便
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yangaa17
8年3个月前 IP:浙江
805469
都是高手啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhangqc318
8年3个月前 IP:浙江
805804
xiexie
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ldch
5年8个月前 IP:山东
848996

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
所属分类
上级专业
同级专业
金坷居士
学者 机友 笔友
文章
170
回复
1711
学术分
11
2011/09/23注册,1个月9天前活动

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

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}