欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
HLW8012的STM32單片機(jī)源碼-pfc功率因數(shù)測(cè)試制作及固件下載
[打印本頁]
作者:
清流水銀
時(shí)間:
2017-9-3 08:41
標(biāo)題:
HLW8012的STM32單片機(jī)源碼-pfc功率因數(shù)測(cè)試制作及固件下載
基于HLW8012芯片的pfc功率因數(shù)測(cè)試儀制作資料,下面是stm32工程元源碼.
0.png
(39.46 KB, 下載次數(shù): 149)
下載附件
2017-9-3 15:54 上傳
單片機(jī)源程序如下:
#include "stm32_usart.h"
#include "stm32_delay.h"
#include "stm32_led.h"
#include "stm32_key.h"
#include "sys.h"
#include "stm32_oled.h"
#include "stm32_timer.h"
char tempStr[30];
int tempStrLen;
int tempI;
float hlw8012_f;
float hlw8012_P;
float hlw8012_Pp = 103.5 / 21.6;
extern recType tRecType;
u32 countTotal;
float hlw8012_f;
u32 freq_arr;
#define CNT_TO_US(cnt) (u32)((cnt + (TIM4_FREQ / 2000000)) / (TIM4_FREQ / 1000000) ) // 獲取周期 ((cnt + 36) / 72) (cnt / 72) 四舍五入 u16 or u32
#define CNT_TO_FREQ(cnt) (u32)((TIM1_FREQ + (cnt / 2 )) / cnt ) // 獲取頻率 (72000000 / cnt) 四舍五入 u32
#define FREQ_TO_CNT(freq) (u32)((TIM1_FREQ + (freq / 2 )) / freq ) // 獲取計(jì)數(shù)值 (72000000 / freq) 四舍五入 u32
#define US_TO_CNT(us) (u32)((TIM1_FREQ / 1000000) * us ) // 獲取技術(shù)值 (72 * us) u32
#define U16_TO_U32(H, L) (u32)((u32)(H << 16) + L)
unsigned char data_check (recType *pRec, float *modePow);
int main(void)
{
float Pow_mode;
delay_init(); //延時(shí)初始化
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(115200);
keyInit();
OLED_Init();
LED_Init();
TIM3_Int_Init(5000, 7200-1);
OLED_Clear();
// OLED_ShowString(10 * 8,6," KEY ");
OLED_ShowCHinese(28 + 0,0,0);
OLED_ShowCHinese(28 + 16,0,1);
OLED_ShowCHinese(28 + 32,0,2);
OLED_ShowCHinese(28 + 48,0,3);
// //OLED_ShowString(0,3," www.szlcsc.com");
// OLED_ShowString(16,6,"1234");
TIM1_Cap_Init(65536 - 1, TIM1_PSC);
RCC_ClocksTypeDef RCC_ClocksStatus;
RCC_GetClocksFreq(&RCC_ClocksStatus);
printf("SYSCLK_Frequency: %d Hz\r\n", RCC_ClocksStatus.SYSCLK_Frequency);
printf("HCLK_Frequency: %d Hz\r\n", RCC_ClocksStatus.HCLK_Frequency);
printf("PCLK1_Frequency: %d Hz\r\n", RCC_ClocksStatus.PCLK1_Frequency);
printf("PCLK2_Frequency: %d Hz\r\n", RCC_ClocksStatus.PCLK2_Frequency);
while(1) {
TIM1->SR = (uint16_t)~TIM_IT_CC1; // 清中斷
TIM1->SR = (uint16_t)~TIM_IT_Update; // 清中斷
TIM_ITConfig(TIM1, TIM_IT_Update | TIM_IT_CC1, ENABLE);
TIM_Cmd(TIM1, ENABLE);
// 捕捉超過3秒
if ((tRecType.currOverCnt > (TIM1_FREQ / 65536) * 3) || (tRecType.size > 10)) {
TIM_ITConfig(TIM1, TIM_IT_Update | TIM_IT_CC1, DISABLE);
TIM_Cmd(TIM1, DISABLE);
data_check(&tRecType, &Pow_mode);
tRecType.size = 0;
tRecType.currOverCnt = 0;
if (Pow_mode > 5)
showPower(1, Pow_mode);
else
showPower(1, 20000);
}
}
return 1;
}
//u32 mYverage (u) 遞歸法:假設(shè)前n個(gè)數(shù)的平均數(shù)為avg, 那么前n+1個(gè)數(shù)的平均數(shù)avg = ((avg * n) + X) / (n + 1) = avg - avg / (n + 1) + X / (n + 1) = avg + (X - avg) / (n + 1)
float mYverage (float avg, float X, u32 n)
{
if (n == 0) {
return 0;
} else if (n == 1) {
return X;
} else if (n > 1) {
if (X > avg) {
return (avg + (X - avg) / n);
} else {
return (avg - (avg - X) / n);
}
} else {
return 0;
}
}
unsigned char data_check (recType *pRec, float *modePow)
{
unsigned char ret = 1;
float fAvg;
u32 u32Temp1, u32Temp2;
u16 i = 0, j = 0;
if (pRec->size == 0 || pRec->size == 1) { // 不夠1Hz
*modePow = 0;
ret = 0;
goto end;
}
// 矯正 數(shù)據(jù)中 溢出中斷 與 捕獲中斷 并發(fā) 造成的 溢出數(shù)據(jù)(overCnt) 順序混亂的情況
for (i = 0; i < pRec->size; i++) {
if (pRec->overCnt[i] == pRec->overCnt[i + 1]) {
if (pRec->cnt[i] > pRec->cnt[i + 1]) { // 后面的數(shù)據(jù)小于前面的數(shù)據(jù)--這種情況不應(yīng)該發(fā)生
pRec->overCnt[i + 1]++;
}
}
}
// 將 數(shù)據(jù) 由 絕對(duì)值 換算為 相對(duì)值
for (i = 0; i < pRec->size - 1; i++) {
u32Temp1 = U16_TO_U32(pRec->overCnt[i + 0], pRec->cnt[i + 0]);
u32Temp2 = U16_TO_U32(pRec->overCnt[i + 1], pRec->cnt[i + 1]);
pRec->overCnt[i] = (u16)((u32Temp2 - u32Temp1) >> 16);
pRec->cnt[i] = (u16)((u32Temp2 - u32Temp1) >> 0);
}
pRec->size -= 1; // 數(shù)量減一
// 刪除 波形中 的高頻毛刺
for (i = 0; i < pRec->size; i++) {
u32Temp1 = U16_TO_U32(pRec->overCnt[i], pRec->cnt[i]);
if (CNT_TO_FREQ(u32Temp1) > 100000) { // TIM1_FREQ / 100KHz = 720 過濾掉>100KHz的波形
for (j = i; j < pRec->size - 1; j++) {
pRec->overCnt[j] = pRec->overCnt[j + 1];
pRec->cnt[j] = pRec->cnt[j + 1];
}
pRec->size--;
}
}
// 將 高頻數(shù)據(jù) 整合在一起 求平均
fAvg = 0;
for (i = 0; i < pRec->size; i++) {
u32Temp1 = U16_TO_U32(pRec->overCnt[i], pRec->cnt[i]);
fAvg = mYverage(fAvg, (float)u32Temp1, i + 1);
}
*modePow = hlw8012_Pp * CNT_TO_FREQ((u32)fAvg); // 計(jì)算功率
/********************************打印數(shù)據(jù)************************************************/
tempStrLen = sprintf(tempStr,"%f", *modePow);
txNByte(USART1, tempStr, tempStrLen);
txStr(USART1, "w\r\n");
/********************************打印數(shù)據(jù)************************************************/
end:
return ret;
}
復(fù)制代碼
所有資料51hei提供下載:
單片機(jī)源碼及固件下載.zip
(3.99 MB, 下載次數(shù): 271)
2017-9-3 08:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
創(chuàng)業(yè)者聯(lián)盟
時(shí)間:
2017-9-7 10:25
頂一下
作者:
yunzhuxiao
時(shí)間:
2017-10-25 09:56
綁定
作者:
cdl511
時(shí)間:
2017-11-29 22:23
頂一下
作者:
SHAOLM
時(shí)間:
2017-12-1 09:00
扣了5個(gè)黑幣,但是下載文件不存在 ,暈
作者:
右走
時(shí)間:
2018-2-11 22:25
頂一下 正需要
作者:
wuguangyue
時(shí)間:
2018-3-23 14:59
我也想玩玩電功率表,有的資料分享一下,謝謝
作者:
kcgf
時(shí)間:
2018-5-10 14:35
不錯(cuò),支持~~
作者:
kcgf
時(shí)間:
2018-5-10 14:37
很好~想學(xué)習(xí)學(xué)習(xí),
作者:
ABCLSL
時(shí)間:
2018-7-18 09:45
鼎 頂起 !
作者:
jzzgb
時(shí)間:
2018-9-21 16:53
謝謝共享!資料很有學(xué)習(xí)價(jià)值!
作者:
cyllife
時(shí)間:
2019-1-19 17:17
謝謝分享!!
作者:
lionmon
時(shí)間:
2019-3-11 11:31
下載學(xué)習(xí)了,多謝分享
作者:
swap1
時(shí)間:
2019-4-15 15:45
不錯(cuò),支持~~
作者:
ydgzuishuai
時(shí)間:
2019-7-19 11:39
這個(gè)東西很有用哈哈哈哈
作者:
2893068776
時(shí)間:
2019-8-3 10:30
特別好用!!!
作者:
jims9809303
時(shí)間:
2020-10-15 18:29
這樣計(jì)算電功率和電壓,電流,不知道準(zhǔn)不準(zhǔn)?
作者:
mhse
時(shí)間:
2021-1-8 19:38
很好~想學(xué)習(xí)學(xué)習(xí)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1