湖南网站建设 尖端磐石网络,绥中做网站公司,邯郸做网站流程,天津网站域名购买PWM开发sg90舵机
1、简介 PWM#xff08;pulse width modulation#xff09;是脉冲宽度调制缩写。 通过对一系列脉冲的宽度进行调制#xff0c;等效出所需要的波形#xff08;包含形状以及幅值#xff09;。对模拟信号电平进行数字编码#xff0c;通过调节占空比的变化来…PWM开发sg90舵机
1、简介 PWMpulse width modulation是脉冲宽度调制缩写。 通过对一系列脉冲的宽度进行调制等效出所需要的波形包含形状以及幅值。对模拟信号电平进行数字编码通过调节占空比的变化来调节信号、能量等的变化。 占空比在一个周期内信号处于高电平的时间占据整个信号周期的百分比例如方波的占空比就是50%。
1ms高电平3ms低电平为1个周期占空比是25%。 只给高电平或低电平舵机无法运作。
2、如何实现PWM信号输出 通过芯片的内部模块输出 观察手册或者芯片 IO 口会标明这个是否为PWM口。 例stc15w的cpu有标注PWM1等。 如果没有集成PWM功能可以通过 IO 口软件模拟相对硬件PWM来说精准度略差。
3、控制舵机
常见的舵机有0-90°0-180°0-360° 黄色信号线——PWM红——VCC黑——GND 像黄色信号线灌入 PWM信号来控制舵机。 PWM频率不能太高 频率50Hz 周期频率的倒数 1/50 0.02s 20ms 数据 0.5ms——-0° 2.5%对应函数中占空比为 250 1.0ms——45° 5.0%对应函数中占空比为 500 1.5ms——90° 7.5%对应函数中占空比为 750 2.0ms——135°10.0%对应函数中占空比为1000 2.5ms——180°12.5%对应函数中占空比为1250
编程实现 定时器需要定义20ms关心单位是0.5ms40个0.5ms初值为0.5ms用cnt计算cnt 1s 10ms * 100 2ms 0.5ms * 40
#include reg52.h
#includeintrins.hsbit sg90_con P1^1;int jiaodu;
int cnt 0;void Time0Init()
{TMOD 0x01; //配置定时器0工作模式位16位时TL0 0x33; //给初值定一个0.5msTH0 0xFE; ET0 1; //打开定时器0中断 EA 1; //打开总中断EATR0 1; //开始计时TF0 0;
}void Delay2000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i);
}void Delay300ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 3;j 26;k 223;do{do{while (--k);} while (--j);} while (--i);
}void main()
{Delay300ms(); //让硬件稳定300msTime0Init(); //初始化定时器jiaodu 1; //初始化角度0°0.5ms的高电平cnt 0; //角度变化cnt从0计算sg90_con 1;//给高电平while(1){jiaodu 4;//爆表4次0.5*42ms高电平转135度cnt 0;Delay2000ms(); //每隔两秒转一次jiaodu 1;cnt 0;Delay2000ms();}}void Time0Handler() interrupt 1
{cnt; //统计爆表的次数TL0 0x33; //重新给初值TH0 0xFE;if(cnt jiaodu){ //PWM波形控制sg90_con 1;}else{sg90_con 0;}if(cnt 40){ //爆表40次经过20mscnt 0; //重新计算cnt}
}