金牌会员
- 积分
- 1524
- 威望
- 759
- 贡献
- 411
- 兑换币
- 468
- 注册时间
- 2013-3-28
- 在线时间
- 177 小时
|
6#
楼主 |
发表于 2014-2-6 12:30:15
|
只看该作者
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);
}
|
|