日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]stm32f103vb發(fā)出邏輯信號給MOC3020,控制BTA16可控硅的通斷。在檢測到過零信號時,延時x毫秒,輸出1;延時y毫秒,關閉輸出。 實現(xiàn)相位控制調(diào)速感應電機(小功率)。在stm32 discovery開發(fā)板上,使用藍燈和綠燈模擬。

stm32f103vb發(fā)出邏輯信號給MOC3020,控制BTA16可控硅的通斷。

在檢測到過零信號時,延時x毫秒,輸出1;延時y毫秒,關閉輸出。 實現(xiàn)相位控制調(diào)速感應電機(小功率)。



在stm32 discovery開發(fā)板上,使用藍燈和綠燈模擬。


采用定時器的OC,比較輸出來做。

選用VBT6的一個Timer來做,它有4個通道可以使用,可以拿來控制4路可控硅輸出。


使用CubeMX做外設配置。

針腳配置:


這樣不把輸出直接發(fā)送到Pin上。 能直接發(fā)送到Pin上,使用One Pulse Mode 比較方便。 受限于委托公司的設計限制,沒法使用脈沖模式。


注意Prescaler的值, 值 = 時鐘頻率/1000 - 1, 及為1ms.

Pulse 值,表示計數(shù)器到達多少時,做輸出,觸發(fā)中斷。


中斷需要啟用。


使用按鍵來觸發(fā)定時器,啟用兩個通道,這里簡單使用延時來按鍵消抖,可以使用狀態(tài)機處理:


if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET){

HAL_Delay(20);

if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET){

//strattimer

__HAL_TIM_SET_COUNTER(&htim2,0);//設置0

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1);

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_2);

}

}


定義兩個flag:


__IOuint8_ton_led_blue=0;

__IOuint8_ton_led_green=0;


在回調(diào)函數(shù)處理:


voidHAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef*htim)

{

if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)

{

if(!on_led_blue){

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);

on_led_blue=1;

HAL_TIM_OC_Stop_IT(&htim2,TIM_CHANNEL_1);

//設置新的時間

uint16_tdelay_new=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,delay_new+1999);

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1);

}

elseif(on_led_blue){

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);

on_led_blue=0;

HAL_TIM_OC_Stop_IT(&htim2,TIM_CHANNEL_1);

}

}

if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)

{

if(!on_led_green){

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);#define__HAL_TIM_SET_COMPARE(__HANDLE__,

__CHANNEL__,

__COMPARE__

)

on_led_green=1;

HAL_TIM_OC_Stop_IT(&htim2,TIM_CHANNEL_2);

//設置新的時間

uint16_tdelay_new=__HAL_TIM_GET_COUNTER(&htim2,TIM_CHANNEL_2);

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,delay_new+1999);

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_2);

}

elseif(on_led_green){

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);

on_led_green=0;

HAL_TIM_OC_Stop_IT(&htim2,TIM_CHANNEL_2);

}

}

}


使用flag來區(qū)別HAL_TIM_ActiveChannel是 delay_on,還是delay_off。



#define __HAL_TIM_SET_COMPARE ( __HANDLE__,
__CHANNEL__,
__COMPARE__
)

這個宏可以方便的Sets the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.


效果表現(xiàn)為:

按鍵按下,藍燈3秒亮,2秒后滅;綠燈5秒后亮,2秒后滅。


總之,使用Timer的輸出Pin接Moc3020,脈沖方式是最省事省心的做法。

而其他Pin的話,只能這里使用一個替代的方法來實現(xiàn)。


本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉