在 TM4C123GHPM 数据表中、图片中显示了以下示例。
我注意到、没有 Tivaware 方法允许我设置 PWM0CMPA 值。 我想利用此示例创建一个变化的占空比 PWM、该 PWM 在滤波后模仿正弦曲线。 其理念是让 PWM 发生器中的三角波与传入的、经过处理的正弦波进行比较(因此该值是经过某种处理的 ADC 读数)、如果三角波>正弦波、我将在 PWMA 上输出高电平、否则输出低电平。 理想情况下、这两个峰值的高度将相同、其中两个峰值均为3300。 此外、我希望此开关在10kHz 时发生。 我的代码是否如下?
我假设:
1) 1)负载值是 PWM 发生器三角波形的峰值(基于我对数据表的理解)
2) 2)我会使用计时器中断、使切换每100us (10kHz)发生一次
3) 3)为了更改比较、我要在计时器中断中更改 PWM0_0_CMPA_R 值、以匹配我当前的正弦波样本。
4) 为了将三角形的高度设为3300、因此如果它是80MHz 时钟频率、我希望在设置 PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、SysCtlClockGet ()/24250)方法时重新加载值为3299。
5) 5)在常规设置中、我应该设置 PWM_O_0_CTL=x80 // Gena 是本地同步 的、 PWM0CMPA= 0x000000E0 //当比较器 A 递增时驱动 pwmA 为低电平、当比较器 A 递减时设置为高电平、当计数器=0和装载时不执行任何操作。 如何在递增至压实器 A 的计数过程中确保输出为高电平?
//设置 SysCtlPWMClockSet (SYSCTL_PWMDIV_1);//设置 PWM 时钟与乘法器为1 SysCtlPeripheralEnable (SYSCTL_Periph_PWM0)的处理器时钟; GPIPTL_Periph_GPIOB);GPIOPINBTL Configure (GPIO_PB4_M0PM2_PHASE);GPIOPTOM_PWM4_PM2_PM_PHIN;GPIOPPM_PHIN PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_DB_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、 SysCtlClockGet ()/24250);//我希望三角形的高度为3300,所以如果它是80MHz 时钟频率,我希望重新加载为 PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、2500* 50/100); PWMOutputState (PWM0_BASE、PWM_OUT_BIT、PWM_OUT_2) 真); PWMDeadBandEnable (PWM0_BASE、PWM_GEN_1、0xF、0xF); GPIO_PORTB_DR8R_R |=0xC0;// 8mA 输出 PWMGenEnable (PWM0_BASE、PWM_GEN_1);
