STC单片机的PWM控制舵机程序,无法达到预期效果

STC单片机的PWM控制舵机程序,无法达到预期效果,第1张

PCA输出pwm最小频率是12分频/256可以用定时器T0调整PCA频率但是我还没弄会,不如直接用T0或者T1直接出pwm虽然麻烦点,但是绝对能用,感兴趣的话留邮箱给你发一份T0T1控制输出多路的pwm控制舵机程序。如果你用PCA控制成功了也告诉我啊,尤其是频率怎么通过T0控制的,还有就是如果用T0控制PCA输出的pwm是不是浪费了点。相互交流

别的不说,我先说说我觉得不妥的地方哈:

1. 100us一次中断是不是勤了点儿,这样即使能控制舵机,也会对程序的其他功能产生不利影响,舵机需要较高频率信号的话,可以考虑使用STC的11、12系列单片机,直接能输出PWM信号的,价格也不贵,顺丰的话2天就到;

2. 舵机所需的PWM占空比范围是多少,你尝试的范围比较窄,是不是占空比不合适,可以在程序中设定一个占空比缓慢自增、自减的程序测试一下,例如每秒x自增1之类的;

3. 输出驱动是怎么做的,有没有问题。

#include <reg52.h> //12M晶振

sbit PWM=P1^0 //定义P1^0为输出端口

unsigned int pwm_h=2430,pwm //定义pwm信号中的高电平时间

范围 535< pwm_h <2430

bit fa

void Init_Timer0() //定时器初始化子程序

{

TMOD = 0x01

TH0 = 0x0FF

TL0 = 0x0F6

EA = 1

ET0 = 1

TR0 = 1 //定时器开关打开

}

void main() //主函数

{

Init_Timer0() //定时器初始化

PWM=0

while(1)

{

if(fa)

{

fa=0

pwm_h=20000-pwm_h

}

}

}

void Timer0() interrupt 1 using 1

{

TH0 =(-pwm_h)/256

// (65535-200) /256=0xff

TL0 =(-pwm_h)%256 //0.1ms一个记时器周期

236 % 256 = 236

fa=1

PWM=~PWM

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12080482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存