出村北海 发表于 2016-8-9 23:57:42

寄存器的 pwm输出控制舵机,舵机一直抖,求教错哪了?拜托

#include"stm32f10x.h"
#include"delay.h"
#include"mokuai.h"
#include"usart.h"

void TIM1_PWM_Init(u16 arr,u16 psc)      //周期分频
{                                                      //定时器1 的CH2PWM输出初始化
      RCC->APB2ENR|=1<<11;                  //定时器1使能
      RCC->APB2ENR|=1<<2;                //IO口A时钟使能
      GPIOA->CRH&=0XFFFFFF0F;                //设置A9为推挽复用输出
      GPIOA->CRH|=0X000000B0;
      GPIOA->ODR=1<<9;
      
      TIM1->ARR|=arr;
      TIM1->PSC|=psc;
      TIM1->CCMR1=6<<12;      //PWM      模式1
      TIM1->CCMR1=1<<11;      //预装载使能
      TIM1->CCER|=1<<4; //CO1输出使能
      TIM1->CR1=0x0080;                //设置第7位 使能缓冲器
      TIM1->CR1|=0x01;
}

int main(void)
{
      Stm32_Clock_Init(9);
      delay_init(72);
      TIM1_PWM_Init(14400,99);   //周期20ms
      while(1)
      {
                delay_ms(500);
                TIM1->CCR2=1080;
                delay_ms(500);
                TIM1->CCR2=1700;
                delay_ms(500);
                TIM1->CCR2=500;
      }
}

麻烦帮我看看我错哪了,我查了网上别人写的,没什么不一样的啊,帮我看一下吧,谢谢了

大林林 发表于 2016-8-12 08:56:21

最简单接示波器看输出波形靓不靓,空载看和接电机看,没做隔离的话会不会是电极那边的干扰

shiqbt 发表于 2016-8-12 09:01:11

主循环里不就是让它抖吗,抖动周期 1.5秒啊

fronthua 发表于 2016-8-12 09:05:28

delay_ms(500);
                TIM1->CCR2=1080;
                delay_ms(500);
                TIM1->CCR2=1700;
                delay_ms(500);
                TIM1->CCR2=500;
这个 不是一个周期性 变化的吗。

langtian99 发表于 2016-8-12 09:50:11

加delay然后占空比突变,不抖动就才怪

无薪税绵 发表于 2016-8-12 10:42:34

试一下用,PWM慢慢累加,不要突然变化。

Dylan疾风闪电 发表于 2016-8-12 20:31:24

->加减速!

feixiang20 发表于 2016-8-12 23:52:01

检查循环,看看是不是第一个或最后一个错行

党国特派员 发表于 2016-8-13 00:04:19

PWM频率太低了。

fishcan11 发表于 2016-10-12 19:42:31

查问题需要看波形,这是最快方法
页: [1]
查看完整版本: 寄存器的 pwm输出控制舵机,舵机一直抖,求教错哪了?拜托