Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | - | - | ||||
BUILD.gn | D | 12-May-2024 | 1 KiB | 40 | 32 | |
README.md | D | 12-May-2024 | 3.4 KiB | 118 | 80 | |
main.c | D | 12-May-2024 | 3.2 KiB | 100 | 68 | |
um_pwm.c | D | 12-May-2024 | 10.2 KiB | 334 | 275 | |
um_pwm.h | D | 12-May-2024 | 2.4 KiB | 100 | 27 |
README.md
1# PWM舵机调试 2 3## **什么是PWM?** 4 5PWM(Paulse Width Modulation),即脉冲宽度调制,也就是占空比可变的脉冲波形。 6 7占空比:指的是在一个周期内,信号处于高电平的时间占据整个信号周期的百分比。 8 9pwm的占空比,就是指高电平保持的时间,与该pwm时钟周期时间之比。如:舵机的转角就是通过调节pwm占空比来控制,也就是一个周期中高电平所占的百分比来控制的。详细例子参考:sample/pwm 10 11## 设置及打开PWM 12 13九联A311D开发板有两个pwm引脚分别对应目录为 14 15``` 16 PWM_1: /sys/class/pwm/pwmchip0/pwm0 17 PWM_2: /sys/class/pwm/pwmchip2/pwm0 18``` 19 20导出PWM_1、PWM_2引脚目录 21 22``` 23$ echo 0 > /sys/class/pwm/pwmchip0 24$ echo 0 > /sys/class/pwm/pwmchip2 25``` 26 27此时就会生成对应的引脚目录pwm0 28 29### 打开或者关闭PWM(以pwm_1为例) 30 31``` 32$ echo 1 > /sys/class/pwm/pwmchip0/pwm0/enabled 33$ echo 0 > /sys/class/pwm/pwmchip0/pwm0/enabled 34``` 35 36### 设置pwm的溢出值(单位 ns) 37 38``` 39$ echo 2600000 > /sys/class/pwm/pwmchip0/pwm0/period 40``` 41 42### 设置pwm一个周期高电平的时间 43 44``` 45$ echo 5000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle 46``` 47 48### 设置pwm的极性 49 50``` 51$ echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity 52$ echo inversed > /sys/class/pwm/pwmchip0/pwm0/polarity 53``` 54 55### pwm接口函数 56 57``` 58#define PWM1 1 59#define PWM2 2 60 61#define PWM1_PEX "/sys/class/pwm/pwmchip0" 62#define PWM2_PEX "/sys/class/pwm/pwmchip2" 63 64int init_pmw(int pwmChannel); 65int set_pwm_period(int pwmChannel, long period); 66int set_pwm_dutyCycle(int pwmChannel, long dutyCycle); 67int set_pwm_polarity(int pwmChannel, int polarity); 68int set_pwm_enable(int pwmChannel, int isEnable); 69long get_pwm_period(int pwmChannel); 70long get_pwm_dutyCycle(int pwmChannel); 71int get_pwm_polarity(int pwmChannel); 72int is_pwm_enabled(int pwmChannel); 73``` 74 75## 举例 76 77## 九联A311D开发板驱动TIANKONGRC MG996R舵机 78 79九联A311D开发板一共有两路pwm输出,根据开发板标识从左到右依次为(3.3V,PWM_1,PWM_2,GND),舵机的连线根据舵机的说明进行连接。 80 81通信接口:pwm接口 82 83接线及组装方式:使用杜邦线,将舵机连接到开发板的pwm接口 84 85### MG996R舵机 86 87- MG996R 舵机是一款单线驱动180°舵机 88- 信号线(黄)电源线(红)地线(棕) 89- 工作死区:4微秒 90- 工作电压:3.0V-7.2V 91- 适用温度:-10°~60° 92- 操作速度 0.17秒/60度(4.8V);0.13秒/60度(6.0V) 93 94舵机的控制一般需要一个20ms(50hz)的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的: 95 96- 0.5ms————–0度; 97- 1.0ms————45度; 98- 1.5ms————90度; 99- 2.0ms———–135度; 100- 2.5ms———–180度; 101 102### 连接方式 103 104舵机连接A311D开发板: 舵机**信号线**连接开发板pwm_1或pwm_2,**电源线**连接开发板5v供电pin脚,**地线**连接开发板GND接地pin脚,这里是以MG996R为例,连接如图所示(这里电源连接的是板子上的5.0V电源)。 105注意:该代码是以MG996R舵机为例。 106 107 108图1 pwm连接实物图 109 110### 使用方法 111 112烧录成功后,连接开发板,在串口调试窗口下直接执行该程序。 113 114``` 115# pwm_test 1 1500000 116``` 117 1181 是选择的引脚,1500000 是设置的 duty_cycle