如何利用51 单片机输出PW M 波 1、理论知识 2、程序及分析 1、理论知识 PWM 这个功能在飞思卡尔、STM32 等高档的单片机内部有专用的模块,用此类芯片实现 PWM 功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。但是如果要用51 单片机的话,也是可以的,但是比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。 用两个定时器的方法是用定时器 T0 来控制频率,定时器 T1 来控制占空比。大致的的编程思路是这样的:T0 定时器中断让一个 I0 口输出高电平,在这个定时器 T0 的中断当中起动定时器 T1,而这个 T1 是让 IO 口输出低电平,这样改变定时器 T0 的初值就可以改变频率,改变定时器 T1 的初值就可以改变占空比。 下面重点介绍用一个定时器的实现 PWM 的方法。因为市面上的智能小车所采用的电机大多数为 TT 减速电机,通过复杂的实验此电机最佳的工作频率为1000HZ(太高容易发生哨叫,太低电机容易发生抖动),所以下面以周期为 1ms(1000HZ)进行举例,要产生其它频率的 PWM 波,程序中只需作简单修改即可。 用一个定时器时(如定时器 T0),首先你要确定 PWM 的周期 T 和占空比 D,确定了这些以后 ,你可以用定时器产生一个时间 基 准 t,比如定时器溢 出n 次 的时间 是 PWM 的高电平的时间 ,则 D*T=n*t,类似 的可以求 出PWM 低电平时间 需要多少 个时间 基 准n'。 因为这里 我 们 是产生周期为 1ms(1000HZ)的 PWM,所以可设置中断的时间 基准 为 0.01ms,,然 后 中断 100 次 即为 1ms。在中断子 程序内,可设置一个变量 如time,在中断子 程序内,有三 条 重要的语 句 :1、当 time>=100时,time 清 零 (此语 句 保 证 频率为 1000HZ),2、当 time>n时(n 应该 在 0- 100 之 间 变化 开 ),让单片相应的 I/O 口输出高电平,当 time