OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9810|回复: 11

【180度舵机】(已困扰2天)基于stm32f407得舵机程序问题,代码简单、帮忙看看

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-9-9
在线时间
10 小时
发表于 2021-2-9 21:25:47 | 显示全部楼层 |阅读模式
5金钱


pwm.c
#include "pwm.h"
#include "led.h"
#include "usart.h"




//TIM14 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM14_PWM_Init(u32 arr,u32 psc)
{                                                          
        //此部分需手动修改IO口设置
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        //1)开启 TIM14 和 GPIO 时钟,配置 PA7 选择复用功能 (TIM14)输出。
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);          //TIM14时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);         //使能PORTA时钟       
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM14); //GPIOA7复用为定时器14
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;           //GPIOA7
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        //下拉
        GPIO_Init(GPIOA,&GPIO_InitStructure);              //初始化PA7
        GPIO_ResetBits(GPIOA,GPIO_Pin_7);  //输出低电平

        //2)初始化 TIM14,设置 TIM14 的 ARR 和 PSC 等参数。       
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
       
        //3)设置 TIM14_CH1 的 PWM 模式,使能 TIM14 的 CH1 输出。在库函数中,PWM 通道
           //设置是通过函数 TIM_OC1Init()~TIM_OC4Init()来设置的,不同的通道的设置函数不一样,这里
       //我们使用的是通道 1,所以使用的函数是 TIM_OC1Init()。
        //初始化TIM14 Channel1 PWM模式         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM模式:TIM脉冲宽度调制模式
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性低:比较输出极性就是选择哪个电平为有效电平
        TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1  
         //没有初始化uint16_t TIM_Pulse; CCR比较值,写CCRx,这个一般在外部设置,也可以写0

        //4)使能 TIM 的自动重载预装载及ARR更新机制
        TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能TIM14在CCRx上的自动重载预装载(位 7 ARPE),寄存器是否进行缓冲

        TIM_ARRPreloadConfig(TIM14,ENABLE);//输出比较预装载使能,ARPE使能,ARR更新了,还是现在有效
       
        //5)使能 TIM14。
        TIM_Cmd(TIM14, ENABLE);  //使能TIM14

        //6)修改 TIM14_CCR1 来控制占空比。最后,在经过以上设置之后,PWM 其实已经开始输出了,只是其占空比和频率都是固定
//的,而我们通过修改 TIM14_CCR1 则可以控制 CH1 的输出占空比。继而控制 DS0 的亮度。
//在库函数中,修改 TIM14_CCR1 占空比的函数是:void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare2);
//理所当然,对于其他通道,分别有一个函数名字,函数格式为 TIM_SetComparex(x=1,2,3,4)                                                                          
}  

//补充:高级定时器虽然和通用定时器类似,但是高级定时器要想输出 PWM,必须还要设置一
//个 MOE 位(TIMx_BDTR 的第 15 位),以使能主输出,否则不会输出 PWM。库函数设置的函数
//为:
//void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)




mian.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"

//20ms -> 1000
//0.5/20=0.025 -> 1000*0.025 = 25(0度)
//1.5/20=0.075 -> 1000*0.075 = 75(90度)
//2.5/20=0.125 -> 1000*0.125 = 125(180度)

char value[] = {75, 125, 25};//0-90-180

int main(void)
{     
        char i = 0;
        delay_init(168);  //初始化延时函数
        LED_Init();
        //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        //uart_init(115200);//初始化串口波特率为115200
        TIM14_PWM_Init(1000-1,1680-1);        //(1680)//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.     0.5ms
   while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
        {
               
                LED_test(2,2000);
                TIM_SetCompare1(TIM14,value[i]);        //修改比较值,修改占空比
                i++;
                if(i > 2) i = 0;
        }
}


舵机现象:舵机有点卡的情况,但不转;手动可以转动,

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-23 13:31:52 | 显示全部楼层
你的pwm频率是2khz?太高了
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-23 13:34:05 | 显示全部楼层
你把频率改成50hz,然后脉冲宽度分别改成0.5ms-1ms-1.5ms-2ms-2.5ms 延时个1500ms,
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-23 13:37:06 | 显示全部楼层
Cheng0717 发表于 2021-2-23 13:31
你的pwm频率是2khz?太高了

不对,不是2k
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-23 13:40:00 | 显示全部楼层
这样看看

???

???
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-23 13:41:11 | 显示全部楼层
这个是从180->0度递减,然后循环
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2021-1-30
在线时间
6 小时
发表于 2021-5-13 12:39:27 | 显示全部楼层

哥,你这个源程序能不能发一下呀,最近在搞那个舵机,PWM输进去LD-1501MG舵机,它一直抖,动不了,2863497705@qq.com
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-5-13 13:41:06 | 显示全部楼层
KOBE824 发表于 2021-5-13 12:39
哥,你这个源程序能不能发一下呀,最近在搞那个舵机,PWM输进去LD-1501MG舵机,它一直抖,动不了,

发给你了
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2021-6-29
在线时间
14 小时
发表于 2021-7-9 10:29:06 | 显示全部楼层

哥我也想求一份舵机的程序875845513@qq.com。求求你
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-7-11
在线时间
3 小时
发表于 2021-7-11 16:36:37 | 显示全部楼层
Cheng0717 发表于 2021-2-23 13:41
这个是从180->0度递减,然后循环

哥,能把407,的控制舵机的源码发我吗,2456317457@qq.com
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-7-11 20:32:53 | 显示全部楼层
etwt4y3 发表于 2021-7-11 16:36
哥,能把407,的控制舵机的源码发我吗,

你找一个pwm输出的例程,然后主函数按照我这样改就可以了
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-7-13 08:49:09 | 显示全部楼层
代码
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 11:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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