找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1438|回复: 4
打印 上一主题 下一主题
收起左侧

求指导 STM32F407的PB8 舵机电源mos控制,输出pwm 1%占空比

[复制链接]
跳转到指定楼层
楼主
ID:809754 发表于 2021-6-10 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

输出频率,占空比可以达到缓慢上升
12V电压的目的

请求支援!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:809754 发表于 2021-6-10 17:01 | 只看该作者
pwm已经配置了 ,占空比不会设置
回复

使用道具 举报

板凳
ID:809754 发表于 2021-6-10 17:03 | 只看该作者
pwm已经配置好了,但是那个占空比不知道怎么弄
回复

使用道具 举报

地板
ID:809754 发表于 2021-6-10 17:10 | 只看该作者
求大神给点思路,我已经配置好了pwm
回复

使用道具 举报

5#
ID:809754 发表于 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;
}


我这个代码有什么问题吗   为什么我输出不了波形图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表