标题: 求指导 STM32F407的PB8 舵机电源mos控制,输出pwm 1%占空比 [打印本页]
作者: 运气仙君 时间: 2021-6-10 16:54
标题: 求指导 STM32F407的PB8 舵机电源mos控制,输出pwm 1%占空比
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家
输出频率,占空比可以达到缓慢上升12V电压的目的
请求支援!!
作者: 运气仙君 时间: 2021-6-10 17:01
pwm已经配置了 ,占空比不会设置
作者: 运气仙君 时间: 2021-6-10 17:03
pwm已经配置好了,但是那个占空比不知道怎么弄
作者: 运气仙君 时间: 2021-6-10 17:10
求大神给点思路,我已经配置好了pwm
作者: 运气仙君 时间: 2021-6-11 16:05
void PWM_TIM14_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO结构体设置
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定时器4结构体设置
TIM_OCInitTypeDef TIM_OCInitStruct; //定时器PWM结构体设置
//使能时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // 在PB8引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //初始化的复用功能(因为本引脚还要用到PWM输出功能)
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//复用映射到定时器4
GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM4);
//定时器4的配置
TIM_TimeBaseInitStruct.TIM_Period=1000-1; //重装载
TIM_TimeBaseInitStruct.TIM_Prescaler=8400-1; //预分频
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; //不分频
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式1,TIMx_CNT<TIMx_CCR1时为有效电平
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High; //输出极性为高
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStruct.TIM_Pulse=0; //设置比较寄存器的初值
TIM_OC1Init(TIM4,&TIM_OCInitStruct);
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); //使能预装载寄存器;
TIM_Cmd(TIM4,ENABLE);
}
/******************************************
*PB8定时器通道TIM4_CH3、TIM10_CH1(通用定时器)
*F407时钟频率=168MHZ
*
*******************************************/
void Pwm_Gpio_Voltage_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
u32 PrescalerValue = 0;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
/*GPIOB_Pin_8, TIM4_Channel2 PWM*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8
;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM4);//GPIOB_Pin8 TIM4_Ch3N,
TIM_DeInit(TIM4);
/* Compute the prescaler value */
PrescalerValue = (uint16_t) ((168000000/2) / 20000000) - 1;
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 1330*2;//指定下一次更新事件时要加载到活动自动重新加载寄存器中的周期值。
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel4 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; //指定要加载到捕获比较寄存器的脉冲值。此参数可以是介于0x0000和0xFFFF之间的数字
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
/* TIM4 enable counter */
TIM_Cmd(TIM4, ENABLE);
}
/******************************************
*函数功能: 改变PWM的占空比输出
*入口参数: 占空比的值
*返回值: 无
*******************************************/
void PWM_SET_Voltage(uint32_t VoltageValue)
{
TIM4->CCR2 = VoltageValue;
}
我这个代码有什么问题吗 为什么我输出不了波形图
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |