項目需求:利用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)閉
/******************************************************************************
* 負 責(zé) 人 : ***
* 函數(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;
}
/******************************************************************************
* 負 責(zé) 人 : ***
******************************************************************************/
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)注
114文章
5196瀏覽量
214402 -
AD
+關(guān)注
關(guān)注
27文章
868瀏覽量
150480 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4344瀏覽量
62820
發(fā)布評論請先 登錄
相關(guān)推薦
評論