金牌会员
- 积分
- 1524
- 威望
- 759
- 贡献
- 411
- 兑换币
- 468
- 注册时间
- 2013-3-28
- 在线时间
- 177 小时
|
5#
楼主 |
发表于 2014-2-6 12:31:17
|
只看该作者
以梦为马 发表于 2014-2-5 23:38
小么啊,你理解的是对的,但是不是定时器控制,也不是依靠延时,是本身具有的PWM功能,要更改的那个值就是寄 ...
但是电机一接电就抖,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);
}
|
|