欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
小白學stm32,利用pwm產生兩路pwm波,我總是發現有問題!
[打印本頁]
作者:
幸福小豬lu
時間:
2016-12-24 12:52
標題:
小白學stm32,利用pwm產生兩路pwm波,我總是發現有問題!
如題,我利用pwm波產生兩路的Pwm波去產生點擊的驅動信號,并且進行調速,但是呢你發現有很多的問題,希望高手解答,謝謝!
首先說明下我是用的正點原子的開發板調試的,程序也是用的他們的程序改的,但是我感覺這個pwm 并沒有按照我設定的調速,左右兩個輪子并不能實現獨立的改變占空比,如都是50%,或者一個50%一個40%然后一個遞減,實現轉彎之類的。代碼如下所示:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "timer.h"
u16 pwmval=0;
u16 pwmval1=0;
u8 change=1;
u8 change1=1;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
delay_init();
Timer3_Init(899,0,100,400);
while(1)
{
if(change) pwmval++;
else pwmval--;
delay_ms(10);
if(pwmval>200) change=0;
if(pwmval==0) change=1; //pwmval×÷ÎaÕ¼¿Õ±è
if(change1) pwmval1++;
else pwmval1--;
delay_ms(10);
if(pwmval1>200) change1=0;
if(pwmval1==0) change1=1;
TIM_SetCompare1(TIM3,pwmval1);
TIM_SetCompare2(TIM3,pwmval); //
}
}
復制代碼
timer.c
#include "timer.h"
#include "led.h"
void Timer3_Init(u16 arr, u16 psc,u16 CCR1,u16 CCR2)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定時器初始化結構體
GPIO_InitTypeDef GPIO_InitStruct; //IO初始化結構體
TIM_OCInitTypeDef TIM_OCInitStruct; //通道設置結構體
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //開啟定時器2時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); //開啟IO口時鐘和復用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); //開啟IO口
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); //定時器初始化
//TIM_Cmd(TIM3,ENABLE); //使能定時器2時鐘
/********************************************************************************8
一下為IO口的配置
*********************************************************************************/
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); //設置定時器3重映射
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct); //PA.6初始化,對應于定時器3通道1
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
//
// GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
// GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
// GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
// GPIO_Init(GPIOE,&GPIO_InitStruct);
/************************************************************************************
以下為通道相關設置
************************************************************************************/
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High; //高電平
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=CCR2;
TIM_OC2Init(TIM3,&TIM_OCInitStruct); //通道2初始化、
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High; //高電平
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=CCR1;
TIM_OC1Init(TIM3,&TIM_OCInitStruct); //通道1初始化、
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
// TIM_CtrlPWMOutputs(TIM3,ENABLE);
// TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_Cmd(TIM3,ENABLE); //使能定時器3時鐘
}
復制代碼
作者:
LanSeXinQing
時間:
2018-6-24 07:04
把 if(pwmval>200) change=0;
if(pwmval==0) change=1;
change改為pwmval試試
作者:
AugensternTerry
時間:
2020-7-26 12:08
老哥,這個問題你解決沒,我也有同樣的問題
作者:
yoxi
時間:
2020-7-26 16:09
你一方面用時基定時,同時又用延時來定時,不出現狀況才是奇跡
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1