msp432快速入门第九节之pwm输出

(一)定时器TA输出PWM介绍

首先查看下TI的usermanual,支持PWM输出的定时器只有TAx定时器,Timer32是不支持直接PWM输出,所以采用TA输出PWM,首先查看一下他的寄存器和说明:
在这里插入图片描述
这里指出使用输出比较来输出PWM波,主要需要注意的就是PWM的频率配置,最大比较计数值,连续模式使能即可

(二)配置PWM输出

在这里我们使用连续模式进行输出比较来输出PWM波,参照TI的driver lib进行直接配置,使用TA0输出一路PWM信号驱动5V舵机MG996R,输出引脚为P2.4,注意SMCLK总线频率是已经配置好为12M,配置PWM的周期为20ms,以一个0.5~2.5ms的高电平方波来控制舵机角度:

(1)初始化定时器:

/* Timer_A PWM Configuration Parameter */
Timer_A_PWMConfig pwmConfig =
{
        TIMER_A_CLOCKSOURCE_SMCLK,
		TIMER_A_CLOCKSOURCE_DIVIDER_24,//12M / 24 = 500K  1000clk = 0.002s 10000 = 0.02s 0.0015s = 750
        10000,//all duty = 20ms
        TIMER_A_CAPTURECOMPARE_REGISTER_1,
        TIMER_A_OUTPUTMODE_RESET_SET,
        750//now duty
};


//TA0 init
void Servo_Timer_Init(void)
{
	//配置 TA0 channel_1
	GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4,
            GPIO_PRIMARY_MODULE_FUNCTION);
	Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);
}

(2)舵机控制角度:

//TA0 CH1 控制角度
void Servo1_Angle(uint16 x)
{
	uint32 ta0ch1val = 0;
	//0.0015s = 750
	//0.0005s = 250
	//0.0025s = 1250	
	//0.0005s ~ 0.0025s 250 ~ 1250
	ta0ch1val = x * 1000 / 180 + 250; 
	x > 180 ? (x = 180):(x);
	Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,(uint16)ta0ch1val);
}

(三)结语

正常接线后,舵机可以根据函数调用进行运动;

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YGZone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值