野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8309|回复: 3

pwm电调控制电机输出的程序一直没反应

[复制链接]
发表于 2021-11-27 19:15:25 | 显示全部楼层 |阅读模式
3火花
不知道这部分代码为什么一直没有反应,还请各位大佬帮帮忙,实在找不到为什么没反应,去用l298n驱动一个接pa6一个接地连接普通的直流减速电机也没反应
使用的芯片是stm32f103c8t6,各位大佬帮帮孩子吧


#include "bsp_moto.h"
#include "systick.h"

//定义为脉冲宽度的比较
uint16_t CCR1_Val;
uint16_t CCR2_Val;

//对TIM3定时器的嵌套向量中断控制寄存器进行调配
static void NVIC_Configuration()
{
        //定义NVIC初始化结构体
        NVIC_InitTypeDef NVIC_InitStructer;
        //设置中断优先级分组
        NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1);
        //配置中断源,中断的抢占优先级子优先级和使能中断
        NVIC_InitStructer .NVIC_IRQChannel =TIM3_IRQn ;
        NVIC_InitStructer .NVIC_IRQChannelPreemptionPriority =1;
        NVIC_InitStructer .NVIC_IRQChannelSubPriority =2;
        NVIC_InitStructer .NVIC_IRQChannelCmd =ENABLE;
        //NVIC初始化
        NVIC_Init (&NVIC_InitStructer );
}


void TIM3_PWM_Init(uint16_t arr)
{
        GPIO_InitTypeDef GPIO_InitStructer;//pwm输出相关GPIO口的初始化结构体
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructer;//定时器时钟基初始化结构体
        TIM_OCInitTypeDef TIM_OCInitStructer;//定时器输出比较初始化结构体
       
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE);//打开定时器TIM3的时钟
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE);//打开PWM输出相关的GPIO口的时钟
       
        //TIM3输出比较通道1的GPIO口初始化
        GPIO_InitStructer .GPIO_Pin = GPIO_Pin_6 ;
        GPIO_InitStructer .GPIO_Mode = GPIO_Mode_AF_PP ;//我们使用的是GPIO口的默认复用功能
        GPIO_InitStructer .GPIO_Speed =GPIO_Speed_50MHz ;
        GPIO_Init (GPIOA ,&GPIO_InitStructer);       
        //TIM3输出比较通道2的GPIO口初始化
        GPIO_InitStructer .GPIO_Pin = GPIO_Pin_7 ;
        GPIO_InitStructer .GPIO_Mode = GPIO_Mode_AF_PP ;
        GPIO_InitStructer .GPIO_Speed =GPIO_Speed_50MHz ;
        GPIO_Init (GPIOA ,&GPIO_InitStructer);
       
        //配置定时器3时钟基的成员
        TIM_TimeBaseStructer .TIM_Prescaler =71;//预分频系数为71
        TIM_TimeBaseStructer .TIM_Period =arr ;//我们要设置的自动重装载寄存器的值,相当于PWM周期
        TIM_TimeBaseStructer .TIM_CounterMode =TIM_CounterMode_Up ;//向上计数模式
        TIM_TimeBaseStructer .TIM_ClockDivision =0;//不对时钟进行分频
//TIM_TimeBaseStructer .TIM_RepetitionCounter =0;  高级定时器的功能,用于控制PWM个数
        TIM_TimeBaseInit(TIM3 ,&TIM_TimeBaseStructer );//对时钟基进行初始化
        TIM_ITConfig (TIM3 ,TIM_IT_Update ,ENABLE );//使能TIM3的定时器中断
       
        //配置定时器3输出比较控制寄存器1初始化结构体的成员
        TIM_OCInitStructer.TIM_OCMode = TIM_OCMode_PWM1 ;                // 配置为PWM模式1
        TIM_OCInitStructer.TIM_OutputState = TIM_OutputState_Enable;        // 输出使能
        TIM_OCInitStructer.TIM_OCPolarity = TIM_OCPolarity_High;        // 输出通道电平极性配置       

        // 输出比较通道 1
        TIM_OCInitStructer.TIM_Pulse = CCR1_Val;
        TIM_OC1Init(TIM3, &TIM_OCInitStructer);
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
        // 输出比较通道 2
        TIM_OCInitStructer.TIM_Pulse = CCR2_Val;
        TIM_OC2Init(TIM3, &TIM_OCInitStructer);
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
       
        NVIC_Configuration();//嵌套向量中断控制寄存器配置
        //使能定时器3时钟
        TIM_Cmd(TIM3 ,ENABLE);
}


void forward()
{
        CCR1_Val=50;
        CCR2_Val =50;
}
void left()
{
        CCR1_Val =40;
        CCR2_Val =50;
}
void right()
{
        CCR1_Val =50;
        CCR2_Val =40;
}
void stop()
{
        CCR1_Val =0;
        CCR2_Val =0;
}
void start()
{
        uint8_t i;
        for(i=0;i<60;i++)
        {
                CCR1_Val =i;
                CCR2_Val =i;
                SysTick_Delay_Us(50);
        }
}

回复

使用道具 举报

 楼主| 发表于 2021-11-28 11:27:20 | 显示全部楼层
各位大佬帮帮孩子吧
回复

使用道具 举报

发表于 2021-12-14 14:48:33 | 显示全部楼层
CCR1_Val 、CCR2_Val 是变量你赋值给这里有什么用啊,你要在TIM_SetCompare这个函数里面改变占空比。
回复

使用道具 举报

 楼主| 发表于 2021-12-20 21:44:26 | 显示全部楼层
还有梦与你 发表于 2021-12-14 14:48
CCR1_Val 、CCR2_Val 是变量你赋值给这里有什么用啊,你要在TIM_SetCompare这个函数里面改变占空比。 ...

谢谢,我懂了,一边学一边写的还是有问题,多谢解惑
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 14:24 , Processed in 0.032495 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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