HII 全部、
我正在挖掘 TM4C123G 的 PWM 功能、发现配置 PWM 分辨率非常令人困惑 、或者我可能会在某个地方出错、
让我举一个简单的代码示例 、它可以控制玩具直流电机的速度。我写了如下代码。
我将 PF1配置为 PWM 引脚、将 PE3配置为 POT 的 ADC。
-------------------------------------------------- 代码从这里开始-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include
#include
#include "inc/hw_gpio.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/pin_map.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"
#include "driverlib/adc.h"
int main (空)
{
uint32_t 结果[0];
SysCtlClockSet (SYSCTL_SYSDIV_5| SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlPWMClockSet (SYSCTL_PWMDIV_1);//将 PWM 模块的系统时钟分频
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
// ADCHardwareOversampleConfigure (ADC0_BASE、64);
SysCtlPeripheralReset (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
ADCSequenceDisable (ADC0_BASE、3);
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0|ADC_CTL_IE|ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、3);
SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);//Tiva Launchpad 有两个模块(0和1)。 模块1涵盖 LED 引脚
GPIOPinConfigure (GPIO_PF1_M1PWM5);
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1);//将 PF1设置为 PWM
PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN|PWM_GEN_MODE_DBG_RUN);
PWMGenPeriodSet (PWM1_base、PWM_GEN_2、4095);
PWMGenEnable (PWM1_base、PWM_GEN_2);
PWMOutputState (PWM1_base、PWM_OUT_5_BIT、true);
while (1)
{
ADCIntClear (ADC0_BASE、3);
ADCProcessorTrigger (ADC0_BASE、3);
while (!ADCIntStatus (ADC0_BASE、3、false))
{
}
ADCSequenceDataGet (ADC0_BASE、3、RESULT);
PWMPulseWidthSet (PWM1_base、PWM_OUT_5、RESULSE[0]);
}
------------------------------------------------------ 结束这里----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我在 PF1引脚上连接了一个示波器和一个万用表、以查看输出结果。10k POT 在0V 和3.3V 之间连接。还在观察窗口中添加了"result"值、该值在0-4095范围内完全不同、现在当我通过 POT 示波器输入4095值时 显示了100%占空比和约为3.1v 的电压、当我缓慢地将 POT 值降低至0时、与我在示波器中看到的占空比减小时一样、LED 也相应地亮起。
当我的电位计处于6级或7级时,低于 该 LED 指示灯开始闪烁,我认为这是 PWM 的属性 ,电压也停止降低,它从大约0.7V 持续上升到1.17v (上升和下降)。
如果我现在将同一个 PWM 与直流电机连接起来、我可以在高于 POT 电平(6或7)时控制速度、直至4095。
电流 随 LED 的闪烁而旋转。
我是否需要设置 PWM 分辨率、和
如果我希望从最初的0级控制 PWM、我需要设置什么 PWM 分辨率以及如何计算它?
谢谢你