历史上的今天
今天是:2025年06月19日(星期四)
2018年06月19日 | 单片机PWM舵机控制原理
2018-06-19 来源:eefocus
舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
如下图可形象地表示脉冲与角度关系
#include
unsigned char count; //0.5ms次数标识
sbit pwm=P1^0; //信号输出
sbit jia=P1^1; //角度增加按键
sbit jan=P1^2; //角度减小按键
char jd; //角度标识
void delay(unsigned int i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time0_init() //定时器初始化
{
TMOD=0x01;
IE=0x82;
TH0=0xff;
TL0=0x19; //12晶振,0.25ms
TR0=1; //定时器开始
}
void Time0_int() interrupt 1 //中断程序
{
TH0=0xff;
TL0=0x19;
if(count pwm=1; else pwm=0; //其余输出低电平 count++; count=count%40; //时钟保持40个count 即20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加键是否按下 { delay(50); //按下延时,消抖 if(jia==0) { jd++; //角度标识加1 count=0; //按键按下,则20ms周期重新开始 if(jd==50) jd=9; //已经是180°则保持 while(jia==0); //等待按键放开 } } if(jan==0) //角度减小键是否按下 { delay(10); if(jd==0); { jd--; //角度标识减1 count=0; if(jd==0) jd=1; while(jan==0); } } } void main() { jd=1; count=0; Time0_init(); while(1) { keyscan(); // display(); } }
上一篇:STM8四路PWM配置
下一篇:stm8程序设计之PWM
史海拾趣
|
哪位高手搞过s3c6410的DVFS(动态电压频率调整)功能吗?在三星的文档里,关于DVFS的介绍很少,只要set BSP_USEDVS=1 就可以使用些功能了好像,但问题是,它体现在哪里?搜索BSP_USEDVS,没找到相关的代码, 有研究过这个功能的前辈吗?大家讨论一 ...… 查看全部问答> |
|
#include \"stdio.h\" #include \"ugl/ugl.h\" UGL_LOCAL struct_colorStruct/*这是定义一个色表,就是这部分编译不过去*/ { UGL_ARGB rgbColor; UGL_COLOR uglColor; } colorTable[]= { {UGL_MAKE_ARGB(0xff,0,0,0),0}, {UGL_MAKE_A ...… 查看全部问答> |
|
关于规整贴 上周,琳子姐跟我谈了谈目前DIY的进展和一些组织的问题。 主要是说到现在大家是按照原计划,分任务独立去做,有时候我们单独发贴,显得有点乱 ...… 查看全部问答> |
|
Lattice坚定发展低功耗低价格FPGA不动摇 Lattice也是大家熟悉的FGPA生产厂商,有自己的特点~希望更多的人能认识到 … 查看全部问答> |
|
MSP430F247T单片机,有谁比较了解的 或者用过的,他总线这块要怎么运用,比如我LCD12864液晶屏怎么用的总线呢?正常我们STC的话用P0口、P2.口、跟P3口结合的,那不知道这个芯片是怎么去做的,请高手帮忙理解,我是初次使用这类单片机。… 查看全部问答> |
|
关于Stellaris系列UART的FIFO新认识,经典!(ZZ 21ic) 【经典提问】 有没有办法去掉UART的FIFO,或者怎样才能实现每收发一个字符就中断一次呢?Stellaris系列ARM的UART好像无法做到这一点,存在缺陷!【精妙解答】 误解了,根本就不是缺陷, ...… 查看全部问答> |




