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

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

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

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



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


采用定時(shí)器的OC,比較輸出來(lái)做。

選用VBT6的一個(gè)Timer來(lái)做,它有4個(gè)通道可以使用,可以拿來(lái)控制4路可控硅輸出。


使用CubeMX做外設(shè)配置。

針腳配置:


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


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

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


中斷需要啟用。


使用按鍵來(lái)觸發(fā)定時(shí)器,啟用兩個(gè)通道,這里簡(jiǎn)單使用延時(shí)來(lái)按鍵消抖,可以使用狀態(tài)機(jī)處理:


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);//設(shè)置0

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1);

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_2);

}

}


定義兩個(gè)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);

//設(shè)置新的時(shí)間

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);

//設(shè)置新的時(shí)間

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來(lái)區(qū)別HAL_TIM_ActiveChannel是 delay_on,還是delay_off。



#define __HAL_TIM_SET_COMPARE ( __HANDLE__,
__CHANNEL__,
__COMPARE__
)

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


效果表現(xiàn)為:

按鍵按下,藍(lán)燈3秒亮,2秒后滅;綠燈5秒后亮,2秒后滅。


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

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


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