我也来发一个,正点原子stm32 mini板通过三个按键PWM控制舵机的程序。
根据工作原理,舵机的具体控制方法就是需要一个20ms左右的时基脉冲,
该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
脉冲宽度从0.5ms~2.5ms,相对应舵盘的位置为0~180度,呈线性变化。
***************一般舵机脉冲宽度20ms,高电平宽度与角度对应关系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;
根据上面的原理,我们知道单片机只要产生20ms的脉冲信号,通过改变高电平时间从0.5ms到2.5ms变化,就能使舵机转动到对应的角度
单片机源程序如下:
- /*
- 此程序是从网上找到的,本人修改了下
- 程序小白,如有错误,请见谅^_^
- */
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "pwm.h"
- #include "key.h"
- #define key1 PCin(5)
- #define key2 PAin(15)
- #define key3 PAin(0)
- u16 cout;
- int main(void)
- {
- cout=1850;
- KEY_Init();
- delay_init(); //延时函数初始化
- LED_Init(); //初始化与LED连接的硬件接口
- TIM1_PWM_Init(1999,719); //PWM频率===(2000*720)/72000000=0.02=20ms
- while(1)
- {
- if(key3==0&&key1==0) //key1按下,舵机缓慢正向转动
- {
- if(key1==0)
- {
- delay_ms(5);
- cout+=1;
- }
-
-
- }
- else if(key3==1&&key1==0) //key1、key3同时按下,舵机加速转动
- {
- delay_ms(5);
- cout+=5;
- }
- if(key1==1&&key2==1&&key3==0) //舵机回到90度(起始位置)
- {
- cout=1850;
- }
- if(key3==0&&key2==0) //key2按下,舵机缓慢反向转动
- {
- delay_ms(5);
- cout-=1;
- }
- else if(key3==1&&key2==0) //key2、key3同时按下,舵机加速转动
- {
- delay_ms(5);
- cout-=5;
- }
-
- TIM_SetCompare1(TIM1,cout); //PWM输出
- delay_ms(50);
-
-
- }
-
- }
复制代码
所有资料51hei提供下载:
PWM控制舵机.rar
(395.65 KB, 下载次数: 498)
|