PWM输出各种波
时间:2023-05-02 13:37:00
在写这篇文章之前,首先声明这篇文章只是个人观点,如果有什么问题可以提出来,互相学习。
一、PWM
PWM调制技术-包括调节空比和频率。
PWM用途-广泛应用于电源输出和电机驱动。
电源输出:调整不同频率或相同频率的电压输出,控制电流输出等。
电机驱动-在网上找到了很多信息,大多数驱动芯片,所以不需要太复杂的顺序,但有些电机可以直接由单片机驱动,不需要驱动芯片和驱动器,提高成本,我希望以下介绍希望直接驱动电机。
二、利用PWM输出相差为任意值的波形
1.可以用普通定时器输出。我觉得这个方法有点不介绍。
2、用PWM设置寄存器输出PWM输出比较模式。
PWM模式包括:输出比较,PWM模式、强制输出等
PWM频率确定由PSC和ARR确定。CCR确定占空比。
PWM输出比较模式CCR确定的其实是相位,PWM模式CCR确定的则是 占空比。
事实上,输出这样几个波形,PWM模式设置为比较输出和翻转模式CCR值实际上可以输出。
void TIM3_Init(u16 arr,u16 psc)
{
TIM3->ARR=arr;
TIM3->PSC=psc;
TIM3->CCMR1|=1<<3;
TIM3->CCMR1|=3<<4;
。。。
}
main函数:
TIM3_Init(1000-1,72-1);
TIM3->CCR1=250-1;
TIM3->CCR2=500-1;
TIM3->CCR3=750-1;
TIM3->CCR4=1000-1;
输出相位差45度,占空比50。CNT从0计数,当CNT=CCR,波形翻转,CNT溢出重新从0计数,然后再计数CCR,此时再次翻转,形成相位差。
三、PWM输出正余弦波
PWM输出余弦波,先生成PWM余弦定律变化的数字,然后设置相应的空间比。生成正余弦数字,可以使用c语言在线编译工具生成,写入函数,然后写入单片机程序的数组。如果您的数字是固定的,函数如下:
void get_sin_tab1( unsigned int point, unsigned int maxnum )
{
unsigned int i = 0, j = 0, k = 0;
float hd = 0.0; //弧度
float fz = 0.0; //峰值
unsigned int tem = 0;
j = point / 2;
hd = PI / j;
k = maxnum / 2; ///最大值一半
for( i = 0; i < point; i )
{
fz = k * sin( hd * (i) ) k;
tem = ( unsigned int )(fz * 1)//通过系数可以调整输出有效值大小
sinData[i] = tem;
printf("%d,",tem);
}
printf("\r\n");
}
将数字写入单片机的空比可以生成各种不同相位的函数,可以调整函数fz数值。