hc32F460 控制舵机旋转指定角度

简介

舵机:它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。舵机已经广泛应用于模型玩具、无人机、机器人、智能家居和工业自动化等领域。它们的尺寸虽然小,但是能够输出很大的力。
在这里插入图片描述

部分代码展现

/* TIMERA unit and clock definition */
#define TIMERA_UNIT1                    (M4_TMRA3)
#define TIMERA_UNIT1_CLOCK              (PWC_FCG2_PERIPH_TIMA3)
#define TIMERA_UNIT1_OVERFLOW_INT       (INT_TMRA3_OVF)

/* TIMERA channel 1 Port/Pin definition */
#define TIMERA_UNIT1_CH1                (TimeraCh1)
#define TIMERA_UNIT1_CH1_PORT           (PortC)
#define TIMERA_UNIT1_CH1_PIN            (Pin06)
#define TIMERA_UNIT1_CH1_FUNC           (Func_Tima0)

void set_duty_cycle(uint16_t duty)
{
		if(duty == 0)
		{
        TIMERA_SpecifyOutputSta(TIMERA_UNIT1, TIMERA_UNIT1_CH1, TimeraSpecifyOutputLow);
				TIMERA_Cmd(TIMERA_UNIT1,Enable);
		}
    else if(duty >= TIMERA_COUNT_OVERFLOW)
		{
        TIMERA_SpecifyOutputSta(TIMERA_UNIT1, TIMERA_UNIT1_CH1, TimeraSpecifyOutputHigh);
				TIMERA_Cmd(TIMERA_UNIT1,Enable);
		}
    else
		{
				stc_timera_compare_init_t stcTimerCompareInit;
				MEM_ZERO_STRUCT(stcTimerCompareInit);
			
				 /* Configuration timera unit 1 compare structure */
				stcTimerCompareInit.u16CompareVal = duty;   //500		
				stcTimerCompareInit.enStartCountOutput = TimeraCountStartOutputHigh;
				stcTimerCompareInit.enStopCountOutput = TimeraCountStopOutputHigh;
			
				stcTimerCompareInit.enCompareMatchOutput = TimeraCompareMatchOutputReverse;
				stcTimerCompareInit.enPeriodMatchOutput = TimeraPeriodMatchOutputHigh;
				stcTimerCompareInit.enSpecifyOutput = TimeraSpecifyOutputInvalid;
				
				stcTimerCompareInit.enCacheEn = Disable;
				stcTimerCompareInit.enTriangularTroughTransEn = Disable;
				stcTimerCompareInit.enTriangularCrestTransEn = Disable;
				stcTimerCompareInit.u16CompareCacheVal = stcTimerCompareInit.u16CompareVal;
				/* Configure Channel 1 */
				TIMERA_CompareInit(TIMERA_UNIT1, TIMERA_UNIT1_CH1, &stcTimerCompareInit);
				TIMERA_CompareCmd(TIMERA_UNIT1, TIMERA_UNIT1_CH1, Enable);
			  	TIMERA_Cmd(TIMERA_UNIT1,Enable);
		}
		
}

void set_steering_gear_dutyfactor(uint16_t dutyfactor)
{

  /* 对超过范围的占空比进行边界处理 */
  dutyfactor = 0.5/20.0*TIMERA_COUNT_OVERFLOW > dutyfactor ? 0.5/20.0*TIMERA_COUNT_OVERFLOW : dutyfactor;
  dutyfactor = 2.5/20.0*TIMERA_COUNT_OVERFLOW < dutyfactor ? 2.5/20.0*TIMERA_COUNT_OVERFLOW : dutyfactor;


  set_duty_cycle(dutyfactor);
}

void set_steering_gear_angle(uint16_t angle_temp)
{
  angle_temp = (0.5 + angle_temp / 180.0 * (2.5 - 0.5)) / 20.0 * TIMERA_COUNT_OVERFLOW;    // 计算角度对应的占空比

  set_steering_gear_dutyfactor(angle_temp);    // 设置占空比
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路过的小熊~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值