打印

一个关于定时器PWM驱动舵机的问题。

[复制链接]
603|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2020-4-21 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
舵机型号是SG90 。 控制的方法是给一个周期20ms的PWM信号,高电平时间为0.5ms~2.5ms变化,舵机能输出不同的角度。可是为什么我的代码烧写进去以后舵机不工作呢?调了一下午了也没找到原因。 代码贴一下,请各位帮忙看看。
void GPIO_Config(void)
{
        GPIO_InitTypeDef Instruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        Instruct.GPIO_Mode=GPIO_Mode_AF_PP;
        Instruct.GPIO_Pin=GPIO_Pin_8;
        Instruct.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&Instruct);
}  //用的高级定时器I的通道1 指南者是PA8

void Advanced_Timer_Config(void)
{
        TIM_TimeBaseInitTypeDef BaseInstruct;
        TIM_OCInitTypeDef OcInstruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
        BaseInstruct.TIM_CounterMode=TIM_CounterMode_Up;
        BaseInstruct.TIM_Period=19999;                    //ARR=19999, fpwm=72MHZ/(PSC(71)+1)(ARR(19999)+1)=50HZ Tpwm=20ms
        BaseInstruct.TIM_Prescaler=71;      //PSC=71
        TIM_TimeBaseInit(TIM1,&BaseInstruct);

        OcInstruct.TIM_OCMode=TIM_OCMode_PWM1;   
        OcInstruct.TIM_OCPolarity=TIM_OCPolarity_High;
        OcInstruct.TIM_OutputState=TIM_OutputState_Enable;
        OcInstruct.TIM_Pulse=1000;   //CCR=1000 ,高电平时间为1ms
        TIM_OC1Init(TIM1,&OcInstruct);
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能重装载
        TIM_ARRPreloadConfig(TIM1,ENABLE);   //使能重装载
        TIM_CtrlPWMOutputs(TIM1,ENABLE); //用高级定时器时打开这个
        TIM_Cmd(TIM1,ENABLE);
}

int main(){
        
        GPIO_Config();
        Advanced_Timer_Config();
        while(1);
}
按照网上的说法也不断修改了主函数里面的内容 比如说写成这样
int main(){
        
        GPIO_Config();
        Advanced_Timer_Config();
        TIM_SetCompare1(TIM1,1500);
        delay();
        TIM_SetCompare1(TIM1,2000);
        delay();
        while(1);
}
仍然不起作用。 请问到底是哪里出了问题呢?

使用特权

评论回复

相关帖子

沙发
ningling_21| | 2020-4-21 21:14 | 只看该作者
可以用示波器测一下输出的PWM波形是否满足舵机的要求

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

463

帖子

1

粉丝