如何利用单片机PWM实现各种波的输出呢?

一、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< ccmr1|=3< 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数值。

安达发|APS系统帮助家具行业建立精益生产计划
在NUCLEO_H743上玩MicroPython
厉害了我的华为p10能和小米5s飚性能,又能和iPhone7Plus比双摄像头
Note7噩梦空前:三星的表现反而逆天了?低价的note7是否能救三星?
基于RFID AS3990芯片的超高频手持读写器设计
如何利用单片机PWM实现各种波的输出呢?
浅谈搬运机器人在各行各业中的应用
控制系统典型应用车型 —— 潜入顶升式AMR
用LM317得到直流20V应用电子电路设计
plc设计师不可不知的五大内幕
对于云计算领域来说 2019年是具有标志性的一年
新型的电力负荷控制与监测系统的设计
GE公布CEO人选,股价迎来难得的上扬
cfo是什么意思
炬芯周正宇博士出席2022中国IC领袖峰会发表主题演讲
翎翔余压监控系统借助物联网让火灾防控变得更科学
车载电视的专用电视调谐器
加贺富仪艾全力开拓小型无线模块业务
联通3G手机直播央视春晚 呈现时尚新选择
国务院提出:推进智能网联汽车应用