51单片机一个io口输出不同的4个不同的pwm
展开全部
1、首先要明白PWM的含义,PWM就是输出不同占空比的脉冲,
2、普通51单片机IO口输出PWM的话,可以用定时器去计时,比如要输出100HZ的占空比50%的PWM。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100HZ的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把Io口取反;程序如下
void main()
{
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x18; // 晶振选择12MHz,配置定时器中断1ms
ET0 = 1;
TR0 =1;
EA= 1;
while(1); //程序停止在这里,,接下来就是去响应中断
}
void Timer0() interrupt 1
{
static unsigned char t = 0;
TH0 = 0xFC;
TL0 = 0x18; //重新装入初值;
t++;
if(t <5)
{
IO = 0;
}
else if(t < 10)
{
IO = 1;
}
else
{
t = 0;
}
}
上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变IO口电平电话的时间就可以了;
3、多个IO口 输出不同占空比的PWM;
原理是和1个的是一样的, 多用几个时间变量去计时,判断就可以了。
4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有PWM模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面; 然后改变第一次电平变化的时间和第二次电平变化的时间 就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部PWM模块的话,需要选择含有多路PWM功能的单片机来满足设计要求了。
2、普通51单片机IO口输出PWM的话,可以用定时器去计时,比如要输出100HZ的占空比50%的PWM。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100HZ的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把Io口取反;程序如下
void main()
{
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x18; // 晶振选择12MHz,配置定时器中断1ms
ET0 = 1;
TR0 =1;
EA= 1;
while(1); //程序停止在这里,,接下来就是去响应中断
}
void Timer0() interrupt 1
{
static unsigned char t = 0;
TH0 = 0xFC;
TL0 = 0x18; //重新装入初值;
t++;
if(t <5)
{
IO = 0;
}
else if(t < 10)
{
IO = 1;
}
else
{
t = 0;
}
}
上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变IO口电平电话的时间就可以了;
3、多个IO口 输出不同占空比的PWM;
原理是和1个的是一样的, 多用几个时间变量去计时,判断就可以了。
4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有PWM模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面; 然后改变第一次电平变化的时间和第二次电平变化的时间 就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部PWM模块的话,需要选择含有多路PWM功能的单片机来满足设计要求了。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
stm32怎么样?这个问题不能一概而论,要根据您的具体情况进行分析。意法半导体单片机产品线拥有业界很宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向,同时兼具很强的市场竞争力。STM32是ARM Cortex内核...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
提供下思路,两个定时器。一个控制高低电平,另一个控制四种PWM的顺序及时长。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不可以,一个具有PWM输出功能的IO口只能输出一路PWM
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要分时输出吗?不然的话一个IO口就只能输出一路PWM信号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询