久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3966|回復: 5
打印 上一主題 下一主題
收起左側

STM32F4單片機主從定時器是否能分別同時控制三個通道輸出不同頻率PWM信號?

[復制鏈接]
跳轉到指定樓層
樓主
ID:8840 發表于 2021-9-7 23:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
最近在使用STM32F4系列單片機來控制三軸步進電機運動。想用定時器3和定時器4做主從模式控制定時器3的三個通道分別輸出不同頻率的PWM及精準脈沖數的控制信號。但是對主從控制模式還不太了解,想請教下各位有用過主從模式控制步進電機的大佬們,這樣的方式能實現嗎,謝謝!如果可以實現這個功能,針對各個通道的獨立開啟和關閉PWM輸出是使用TIM_ITConfig(TIMx,TIM_IT_CCx,DISABLE);這個函數來執行嗎?
另外,幫忙看下void Pulse_output(u32 Cycle, u32 PulseNum)這個函數要怎么調整才能實現各個通道獨立設置頻率和脈沖數的值,謝謝!


// 定時器3 主定時器
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;               // 設置時鐘分頻系數:不分頻           
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          // 向上計數模式  
        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);        // 設置定時器3為主定時器模式
        TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);                   // 選擇觸發模式
      
        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 從定時器
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;                                  //設置從模式寄存器  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);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:891041 發表于 2021-9-8 20:00 | 只看該作者
你是要同時輸出三路么。 如果是同時而且不同頻率 我推薦用三個定時器。用單脈沖模式 配合RCR就行了。
回復

使用道具 舉報

板凳
ID:8840 發表于 2021-9-8 22:02 | 只看該作者
abob 發表于 2021-9-8 20:00
你是要同時輸出三路么。 如果是同時而且不同頻率 我推薦用三個定時器。用單脈沖模式 配合RCR就行了。

謝謝你的回復,是需要輸出三路不同頻率和脈沖數的PWM信號來控制三個步進電機,因為程序除了電機控制還有其他的數據運算,包括S型加減速處理,與上位機實時數據通訊及傳感器檢測等需要處理,想用主從模式減少電機控制對內存的消耗的。之前就是采用三個獨立的定時器分別控制的。
回復

使用道具 舉報

地板
ID:307171 發表于 2023-8-14 19:31 | 只看該作者
您好,使用一個定時器的多個通道可以產生不同頻率的脈沖,就是用比較匹配翻轉模式,并且需要開啟中斷,比較匹配發生后,進入中斷處理程序,在其中更新該通道的比較寄存器值即可。

實際上我是來問問題的,以上這種方式的確可以實現一個定時器多個通道不同頻率脈沖,但在我實際使用中,發現會有通道丟失現象,原因還不清楚,請問您現在使用什么方式驅動的?
回復

使用道具 舉報

5#
ID:752974 發表于 2023-8-15 08:33 | 只看該作者
要想輸出不同頻率的PWM,必須用多個定時器;一個定時器可以輸出多個PWM,但這幾個PWM只能是同頻的。
回復

使用道具 舉報

6#
ID:1040201 發表于 2023-8-16 10:22 | 只看該作者
用一個基本定時器  3個IO口模擬PWM呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品鲁一区一区二区 | 国产视频91在线 | 精品美女久久久 | 91久久久久久久久久久 | 中文字幕不卡在线88 | 国产电影一区二区 | 视频一区二区中文字幕日韩 | 九九亚洲精品 | 国产精品自产av一区二区三区 | 91麻豆精品国产91久久久久久 | 日韩免费一级 | 免费国产一区二区 | 中文字幕亚洲国产 | 视频一区 亚洲 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | av国产精品 | 午夜精品一区二区三区免费视频 | 成人毛片网站 | 秋霞电影一区二区 | 成人黄色在线 | 国产一级一级 | 区一区二区三在线观看 | 91综合在线视频 | 日韩欧美国产精品 | 91麻豆精品国产91久久久资源速度 | 8x国产精品视频一区二区 | 久久精品一区 | 久久久久久久91 | 国产福利91精品 | 中文字幕一区二区三区在线观看 | 日韩欧美亚洲 | 欧美黄色录像 | 久久久精品网站 | 欧美一级片在线 | 天天操夜夜操 | 免费一级片| 91精品国产一区二区三区香蕉 | 国产乱码精品一区二区三区忘忧草 | 久久国产精品99久久久大便 | 欧美精品久久久 | 成人网av|