linux使用pwm控制舵机

本文介绍如何在STM32MP157开发板上通过修改设备树配置,将PB5管脚从SPDIF_TX切换至TIM3_CH2,用以控制舵机。具体步骤包括配置pinctrl、使能timer3,并在用户空间设置PWM的周期与占空比。
摘要由CSDN通过智能技术生成

linux使用pwm控制舵机

开发环境:使用原子STM32MP157开发板平台+ubuntu
最近自己画的mp157的板子使用了PB5这个管脚来控制舵机,先基于原子的开发板调试下功能。
PB5为TIM3的CH2,在原子的开发板上该pin被用来SPDIF_TX,所以需要先基于原子的内核修改设备树,关闭SPDIF相关的配置,添加TMI3 CH2的配置。

修改设备树

1.添加PB5 的pinctrl信息:

	pwm3_pins_a: pwm3-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 5, AF2)>; /* TIM3_CH2 */
			bias-pull-down;
			drive-push-pull;
			slew-rate = <0>;
		};
	};

	pwm3_sleep_pins_a: pwm3-sleep-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 5, ANALOG)>; /* TIM3_CH2 */
		};
	};

2.向timer3追加配置并使能timer3

&timers3 {
    status = "okay";
    /* spare all DMA channels since they are not needed for PWM output */
    /delete-property/dmas;
    /delete-property/dma-names;
    pwm3: pwm {
        pinctrl-0 = <&pwm3_pins_a>;
        pinctrl-1 = <&pwm3_sleep_pins_a>;
        pinctrl-names = "default", "sleep";
        #pwm-cells = <2>;
        status = "okay";
    };
};

timer工作在pwm模式下无需使用DMA相关功能,故删除相关节点
3. 原来PB5相关引用全部屏蔽掉
原子开发板PB5是用来给SPDIF相关音频接口使用的,所以给相关音频和sai接口的dts配置关闭。

sai4 sound 等节点status = "disabled";

如此我们的内核timer3 ch2就可以正常工作了

配置定时器

下一步我们需要在用户空间配置定时器输出我们想要的频率和占空比。
在这里插入图片描述进入到/sys/class/pwm/pwmchip0/下,看到完整路径中物理地址是40001000的就是我们的定时器3。

// 1代表ch2,  0-3对应ch1-4
echo 1 > /sys/class/pwm/pwmchip0/export

//设置周期时间 20ms = 20000us = 20000000ns
echo 20000000 > /sys/class/pwm/pwmchip0/pwm1/period

//设置ON时间为0.5ms 对应舵机0度
echo   500000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle

//设置ON时间为2.5ms 对应舵机180度
echo  2500000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle

//打开pwm输出
echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable

//如果需要调整极性可以按照如下设置
echo "inversed" > /sys/class/pwm/pwmchip0/pwm1/polarity

至此可以通过设置duty_cycle 控制舵机 了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值