上大學(xué)之后忙成了Doge 很少來(lái)論壇轉(zhuǎn)悠最近稍微空閑于是就鼓搗了一個(gè)簡(jiǎn)易的升壓電路 可以用于移動(dòng)電源
STM8S103F3素一種TSSOP20封裝(很小的QwQ)的8位單片機(jī), 具有價(jià)格低|外設(shè)多|開(kāi)發(fā)方便(有固件庫(kù))以及寬工作電壓等優(yōu)點(diǎn),平均只要1塊多就能買(mǎi)一片的這貨里面有3個(gè)定時(shí)器,一個(gè)UART串口,一個(gè)I2C串口,一個(gè)SPI串口,一個(gè)10位16通道的高速ADC(由于封裝用不到16通道),還有看門(mén)Doge等, 幾乎每一個(gè)IO口都有自己的外部中斷, 內(nèi)部多個(gè)始終源,簡(jiǎn)直用不完的趕腳啊
這里暫時(shí)只用了兩個(gè)定時(shí)器和ADC:TIM1這個(gè)高級(jí)16位定時(shí)器用于產(chǎn)生固定頻率可變占空比的PWM波,通過(guò)一個(gè)引腳進(jìn)行輸出TIM4這個(gè)普通8位定時(shí)器用于隔一段時(shí)間進(jìn)行PI運(yùn)算從而穩(wěn)定輸出電壓ADC中的4通道(AIN4)用于檢測(cè)輸出電壓,而3通道(AIN3)用于提供一個(gè)參考電壓,約0.6-0.7V,這個(gè)電壓利用二極管正向?qū)▔航诞a(chǎn)生的
為什么還需要一個(gè)參考電壓呢? 因?yàn)锳DC出來(lái)的結(jié)果是一個(gè)整數(shù), 還需要乘以單片機(jī)電源電壓再除以2的10次放才是真正的電壓. 單片機(jī)的供電可能不穩(wěn)定, 如果沒(méi)有這個(gè)參考,那可能會(huì)造成輸出不穩(wěn)定.
下面是電路圖,非常簡(jiǎn)單沒(méi)有一個(gè)多余的原件哦:
程序方面的話也很簡(jiǎn)單, 就是配置好定時(shí)器TIM1 TIM4還有ADC即可, 然后在TIM4中定時(shí)運(yùn)行PID算法.
初始化TIM1, 由主時(shí)鐘直接驅(qū)動(dòng)不分頻, 把它弄成向上計(jì)數(shù)模式,
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, DUTYCYCLE_RESOLUTION, 0);
然后把輸出通道1配置成PWM模式,高電平有效,同時(shí)開(kāi)啟反向的輸出,可以給同步整流的管子用哦wTIM1_OC1Init (TIM1_OCMODE_PWM1,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_ENABLE,0,TIM1_OCPOLARITY_HIGH,TIM1_OCPOLARITY_HIGH,TIM1_OCIDLESTATE_RESET,TIM1_OCIDLESTATE_RESET);
啟動(dòng)定時(shí)器和PWM輸出
TIM1_CtrlPWMOutputs(ENABLE);
TIM1_Cmd(ENABLE);
設(shè)置占空比為1/320
TIM1_SetCompare1(1);
初始化TIM4, 由64次分頻的主時(shí)鐘驅(qū)動(dòng),當(dāng)計(jì)數(shù)到達(dá)255的時(shí)候觸發(fā)一次中斷
TIM4_TimeBaseInit(TIM4_PRESCALER_64, 0xFF);
上來(lái)就得觸發(fā)一次更新事件還有中斷,讓TIM4_PRESCALER_64這貨生效
TIM4_SetCounter(0xFF);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
開(kāi)總中斷
rim();
開(kāi)TIM4
TIM4_Cmd(ENABLE);
PWM的頻率素如何計(jì)算的:STM8中的主時(shí)鐘為16MHz, 內(nèi)置的, 本制作中讓STM8全速工作:CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);也就是說(shuō),驅(qū)動(dòng)TIM1的預(yù)分頻器的頻率為16MHz,然后窩沒(méi)讓它分頻,當(dāng)計(jì)數(shù)到320時(shí)自動(dòng)重裝計(jì)數(shù)器的值,也就是說(shuō)PWM頻率=16MHz/320=50KHz, PWM的分辨率為100/320%
PID素怎么擼的:PID素一種廣泛應(yīng)用的控制算法, 據(jù)說(shuō)其歷史有100多年了?(霧優(yōu)點(diǎn)素不需要建立復(fù)雜的數(shù)學(xué)模型, 世界上大部分PID控制器靠良好的P I D系數(shù)整定就能工作的很好這里只用到了PI,其實(shí)為了快速響應(yīng),還是應(yīng)該加上D的,不過(guò)窩時(shí)間少啪麻煩沒(méi)加, 有興趣的同學(xué)可以試試看Kp和Ki得從小往大調(diào),保證不震蕩的情況下最快速調(diào)節(jié)就好,程序里面的沒(méi)有什么問(wèn)題了
最后發(fā)資料包:
哦對(duì)了,如果要測(cè)試的話需要把STM8S103F的OptionalByte修改下,OptionalByte掌控IO口的功能復(fù)用,具體的操作如下:在STVD中點(diǎn)Tools菜單中的Programmer,然后按如下設(shè)置