最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

手寫STM32 FOC記錄-----pwm觸發(fā)adc電流采樣

2023-08-28 09:21 作者:茄子土豆地三鮮  | 我要投稿


PWM的配置詳見上一章節(jié)。

ADC配置需要使用 PWM 和 ADC 的同步機制,ADC 的采樣由 TIM1 的 CCR4在 0 矢量中心附近觸發(fā):

?

?

首先配置三相電流和母線電壓的ADC通道,此處根據(jù)硬件平臺原理圖去配置

?

?

?

然后是ADC基本配置

?

全部默認即可,說明一下,使用CubeMX配置ADC,使用注入組就用不到規(guī)則組。

?

?

這里配置比較關鍵,重點是以下幾項,詳細說明下:

Number Of Conversions :使用到注入組的通道個數(shù)3

External Trigger Source :外部觸發(fā)源,使用前邊說的定時器1的通道四作為觸發(fā)源。

External Trigger Edge :外部觸發(fā)極性,選擇下降沿

Injected Rank :這個就是注入序列,一旦ADC開始注入轉換,就會按照Rank1-2-3-4的順序依次進行采樣,每個rank只能選擇一個對應的通道。每個通道對應ADC輸入引腳

Sampling Time :采樣時間,因為foc電流采樣是一個分秒必爭的過程,所以采樣時間盡可能的要短。

其他配置均默認即可。

?

最后配置一個測試IO口,每次AD采集就翻轉一下IO狀態(tài),便于使用示波器測試ADC的采樣時間點。CubeMX生成代碼。

?

? 還是跟上一章節(jié)一樣,做一個測試文件,將要測試的模塊都在測試文件中實現(xiàn),在主函數(shù)中調用需要測試的模塊即可。在測試文件中添加test_PWM_ADC_init,主函數(shù)調用

?void test_PWM_ADC_init(void)??

{

?

?HAL_TIM_Base_Start(&htim1);

?HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);

?HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);

?HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);

?HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);


?HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);

?HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);

?HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);


__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0.2*PWM_PERIOD);

__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0.2*PWM_PERIOD);

__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0);


HAL_ADCEx_InjectedStart(&hadc1);

HAL_ADCEx_InjectedStart(&hadc2);

__HAL_ADC_ENABLE_IT(&hadc1, ADC_IT_JEOC);

__HAL_ADC_ENABLE_IT(&hadc2, ADC_IT_JEOC);


__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);

__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_4,PWM_PERIOD-1); ?//TIM1通道4的PWM配置 ?關聯(lián)ADC采樣時間 // 在PWM波的正中間采樣

}

?

在中斷文件stm32g4xx_it.c中ADC1_2_IRQHandler處添加測試引腳翻轉函數(shù),測試ADC的采樣時間點

?

完成以上操作之后,就可以下載到板子中測試了。測試方法是,使用三根示波器表筆,分別接一路PWM,PWMN,TEST_PIN,波形顯示如下圖:

?

上圖中,黃線是PWM,藍線為PWMN,紫線為測試引腳波形??梢钥闯?,ADC 中斷采樣周期和 PWM 周期一致。

  最后一步就是測試ADC是否配置成功,看看ADC能否采集到數(shù)據(jù)。

?

uint16_t PA1_adc_value,PB11_adc_value,PA0_adc_value,PA7_adc_value;

void test_get_ADC_value(void)

{

PA1_adc_value = HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_RANK_1);

PB11_adc_value = HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_RANK_2);

PA0_adc_value = HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_RANK_3);

PA7_adc_value = HAL_ADCEx_InjectedGetValue(&hadc2,ADC_INJECTED_RANK_1);

?

}

編寫測試接口函數(shù)test_get_ADC_value,將其放到中斷文件stm32g4xx_it.c中ADC1_2_IRQHandler處調用。

?

?

仿真看看讀取到的變量結果,如果我們將這個通道連接到VCC,數(shù)據(jù)會變成0x0FFF左右,接到GND,數(shù)據(jù)變成0x0000。

?


以上工程源代碼,包括cubemx 生成的ioc文件都可以開源,有需要的小伙伴記得點贊之后私信喲


手寫STM32 FOC記錄-----pwm觸發(fā)adc電流采樣的評論 (共 條)

分享到微博請遵守國家法律
洛宁县| 五家渠市| 左贡县| 镇赉县| 永吉县| 桐梓县| 错那县| 桐城市| 双江| 华亭县| 宁城县| 友谊县| 简阳市| 昂仁县| 晴隆县| 八宿县| 十堰市| 汕尾市| 肇东市| 南平市| 民乐县| 来安县| 隆子县| 板桥市| 五峰| 英德市| 昌乐县| 茂名市| 嘉黎县| 灵丘县| 谢通门县| 北宁市| 墨玉县| 巫溪县| 观塘区| 洱源县| 合水县| 论坛| 龙南县| 虹口区| 阳西县|