[技术问答]

关于AC7811例程中PWM

[复制链接]
1033|6
手机看帖
扫描二维码
随时随地手机跟帖
freshman001|  楼主 | 2020-7-2 20:41 | 显示全部楼层 |阅读模式
AC, PWM, se, pi, gp
想请教一下各位工程师,我将pwm例程中的pwm1的配置替换为PE1和PE2,为什么用示波器测量不到pwm波形呢?
void PWM_GpioInit(void)
{
    //配置PWM2 GPIO
    GPIO_SetFunc(GPIO_PB15, 1); ///Set PWM2_CH0
    GPIO_SetFunc(GPIO_PC0, 1); ///Set PWM2_CH1
    GPIO_SetFunc(GPIO_PC1, 1); ///Set PWM2_CH2
    GPIO_SetFunc(GPIO_PC2, 1); ///Set PWM2_CH3
    GPIO_SetFunc(GPIO_PD13, 1); ///Set PWM2_CH4
    GPIO_SetFunc(GPIO_PD14, 1); ///Set PWM2_CH5
    //配置PWM1 GPIO
    GPIO_SetFunc(GPIO_PE1, 2);  ///Set PWM1_CH0
    GPIO_SetFunc(GPIO_PE2, 2);  ///Set PWM1_CH1

    //配置PWM0 GPIO
    GPIO_SetFunc(GPIO_PB8, 1);  ///Set PWM0_CH0
    GPIO_SetFunc(GPIO_PB9, 1);  ///Set PWM0_CH1
}
/**
* PWM1_GenerateFrequency
*
* @param[in] none
* @return none
*
* @brief 产生PWM信号
*
*/
void PWM1_GenerateFrequency(void)
{
    uint16_t preScaler = 0,channelValue;
    float duty = 0;
    /*
        初始化PWM模块为边沿对齐(PWM_PWMMODE_EDGEALLIGNED),高有效(PWM_PWM_HIGHTRUEPULSE)
        输出模式有三种配置模式:
        1. EPWM(边沿对齐)模式  PWM_PWMMODE_EDGEALLIGNED
            EPWM(边沿对齐) 周期由MCVR - CNTIN + 1确定,占空比由CHnV - CNTIN确定
        边沿对齐PWM频率的计算公式 = PWM时钟频率 / (PWM计数器的模数值 - CNTIN + 1) / (PWM时钟分频值 + 1)
        freqValue = CLK / (MOD_PWM - CNTIN+ 1) / (PRESCALER_PWM + 1)
        备注:默认CNTIN为0,如果没有特意去设置CNTIN值,计时公式可简写为:
        freqValue = CLK / (MOD_PWM + 1) / (PRESCALER_PWM + 1)
        2.CPWM(中心对齐)模式 PWM_PWMMODE_CENTERALLIGNED
            CPWM(中心对齐) 周期由2x(MCVR - CNTIN)确定,占空比由2x(CHnV - CNTIN)确定。MCVR必须保持在0x0001至0x7FFF范围内。
        中心对齐PWM频率的计算公式 = (PWM时钟频率 / (PWM计数器的模数值 - CNTIN + 1) / (PWM时钟分频值 + 1)) / 2
        freqValue = CLK / (MOD_PWM - CNTIN+ 1) / (PRESCALER_PWM + 1) / 2
        3.Combine模式  PWM_PWMMODE_COMBINE
            组合模式周期由(MCVR - CNTIN + 1)确定,占空比由(|CH(n+1)V - CH(n)V|)确定。
        组合模式PWM频率的计算公式 = PWM时钟频率 / (PWM计数器的模数值 - CNTIN + 1) / (PWM时钟分频值 + 1)
        freqValue = CLK / (MOD_PWM - CNTIN + 1) / (PRESCALER_PWM + 1)
        组合模式两个通道的输出默认为互补输出。可配置为非互补输出。如何配置?
        
        有效极性配置:
        PWM_PWM_HIGHTRUEPULSE:高有效,如果占空比设为25%,是指的高有效电平占比25%
        PWM_PWM_LOWTRUEPULSE:低有效,如果占空比设为25%,是指的低有效电平占比25%
    */
    PWM_PWMInit(PWM1, PWM_PWMMODE_EDGEALLIGNED, PWM_PWM_HIGHTRUEPULSE);
    /*
    设置MCVR寄存器。及设置PWM计数器的模数值。当PWM计数值达到MCVR值后,
    溢出标志(CNTOF)在下一个时钟置起,计数器的下一个值取决于所选的计数方法。
    */
    PWM_SetModValue(PWM1, MOD_PWM);
    // 占空比计算方式
    /*
        注意:如下计算方式仅限于边沿对齐和中心对齐模式,组合模式的占空比由(|CH(n+1)V - CH(n)V|)确定。
    */
    duty = 0.25; //25%占空比
    channelValue = (MOD_PWM +1) * duty;//
    //设置CH0占空比
    PWM_SetChannelValue(PWM1, PWM_CHANNEL_CHANNEL0, channelValue);
    duty = 0.60; //60%占空比
    channelValue = (MOD_PWM +1) * duty;//
    //设置CH1占空比
    PWM_SetChannelValue(PWM1, PWM_CHANNEL_CHANNEL1, channelValue);
    preScaler = (APB_CLK / (MOD_PWM + 1) / FREQ) - 1;
    PWM_ClockSet(PWM1, 1, preScaler);

使用特权

评论回复

相关帖子

RunningX| | 2020-7-3 09:52 | 显示全部楼层
只改了IO口的话,是可以看到PWM的

使用特权

评论回复
freshman001|  楼主 | 2020-7-3 13:07 | 显示全部楼层
本帖最后由 freshman001 于 2020-7-3 13:10 编辑
RunningX 发表于 2020-7-3 09:52
只改了IO口的话,是可以看到PWM的

对的,我也好奇为什么在那个IO口读取不到呢!我等于就是把PWM1改到PE1和PE2来输出

IO口

IO口

PWM1

PWM1

是不是应该在这个JP12能读取到


使用特权

评论回复
RunningX| | 2020-7-3 15:00 | 显示全部楼层
freshman001 发表于 2020-7-3 13:07
对的,我也好奇为什么在那个IO口读取不到呢!我等于就是把PWM1改到PE1和PE2来输出

是不是应该在这个JP12 ...

你直接量从MCU出来的信号(可以把后面的外围电路给断开),不要量经过其他芯片的信号。

使用特权

评论回复
freshman001|  楼主 | 2020-7-3 15:26 | 显示全部楼层
RunningX 发表于 2020-7-3 15:00
你直接量从MCU出来的信号(可以把后面的外围电路给断开),不要量经过其他芯片的信号。 ...

行呢,我尝试一下,不行再来请教您

使用特权

评论回复
freshman001|  楼主 | 2020-7-3 16:10 | 显示全部楼层
我尝试了一下,的确直接从芯片引脚可以测量出。那还想请教一下,这个问题有什么解决办法吗?
(嵌入式新手)

使用特权

评论回复
RunningX| | 2020-7-3 17:06 | 显示全部楼层
freshman001 发表于 2020-7-3 16:10
我尝试了一下,的确直接从芯片引脚可以测量出。那还想请教一下,这个问题有什么解决办法吗?
(嵌入式新手 ...

这不是一个问题吧。只要不加外面的电路就可以了,外面的电路是设计成LIN接口的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

0

粉丝