項目需求:利用PWM產(chǎn)生加熱信號,需要在PWM低信號時采集AD值
代碼實現(xiàn)部分:
#define heat_det1_open GPIO_SetBits(GPIOB,GPIO_Pin_12) //引腳PB12打開
#define heat_det1_close GPIO_ResetBits(GPIOB,GPIO_Pin_12) //引腳PB12關(guān)閉
#define heat_det2_open GPIO_SetBits(GPIOB,GPIO_Pin_13) //引腳PB13打開
#define heat_det2_close GPIO_ResetBits(GPIOB,GPIO_Pin_13) //引腳PB13關(guān)閉
/******************************************************************************
* 負 責 人 : ***
* 函數(shù)功能 :控制PB12,PB13開啟與關(guān)閉進行采集
******************************************************************************/
void heat_std_en()
{
heat_det1_open;
heat_det2_open;
}
void heat_std_disen()
{
heat_det1_close;
heat_det2_close;
}
/******************************************************************************
* 負 責 人 : ***
******************************************************************************/
double get_Pt_res()
{
heat_std_en(); //使能det1與det2
delay_us(5300); //防電壓抖動延時
get_val.ad1 = pm_get_adc(AD1Chn);
delay_us(50);
get_val.ad2 = pm_get_adc(AD2Chn);
delay_us(50);
get_val.ad3 = pm_get_adc(AD3Chn);
delay_us(50);
測試發(fā)現(xiàn),這里牽扯到一個問題,底層的函數(shù)調(diào)用和上層邏輯代碼互用,而且存在 一個誤區(qū),ad采集的時間與ad采樣以及時間延時的時間誤差,加上本身跑的是裸機跑的系統(tǒng),系統(tǒng)函數(shù) 調(diào)用過程產(chǎn)生的時間差導(dǎo)致函數(shù)在ad采集過程中達不到想要的采集效果,雙線程同樣給存在調(diào)度問題,因此雙線程(1個產(chǎn)生PWM,1個用來檢測引腳高低電平采集)這種方法在調(diào)度上和時間上存在誤差。
解決方案:
重新開啟一個定時器,在PWM開啟時同時是開啟,在PWM的低電平通過定時器的時間開始采集AD即可。
審核編輯:湯梓紅
-
PWM
+關(guān)注
關(guān)注
116文章
5364瀏覽量
218007 -
AD
+關(guān)注
關(guān)注
28文章
873瀏覽量
151429 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64170
發(fā)布評論請先 登錄
CAN發(fā)送的底層邏輯:CANwrite函數(shù)機制介紹

為什么底層函數(shù)里面有7個呢?
淺析回調(diào)函數(shù)
為什么不能將新舊電池、不同型號電池混用?
應(yīng)用程序調(diào)用底層驅(qū)動
驅(qū)動之路-設(shè)備模型之上層模型

手機充電器可以混用嗎
錫膏混用,哪些情況要命,哪些情況可救?一文說透混用紅線

評論