标题:
如何用51单片机同时产生六路可调频率 占空比的pwm
[打印本页]
作者:
zxc138
时间:
2021-6-8 16:41
标题:
如何用51单片机同时产生六路可调频率 占空比的pwm
作者:
啤酒瓶子老大
时间:
2021-6-8 19:39
可以用STC8G2K系列的单片机,有8路的,也有45路的PWM,够你用了。
51你是指89C52类的吗?如果是作 ,论坛有规定不允许回答。
如果是做项目,建议还是改用STC系列吧。选好型号,比89C52都便宜。又有各种封装。多方便。
作者:
51hei团团
时间:
2021-6-8 23:51
#include "include.h"
void pwm_init()
{
P1M0|=0xc0 ;//(00000000)
P1M1=0 ;//(11000000)
P2M0|=0x8e ;//(00000000)
P2M1=0 ;//(10001110)
PWM2T1=0x0001;
PWM2T2=0;
PWM3T1=0x0001;
PWM3T2=0;
PWM4T1=0x0001;
PWM4T2=0;
PWM5T1=0x0001;
PWM5T2=0;
PWM6T1=0x0001;
PWM6T2=0;
PWM7T1=0x0001;
PWM7T2=0;
P_SW2=0X80; //特殊功能寄存器位于扩展RAM区域
PWMCFG=0X00; //初始电平全低电平,不用ADC
PWMCKS=0X0B; //系统时钟12分频(11+1)
PWMC=20000; //周期20ms--20000us12M晶振12分频时钟
PWMCR|=0X80;
}
void PWM1_control(u16 pwm)
{
PWM2T1=PWMC-PWM2T2;
PWM2T2=pwm; //脉宽控制-高电平脉宽时间
PWM2CR=0X08; //输出引脚PWM2-P2.7
PWMCR|=0X01;
}
void PWM2_control(u16 pwm)
{
PWM3T1=PWMC-PWM3T2;
PWM3T2=pwm; //脉宽控制-高电平脉宽时间
PWM3CR=0X00; //输出引脚PWM2-P2.1
PWMCR|=0X02;
}
void PWM3_control(u16 pwm)
{
PWM4T1=PWMC-PWM4T2;
PWM4T2=pwm; //脉宽控制-高电平脉宽时间
PWM4CR=0X00; //输出引脚PWM2-P2.2
PWMCR|=0X04;
}
void PWM4_control(u16 pwm)
{
PWM5T1=PWMC-PWM5T2;
PWM5T2=pwm; //脉宽控制-高电平脉宽时间
PWM5CR=0X00; //输出引脚PWM2-P2.3
PWMCR|=0X08;
}
void PWM5_control(u16 pwm)
{
PWM6T1=PWMC-PWM6T2;
PWM6T2=pwm; //脉宽控制-高电平脉宽时间
PWM6CR=0X00; //输出引脚PWM2-P1.6
PWMCR|=0X10;
}
void PWM6_control(u16 pwm)
{
PWM7T1=PWMC-PWM7T2;
PWM7T2=pwm; //脉宽控制-高电平脉宽时间
PWM7CR=0X00; //输出引脚PWM2-P1.7
PWMCR|=0X20;
}
复制代码
作者:
wulin
时间:
2021-6-9 05:39
从原则来讲可以实现,但受51单片机自身硬件条件限制。如果要求六路pwm频率、占空比互不关联的独立调整,并且频率范围很宽、占空比范围很大实现起来有困难甚至无法实现。
作者:
woaiwm
时间:
2021-6-9 09:04
89C52貌似不行,可以用更高级一点的51单片机
作者:
fefen0
时间:
2021-6-9 09:56
定时器就可以实现~
作者:
zxc138
时间:
2021-6-10 08:24
fefen0 发表于 2021-6-9 09:56
定时器就可以实现~
怎么实现
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1