1.PWM是由GTM模块产生
通用定时器模块(GTM)
有4个ATOM子模块,每个子模块有8路可独立配置的通道
有3个TIM子模块,每个子模块有8路可独立配置的通道
有2个TOM子模块,每个子模块有16路可独立配置的通道
2.PWM初始化:
/*
* @param pin : PWM通道 IfxGtm_PinMap.h中 已经定义了对应的PWM管脚
* @param duty : 占空比 * ATOM_PWM_MAX
* @param pwmFreq_Hz : 频率
*/
void ATOM_PWM_InitConfig(IfxGtm_Atom_ToutMap pin, uint32_t duty, uint32_t pwmFreq_Hz)
{
}
3.设置PWM:
/*
pin :PWM通道 IfxGtm_PinMap.h中 已经定义了对应的PWM管脚
duty :占空比 * ATOM_PWM_MAX
pwmFreq_Hz : PWM频率
*/
void ATOM_PWM_SetDuty(IfxGtm_Atom_ToutMap pin, uint32_t duty, uint32_t pwmFreq_Hz)
{
}
这里面传的参数和初始化中的一样。
4.例程:
void LQ_ATom_Servo_2chPWM(void)
{
unsigned short duty=1570;
char txt[16];
TFTSPI_Init(1); //LCD初始化 0:横屏 1:竖屏
TFTSPI_CLS(u16BLUE); //蓝色屏幕
TFTSPI_P8X16Str(0, 3, "Test Servo",u16WHITE,u16BLACK); //字符串显示
GPIO_KEY_Init();
ATOM_PWM_InitConfig(ATOMSERVO1, 1500, 100);//舵机频率为100HZ,初始值为1.5ms中值
ATOM_PWM_InitConfig(ATOMSERVO2, 1500, 100);//舵机理论范围为:0.5ms--2.5ms,大多舵机实际比这个范围小
while(1)
{
if(KEY_Read(KEY0)==0)//按下KEY0键,占空比减小,舵机顺时针转动
{
if(duty>1370)
duty-=10;
}
if(KEY_Read(KEY2)==0)//按下KEY2键,占空比加大,舵机逆时针转动
{
if(duty<1770)
duty+=10;
}
if(KEY_Read(KEY1)==0)//按下KEY1键,舵机回位中值
{
duty=1570;
}
ATOM_PWM_SetDuty(ATOMSERVO2, duty, 100);//驱动两个舵机
ATOM_PWM_SetDuty(ATOMSERVO1, duty, 100);
sprintf(txt, "PWM: %05d;", duty);
TFTSPI_P8X16Str(0, 5, txt,u16WHITE,u16BLACK); //字符串显示
UART_PutStr(UART0,txt);
LED_Ctrl(LED0,RVS); //电平翻转,LED闪烁
delayms(200); //延时等待
}
}
注意:驱动舵机时不能卡死,先确定好位置再拧螺丝。
4.1:前面几步时彩屏和按键的初始化,为的是能用按键来调节舵机转向和把舵机转向的值打印再彩屏上。
4.2:初始化初始化ATOM为PWM输出功能,这个和电机是一样的,在while里用ATOM_PWM_SetDuty( )来这是占空比,从而来控制舵机的转向。
4.3:在条件语句中可以减小duty的值,这样我们就可以用按键来找出舵机中间,两边极限对应的占空比(占空比显示在彩屏上),有利于我们调试。