节精度比较差
下面是双定时器产生PWM主要语句:
TMOD=0X11
TH0=(65536-20000)/256//
定时20ms
TL0=(65536-20000)%256
TH1=(65536-b)/256//定时要小于20ms,改变b的值即改变占空比
TL1=(65536-b)%256
ET0=1
EA=1
TR0=1
PWM=1
b=2000
while(1)
void
timer0()interrupt
1
{
TH0=(65536-20000)/256
TL0=(65536-20000)%256
PWM=1
TR1=1
ET1=1
}
void
timer1()interrupt
3
{
TH1=(65536-b)/256
TL1=(65536-b)%256
PWM=0
TR1=0
ET1=0
}
定时器0中断负责每
20ms将管脚置
1,定时1负责在20ms之内的某一时间将该管脚清0
当然也可以采用自动重装方式,中断可以更频繁一些,产生的PWM频率要高一些
也可以只用一个定时器,这时产生PWM波要么频率低,要么调节精度差,因中断一次至少10US,你就不用指望一次调节步距10us以下了
上桥臂PWM输出,下桥臂常闭。你要是做电机的话这个就会好理解了。
用库函数不是有个TIM_CCxN配置的函数。给TIM_CCx配置一个CCR的值。把互补通道这个关掉就好了。
脉冲宽度调制(PWM),是对脉冲宽度的控制。
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
本实验是利用 TIM3 的通道 2,把通道 2 重映射到 PB5, 产生 PWM 来控制 DS0 的亮度。
TIM3_CH2 默认是接在 PA7上面的,而我们的 DS0 接在 PB5 上面,可以通过重映射功能,把 TIM3_CH2映射到 PB5 上。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)