智能车制作

标题: S3010的控制 [打印本页]

作者: somebodyes    时间: 2014-2-5 22:18
标题: S3010的控制
S3010都说了是靠脉宽控制的。是不是说白了就是高低电平占一个周期内20毫秒的时间决定啊可以这么理解吗

http://www.znczz.com/thread-25017-1-1.html
[attach]55277[/attach]
那这个程序里为什么是占空比的值控制的而不是用定时器或延时什么的啊


作者: Jyoun    时间: 2014-2-5 22:36
不是一定的20ms,其实舵机都是看一个周期内高电平时间,不管周期是多少,一个周期内可用的就是1-2ms的高电平时间。你说的方法是可以的,但是中断容易被其他中断耽误,可能造成不精确及舵机抖动,所以用pwm更为方便适用。
作者: somebodyes    时间: 2014-2-6 09:25
Jyoun 发表于 2014-2-5 22:36
不是一定的20ms,其实舵机都是看一个周期内高电平时间,不管周期是多少,一个周期内可用的就是1-2ms的高电平 ...

那怎么计算呢,给多少占空比是1.5Ms脉冲,给多少占空比是2Ms脉冲,,,

作者: Jyoun    时间: 2014-2-6 09:44
somebodyes 发表于 2014-2-6 09:25
那怎么计算呢,给多少占空比是1.5Ms脉冲,给多少占空比是2Ms脉冲,,,

周期*占空比=单周期高电平时间。
周期=1/频率。对于工科小伙伴,这应该是常识吧。

作者: somebodyes    时间: 2014-2-6 11:19
Jyoun 发表于 2014-2-6 09:44
周期*占空比=单周期高电平时间。
周期=1/频率。对于工科小伙伴,这应该是常识吧。

e....哦了!!{:soso_e189:}

作者: somebodyes    时间: 2014-2-6 12:30
Jyoun 发表于 2014-2-6 09:44
周期*占空比=单周期高电平时间。
周期=1/频率。对于工科小伙伴,这应该是常识吧。

但是电机一接电就抖,PWM频率设置50,100HZ全没用,就抖不转,貌似程序没起作用

#include "sys.h"
#include "delay.h"
#include "wdog.h"
#include "led.h"
#include "ftm.h"
#include "uart.h"

#define Mid_duty    760
#define Half_Right   910
#define Right         1060
#define Half_Left    610
#define Left          460

uint16_t i;

int main(void)
{
       
        FTM_InitTypeDef FTM_InitStruct;
       
        SystemClockSetup(ClockSource_EX50M,CoreClock_100M);//初始化系统时钟 使用外部50M晶振 PLL倍频到100M
        DelayInit();
        LED_Init();

//初始化FTM

        FTM_InitStruct.Frequency = 50;                               // 50HZ
        FTM_InitStruct.FTMxMAP = FTM0_CH2_PC3;             //FTM0_CH2 PC3引脚
        FTM_InitStruct.FTM_Mode = FTM_Mode_EdgeAligned; //边沿对齐模式
        FTM_InitStruct.InitalDuty = 0;                                  //初始化后产生40%的占空比
        FTM_Init(&FTM_InitStruct);

        LED1=!LED1;

        while(1)
        {
       
        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Mid_duty);                      //舵机处于之间值
        DelayMs(5000);
       
        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Half_Right);                     //开始右偏
        DelayMs(5000);

        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Right);
        DelayMs(5000);

        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Mid_duty);
        DelayMs(5000);
       
        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Half_Left);                       //开始左偏
        DelayMs(5000);

        FTM_PWM_ChangeDuty(FTM0_CH2_PC3,Left);
        DelayMs(5000);
        }
}

//UART断言失败检测

void assert_failed(uint8_t* file, uint32_t line)
{
       
        UART_printf("assert_failed:line:%d %s\r\n",line,file);                     
        while(1);
}



作者: Jyoun    时间: 2014-2-6 12:41
somebodyes 发表于 2014-2-6 12:30
但是电机一接电就抖,PWM频率设置50,100HZ全没用,就抖不转,貌似程序没起作用

#include "sys.h"

如果电机没上电一切正常,那么你的情况很可能是主板的问题。

作者: somebodyes    时间: 2014-2-6 17:39
Jyoun 发表于 2014-2-6 12:41
如果电机没上电一切正常,那么你的情况很可能是主板的问题。

不上电没现象好不好就是接电了就抖也不按程序转





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2