This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
[MSP432] P5.6 TIMER_A2 hgih 频率 PWM 生成。
您好!
我必须 通过 P5.6在1Hz 至3MHz 范围内生成各种 PWM 频率、但我无法生成超过24kHz 的频率。
请查看以下设置值、并为我提供一种在 P5.6上生成高频 PWM 的方法。
SMCLK 设置:
MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
定时器控制: tassel= SMCLK,ID = 0,EX=0。
…
{
PWM_Disable_P5P6_7 (_pin);
Timer_A2->CCR[0]=_PERIOD; // PWM 周期/2
switch (_pin){
情况6:/*将 GPIO2.6配置为 PWM 的外设输出*/
Timer_A2->CCTL[1]= TIMER_A_CCTLN_OUTMOD_6;// CCR3切换/置位
Timer_A2->CCR[1]=占空比; // CCR3 PWM 占空比
Timer_A2->CCR[2]=_Duty; // CCR4 PWM 占空比
中断;
情况7:/*将 GPIO2.7配置为 PWM 的外设输出*/
Timer_A2->CCTL[2]= TIMER_A_CCTLN_OUTMOD_6;// CCR4切换/置位
Timer_A2->CCR[2]=_Duty; // CCR4 PWM 占空比
中断;
}
Timer_A2->Ex0 = ex;
Timer_A2->CTL =((clk & 0x03)<< 8)|//TIMER_A_CTL_tassel_2 | // SMCLK
((id & 0x03)<< 6)|
Timer_A_CTL_MC_3; //向上/向下计数模式
PWM_Enable_P5P6_7 (_Pin);
}
…………
引脚控制
void PWM_Enable_P5P6_7 (int _pin)
{
switch (_pin){
情况6:/*将 GPIO5.6配置为 PWM 的外设输出*/
P5->DIR |= BIT6; // P5.6 -输出
P5->SEL0 |= BIT6; // P5.6 -端口映射功能
P5->SEL1 &=~(BIT6); // P5.6 -默认 PM 函数= TimerA CCRx
中断;
情况7:/*将 GPIO5.7配置为 PWM 的外设输出*/
P5->DIR |= BIT7; // P5.7 -输出
P5->SEL0 |= BIT7; // P5.7 -端口映射功能
P5->SEL1 &=~(BIT7); // P5.7 -默认 PM 函数= TimerA CCRx
中断;
}
}
感谢您的回复。
DCO 设为48Mhz、SMCLK 被选择 DCO 作为分频器1。
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);
MAP_CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
MAP_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
MAP_CS_initClockSignal (CS_ACLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1);
参数_period /_Duty 在100 至65535范围内放置、并且已经检查了数字逻辑和示波器。
当_period 设置为100时、它生成240kHz、但0.01占空比 不稳定。
谢谢。
占空 比=_period * _Duty / 100
因此、如果_period 为100、则_Duty 将作为整数从0变为100。
PC 程序具有基于 用户输入的_period 值和 calucates _Duty 、_period 和_Duty 的类型都是整数。
这里是测试输入值、这些输入值会生成240kHz PWM、如所附的屏幕截图。
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);
MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
_port =5、_pin = 6、_enable =1、_period=100、_Duty=50、 CLK=2、id =0、ex =1
bool PWM_Pin_Control (uint_fast8_t _port、 uint_fast8_t _pin、uint_fast8_t _enable、int _period、 int _duty、 unsigned char clk、unsigned char id、unsigned char ex)
{
if (_port == 2)
{
三、工作安排
}
否则、如果(_port == 5)
{
PWM_Disable_P5P6_7 (_pin);
Timer_A2->CCR[0]=_PERIOD; // PWM 周期/2
switch (_pin){
情况6:/*将 GPIO5.6配置为 PWM 的外设输出*/
Timer_A2->CCTL[1]= TIMER_A_CCTLN_OUTMOD_6;// CCR3切换/置位
Timer_A2->CCR[1]=_DUTY; // CCR3 PWM 占空比
中断;
情况7:/*将 GPIO5.7配置为 PWM 的外设输出*/
Timer_A2->CCTL[2]= TIMER_A_CCTLN_OUTMOD_6;// CCR4切换/置位
Timer_A2->CCR[2]=_DUTY; // CCR4 PWM 占空比
中断;
}
Timer_A2->Ex0 = ex;
Timer_A2->CTL =((clk & 0x03)<< 8)|//TIMER_A_CTL_tassel_2 | // SMCLK
((id & 0x03)<< 6)|
Timer_A_CTL_MC_3; //向上/向下计数模式
if (_enable!= 0)
PWM_Enable_P5P6_7 (_Pin);
否则{
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN[_PIN]);
}
}
否则{
返回 false;
}
返回 true;
}
谢谢。