欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STM32F4單片機(jī)主從定時(shí)器是否能分別同時(shí)控制三個(gè)通道輸出不同頻率PWM信號(hào)? [打印本頁]

作者: 兵臨天下    時(shí)間: 2021-9-7 23:42
標(biāo)題: STM32F4單片機(jī)主從定時(shí)器是否能分別同時(shí)控制三個(gè)通道輸出不同頻率PWM信號(hào)?
最近在使用STM32F4系列單片機(jī)來控制三軸步進(jìn)電機(jī)運(yùn)動(dòng)。想用定時(shí)器3和定時(shí)器4做主從模式控制定時(shí)器3的三個(gè)通道分別輸出不同頻率的PWM及精準(zhǔn)脈沖數(shù)的控制信號(hào)。但是對(duì)主從控制模式還不太了解,想請(qǐng)教下各位有用過主從模式控制步進(jìn)電機(jī)的大佬們,這樣的方式能實(shí)現(xiàn)嗎,謝謝!如果可以實(shí)現(xiàn)這個(gè)功能,針對(duì)各個(gè)通道的獨(dú)立開啟和關(guān)閉PWM輸出是使用TIM_ITConfig(TIMx,TIM_IT_CCx,DISABLE);這個(gè)函數(shù)來執(zhí)行嗎?
另外,幫忙看下void Pulse_output(u32 Cycle, u32 PulseNum)這個(gè)函數(shù)要怎么調(diào)整才能實(shí)現(xiàn)各個(gè)通道獨(dú)立設(shè)置頻率和脈沖數(shù)的值,謝謝!


// 定時(shí)器3 主定時(shí)器
void TIM3_Mode_Config(u32 cycle)
{
        TIM_TimeBaseInitTypeDef          TIM_TimeBaseStructure;        
        TIM_OCInitTypeDef                          TIM_OCInitStructure;   
        NVIC_InitTypeDef                         NVIC_InitStructure;      
      
        SET_GPIO_AF_OUTPUT(GPIOC, GPIO_Pin_6);   
        SET_GPIO_AF_OUTPUT(GPIOC, GPIO_Pin_7);
        SET_GPIO_AF_OUTPUT(GPIOC, GPIO_Pin_8);      
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3);
      
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

        TIM_TimeBaseStructure.TIM_Period = cycle - 1;
        TIM_TimeBaseStructure.TIM_Prescaler = 83;            
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;               // 設(shè)置時(shí)鐘分頻系數(shù):不分頻           
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          // 向上計(jì)數(shù)模式  
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);               


        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   
        TIM_OCInitStructure.TIM_Pulse = (cycle + 1)/2;
      
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
        TIM_OC3Init(TIM3, &TIM_OCInitStructure)
      
        TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);        // 設(shè)置定時(shí)器3為主定時(shí)器模式
        TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);                   // 選擇觸發(fā)模式
      
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);                                 // 通道1使能
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);                                 // 通道2使能
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);                                 // 通道3使能
      
        TIM_ARRPreloadConfig(TIM3, ENABLE);

}

//TIM4 從定時(shí)器
void TIM4_config(u32 PulseNum)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

        TIM_TimeBaseStructure.TIM_Period = PulseNum-1;   
        TIM_TimeBaseStructure.TIM_Prescaler =0;   
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;     
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);  

        TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2);
        TIM4->SMCR|=0x27;                                  //設(shè)置從模式寄存器  ITR2(TS=010)

        TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE);

        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;     
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
void Pulse_output(u32 Cycle, u32 PulseNum)
{
    TIM4_config(PulseNum);
    TIM_Cmd(TIM4, ENABLE);
    TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
    TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
    TIM3_Mode_Config(Cycle);
    TIM_Cmd(TIM3, ENABLE);
}

作者: abob    時(shí)間: 2021-9-8 20:00
你是要同時(shí)輸出三路么。 如果是同時(shí)而且不同頻率 我推薦用三個(gè)定時(shí)器。用單脈沖模式 配合RCR就行了。
作者: 兵臨天下    時(shí)間: 2021-9-8 22:02
abob 發(fā)表于 2021-9-8 20:00
你是要同時(shí)輸出三路么。 如果是同時(shí)而且不同頻率 我推薦用三個(gè)定時(shí)器。用單脈沖模式 配合RCR就行了。

謝謝你的回復(fù),是需要輸出三路不同頻率和脈沖數(shù)的PWM信號(hào)來控制三個(gè)步進(jìn)電機(jī),因?yàn)槌绦虺穗姍C(jī)控制還有其他的數(shù)據(jù)運(yùn)算,包括S型加減速處理,與上位機(jī)實(shí)時(shí)數(shù)據(jù)通訊及傳感器檢測(cè)等需要處理,想用主從模式減少電機(jī)控制對(duì)內(nèi)存的消耗的。之前就是采用三個(gè)獨(dú)立的定時(shí)器分別控制的。
作者: caiwen    時(shí)間: 2023-8-14 19:31
您好,使用一個(gè)定時(shí)器的多個(gè)通道可以產(chǎn)生不同頻率的脈沖,就是用比較匹配翻轉(zhuǎn)模式,并且需要開啟中斷,比較匹配發(fā)生后,進(jìn)入中斷處理程序,在其中更新該通道的比較寄存器值即可。

實(shí)際上我是來問問題的,以上這種方式的確可以實(shí)現(xiàn)一個(gè)定時(shí)器多個(gè)通道不同頻率脈沖,但在我實(shí)際使用中,發(fā)現(xiàn)會(huì)有通道丟失現(xiàn)象,原因還不清楚,請(qǐng)問您現(xiàn)在使用什么方式驅(qū)動(dòng)的?
作者: munuc_w    時(shí)間: 2023-8-15 08:33
要想輸出不同頻率的PWM,必須用多個(gè)定時(shí)器;一個(gè)定時(shí)器可以輸出多個(gè)PWM,但這幾個(gè)PWM只能是同頻的。
作者: liucan2020    時(shí)間: 2023-8-16 10:22
用一個(gè)基本定時(shí)器  3個(gè)IO口模擬PWM呢?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1