上桥臂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 上。
#include <reg52.h>#define uchar unsigned char
#define uint unsigned int
sbit key =P2^5
sbit key1=P2^4
sbit key2=P2^3
sbit key3=P2^2
sbit pwm=P1^0
uint pwm_value=1960
uint count=0
void timer0(void) interrupt 1 using 1
{
switch(count)
{
case 1:pwm=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 2: pwm=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break
/*case 3:pwm1=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 4: pwm1=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break
case 5:pwm2=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 6: pwm2=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break
case 7:pwm3=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 8: pwm3=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break
case 9:pwm4=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 10: pwm4=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break
case 11:pwm5=1
TH0=-pwm_value/256
TL0=-pwm_value%256
break
case 12: pwm5=0
TH0=-(2700-pwm_value)/256
TL0=-(2700-pwm_value)%256
break*/
default: count=0
}
count++
}
void InitTimer0(void)
{
count=1
TMOD=0x11
TH0=-1500/塌巧256
TL0=-1500%256
EA=1
ET0=1
TR0=1
}
void delay(void)
{
uint i=100
while(i--)
}
void main(void)
{
InitTimer0()
while(1)
{
if(pwm_value<2200)
pwm_value+=2
if(pwm_value>1000)
pwm_value-=2
}
}
PWM调制脉冲宽不超过2.5MS,周期为判伏20MS,所以一个周期内可以输出8个脉冲用于控制8路舵机,修改TH0和TL0可改变频率,修改pwm_value可以修改占空比,希掘衫携望对您有所帮助,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)