zws164393 2024-10-15 23:29
浏览 1

sg90舵机不转,程序有问题吗?

硬件是新买的应该没问题
用PWM驱动sg90 180°舵机,舵机只是吱吱响,一点也不转
下面是源代码

servo.h头文件

#ifndef _SERVO_
#define _SERVO_

void PWM_Init(int ARR, int PSC, int CCR);
void Servo_Init();
void Servo_WriteAngle(int Angle);
void Servo_AddAngle(int Angle);
#endif

servo.c源文件

int angle = 0;

void PWM_Init(int ARR, int PSC, int CCR)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  //用TIM2时钟
    
    TIM_InternalClockConfig(TIM2);
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStruct.TIM_Period = ARR;
    TIM_TimeBaseInitStruct.TIM_Prescaler = PSC;
    TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
    
    TIM_OCInitTypeDef TIM_OCInitStruct;
    TIM_OCStructInit(&TIM_OCInitStruct);
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_Pulse = CCR;
    TIM_OC1Init(TIM2, &TIM_OCInitStruct);
    TIM_OC2Init(TIM2, &TIM_OCInitStruct);
    TIM_OC3Init(TIM2, &TIM_OCInitStruct);
    TIM_OC4Init(TIM2, &TIM_OCInitStruct);
    
    TIM_Cmd(TIM2, ENABLE);
}

void Servo_Init()
{
    PWM_Init(20000 - 1, 72 - 1, 0);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitTypeDef GPIO_Initstructre = {GPIO_Pin_1, GPIO_Speed_50MHz, GPIO_Mode_AF_PP};  //舵机接在PA1口
    GPIO_Init(GPIOA, &GPIO_Initstructre);
}

void Servo_WriteAngle(int Angle)
{
    angle = Angle;
    TIM_SetCompare2(TIM2, angle * 200 / 18 + 500);  //PA1口对应TIM2_CH2
}

void Servo_AddAngle(int Angle)
{
    angle = (Angle + angle) % 180;
    TIM_SetCompare2(TIM2, angle * 200 / 18 + 500);
}

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "servo.h"

int main()
{
    Servo_Init();
    Servo_WriteAngle(0);
    while(1)
    {
        Servo_AddAngle(30);
        Delay_ms(1000);
    }
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 创建了问题 10月15日

    悬赏问题

    • ¥30 模拟电路 logisim
    • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
    • ¥15 Bug traq 数据包 大概什么价